动物换位游戏java
时间: 2023-07-01 21:05:07 浏览: 111
动物换位游戏是一个简单的逻辑游戏,玩家需要根据给定的规则,将动物们重新排列,以满足特定的条件。以下是一个基于Java语言的动物换位游戏的示例实现:
```java
import java.util.Arrays;
import java.util.Scanner;
public class AnimalSwapGame {
private static final int NUM_ANIMALS = 5;
private static final String[] ANIMAL_NAMES = {"狮子", "老虎", "猴子", "大象", "长颈鹿"};
private static final String[] ATTRIBUTE_NAMES = {"颜色", "性别", "年龄", "体型", "国籍"};
private static final String[][] ATTRIBUTES = {
{"红色", "黄色", "蓝色", "绿色", "紫色"},
{"公", "母"},
{"幼年", "成年", "老年"},
{"小", "中等", "大"},
{"中国", "美国", "英国", "法国", "俄罗斯"}
};
private static final int[][] RULES = {
//规则1:狮子和老虎的颜色必须相同
{0, 1, 0},
//规则2:年龄最大的动物是长颈鹿
{4, 2, 2},
//规则3:中国的动物必须是猴子或大象
{2, 4, 0},
//规则4:红色的动物必须是公的
{1, 0, 0},
//规则5:美国的动物必须比法国的动物年龄小
{3, 1, 1}
};
private String[][] animals;
public AnimalSwapGame() {
animals = new String[NUM_ANIMALS][ATTRIBUTE_NAMES.length];
// 随机分配每个动物的属性值
for (int i = 0; i < NUM_ANIMALS; i++) {
for (int j = 0; j < ATTRIBUTE_NAMES.length; j++) {
animals[i][j] = ATTRIBUTES[j][(int) (Math.random() * ATTRIBUTES[j].length)];
}
}
}
public void play() {
Scanner scanner = new Scanner(System.in);
printRules();
while (!isGameFinished()) {
printAnimals();
System.out.print("请输入要交换位置的两个动物编号(用空格分隔):");
int animal1 = scanner.nextInt();
int animal2 = scanner.nextInt();
swapAnimals(animal1, animal2);
if (!isRulesSatisfied()) {
System.out.println("当前交换不符合规则,请重新交换!");
swapAnimals(animal1, animal2);
}
}
System.out.println("恭喜你,成功完成游戏!");
}
private void printRules() {
System.out.println("游戏规则:");
for (int i = 0; i < RULES.length; i++) {
System.out.println("规则" + (i + 1) + ":" +
ANIMAL_NAMES[RULES[i][0]] + "的" + ATTRIBUTE_NAMES[RULES[i][1]] + "必须" +
ATTRIBUTES[RULES[i][1]][RULES[i][2]]);
}
System.out.println();
}
private void printAnimals() {
System.out.println("当前动物列表:");
for (int i = 0; i < NUM_ANIMALS; i++) {
System.out.print(i + 1 + ". " + ANIMAL_NAMES[i] + "(");
for (int j = 0; j < ATTRIBUTE_NAMES.length; j++) {
System.out.print(ATTRIBUTE_NAMES[j] + ":" + animals[i][j]);
if (j < ATTRIBUTE_NAMES.length - 1) {
System.out.print(", ");
}
}
System.out.println(")");
}
System.out.println();
}
private void swapAnimals(int animal1, int animal2) {
String[] temp = Arrays.copyOf(animals[animal1 - 1], ATTRIBUTE_NAMES.length);
animals[animal1 - 1] = Arrays.copyOf(animals[animal2 - 1], ATTRIBUTE_NAMES.length);
animals[animal2 - 1] = Arrays.copyOf(temp, ATTRIBUTE_NAMES.length);
}
private boolean isRulesSatisfied() {
for (int[] rule : RULES) {
if (!isRuleSatisfied(rule)) {
return false;
}
}
return true;
}
private boolean isRuleSatisfied(int[] rule) {
String attrValue1 = animals[rule[0]][rule[1]];
String attrValue2 = ATTRIBUTES[rule[1]][rule[2]];
return attrValue1.equals(attrValue2);
}
private boolean isGameFinished() {
// 如果所有动物的属性都相同,就认为游戏结束
for (int i = 1; i < NUM_ANIMALS; i++) {
if (!Arrays.equals(animals[i], animals[0])) {
return false;
}
}
return true;
}
public static void main(String[] args) {
AnimalSwapGame game = new AnimalSwapGame();
game.play();
}
}
```
在这个示例实现中,我们使用了以下数据:
- `NUM_ANIMALS`:动物的数量,这里设为5。
- `ANIMAL_NAMES`:动物的名称,共5种。
- `ATTRIBUTE_NAMES`:每个动物拥有的属性名称,共5种。
- `ATTRIBUTES`:每个属性的可能取值,共5种属性,每种属性有若干个取值。
- `RULES`:游戏规则,共5条,每条规则由三个整数构成,分别表示需要比较的动物、属性和属性取值。
在游戏开始时,我们随机分配每个动物的属性值。然后,进入游戏循环,每次循环输出当前动物列表,并让玩家输入要交换位置的两个动物编号。如果交换后不符合游戏规则,就要求玩家重新输入。直到所有动物的属性都相同,游戏结束。
阅读全文