首页 > 解决方案 > 当第二个玩家做出选择时,如何排除第一个玩家的角色选择?

问题描述

我正在使用 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 的角色选择。这意味着可以为两个玩家选择相同的角色,我想避免这种情况。我想更改代码的方法是不在列表中显示先前选择的字符(将文本设为灰色将是一个好主意)或在再次选择相同字符时显示错误消息。(可能两者都有)

有任何想法吗?

标签: java

解决方案


首先,回答你的问题:

您需要以某种方式显示该角色不可用。我选择只显示 '---' 而不是字符的编号,但您可以更改执行方式:

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 块,因为您使用的是ints,所以您可以使用 switch 块。
  • 您应该更改它,以便字符选择菜单从字符本身获取每个字符的数据。

推荐阅读