当第二个玩家做出选择时,如何排除第一个玩家的角色选择?

时间:2018-12-20 10:51:44

标签: java

我正在使用Java创建基于文本的战斗游戏。

这是Dim sh as Shape Set sh = TheSheet.Shapes("ComboProva") With sh.DrawingObject.Object Call .AddItem("Variante x") End With 类中的方法之一,它允许游戏创建两个带有参数game.javausername和固定值{{1}的角色}。

character

方法中的for循环确定两个播放器的规格。

每个玩家都可以通过在控制台中键入一个数字(从1到4)来确定角色的类型来选择角色。如果该数字不在1到4之间,则系统将强制退出。系统使播放器1首先选择规格,然后选择播放器2。

但是,我不确定在玩家2选择角色1时如何排除角色1的角色选择。这意味着可以为两个玩家选择相同的角色,我想避免这种情况。我要更改代码的方式不是在列表中显示先前选择的字符(将文本设为灰色将是一个好主意),或者在再次选择同一字符时显示错误消息。 (可能两者都有)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

额外的简单解决方案: 制作一个带有pokemon_id-player映射的地图,然后仅搜索是否存在具有给定ID的神奇宝贝。

更干净的解决方案: 使用名称,攻击,攻击力,防御力等字段创建Pokemon类。在游戏开始时,创建您想要拥有的所有宠物小精灵的列表。要在玩家类中添加类型为Pokemon ...的字段,稍后当用户拿起Pokemon时,只需将Pokemon分配给玩家对象,然后从它们的原始列表中删除Pokemon。问题解决了。

伪代码:

class Pokemon {
    private String name;
    private int attack;
    private int powerAttack;
    private int defenceAttack;

    [...getters, setters, constructor, EQUALS, HASHCODE]

    public String toString(){
        return printf("{0} (Attacks: {1}, Attack Power: {2}, Defense Power: {3})", name, attack, powerAttack, defenceAttack);
    }
}

播放器类:

class Player {
    [... other fields...]

    private Pokemon pokemon;

    [...getters, setters, constructor etc...]
}

游戏代码:

List<Pokemon> availablePokemons = new ArraysList<>(Arrays.asList(new Pokemon("sampleName", 1,2,3)));

show_available_pokemons_on_console();

[...]

player.setPokemon(selectedPokemon);
availablePokemons.remove(selectedPokemon);

[...]

答案 1 :(得分:0)

首先,回答您的问题:

您需要以某种方式显示该字符不可用。我选择只显示'---'而不是字符的数字,但是您可以更改操作方式:

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);

一些其他提示:

  • 由于您使用的是int,因此可以使用switch块来代替if-else块。
  • 您应该对其进行更改,以便字符选择菜单从字符本身中获取每个字符的数据。