java - 当第二个玩家做出选择时,如何排除第一个玩家的角色选择?
问题描述
我正在使用 Java 创建一个基于文本的战斗游戏。
这是game.java
该类中的方法之一,它允许游戏使用参数 、 和 的固定值创建username
两个character
角色HP
。
public void startGame() {
System.out.println("\033[1;33mHello! Welcome to the RPG Battle Game!\033[0m");
Scanner scanner = new Scanner(System.in);
int users = 2;
players = new Player[users];
this.users = users;
for (int i = 0; i < users ; i++) {
int playernum = i + 1;
System.out.print("Enter the name of User " + playernum + ": ");
String username = scanner.nextLine();
System.out.println("@ Character list @");
System.out.println("1. Charizard (Attacks: 2, Attack Power: 10, Defense Power: 0)");
System.out.println("2. Blaitoise (Attacks: 2, Attack Power: 8, Defense Power: 1)");
System.out.println("3. Venusaur (Attacks: 2, Attack Power: 5, Defense Power: 2)");
System.out.println("4. Pikachu (Attacks: 1, Attack Power: 10, Defense Power: 4)");
System.out.print("Select your Character (Enter the number of character): ");
Character character = null;
int characterNumber = Integer.valueOf(scanner.nextLine());
if (characterNumber == 1) {character = Charizard;}
else if (characterNumber == 2) {character = Blaitoise;}
else if (characterNumber == 3) {character = Venusaur;}
else if (characterNumber == 4) {character = Pikachu;}
else {
System.out.println("ERROR! ENTER A NUMBER FROM 1 TO 4!");
System.exit(0);
}
Player player = new Player(username, character, 40);
players[i] = player;
System.out.println("---------------------------------------------------------");
System.out.println("Successfully created User " + player.name + " with character " + character.name + ".");
System.out.println("---------------------------------------------------------");
}
System.out.println("-----------------------------------");
System.out.println("You created the users successfully.");
System.out.println("-----------------------------------");
Level newLevel = new Level(level);
currentLevel = newLevel;
newLevel.startLevel();
}
该方法中的 for 循环确定了两个玩家的规格。
每个玩家可以通过在控制台中输入一个数字来选择一个角色,这个数字是从 1 到 4,确定角色的类型。如果数字不在 1 到 4 之间,则系统将强制退出。系统让玩家 1 先选择规格,然后玩家 2。
但是,当玩家 2 做出选择时,我不确定如何排除玩家 1 的角色选择。这意味着可以为两个玩家选择相同的角色,我想避免这种情况。我想更改代码的方法是不在列表中显示先前选择的字符(将文本设为灰色将是一个好主意)或在再次选择相同字符时显示错误消息。(可能两者都有)
有任何想法吗?
解决方案
首先,回答你的问题:
您需要以某种方式显示该角色不可用。我选择只显示 '---' 而不是字符的编号,但您可以更改执行方式:
System.out.println(characterSelected(1) ? "---" : "1. Charizard (Attacks: 2, Attack Power: 10, Defense Power: 0)");
System.out.println(characterSelected(2) ? "---" : "2. Blaitoise (Attacks: 2, Attack Power: 8, Defense Power: 1)");
System.out.println(characterSelected(3) ? "---" : "3. Venusaur (Attacks: 2, Attack Power: 5, Defense Power: 2)");
System.out.println(characterSelected(4) ? "---" : "4. Pikachu (Attacks: 1, Attack Power: 10, Defense Power: 4)");
为此,您需要以下characterSelected(int id)
方法:
private boolean characterSelected(int id) {
return selectedCharacters.contains(id);
}
然后,您需要一个 selectedCharacters 列表来执行此操作:
(外部,作为对象变量)
ArrayList<Integer> selectedCharacters = new ArrayList<>();
(在 for 循环结束时)
Player player = new Player(username, character, 40);
players[i] = player;
selectedCharacters.add(characterNumber);
一些额外的提示:
- 代替 if-else 块,因为您使用的是
int
s,所以您可以使用 switch 块。 - 您应该更改它,以便字符选择菜单从字符本身获取每个字符的数据。
推荐阅读
- c - Linux:同时使用 backtrace()、/proc/self/maps 和 addr2line 会导致无效结果
- azure-data-explorer - 从跟随者集群执行驻留在领导者集群上的 Kusto 函数
- amazon-web-services - 无法将 IAM 和 S3 存储桶策略分配给 List/Get/Put
- java.util.logging - 日志处理程序的使用
- android - 如何在 kotlin 中通过 GSON lib 解析 JSON 时管理 android 应用程序的空值
- python - 如何将 LRU 缓存用于不可散列列表?
- java - 为什么我的 Fragment 上的 EventBus 事件不起作用?
- javascript - 如何检查用户是否已通过身份验证以通过 Vue 路由导航?
- python - 如何解析 dockerfile 中的卷以将应用程序推送到 docker hub
- haskell - 堆栈如何解决依赖关系?