我正在使用Java创建基于文本的战斗游戏。
这是Dim sh as Shape
Set sh = TheSheet.Shapes("ComboProva")
With sh.DrawingObject.Object
Call .AddItem("Variante x")
End With
类中的方法之一,它允许游戏创建两个带有参数game.java
,username
和固定值{{1}的角色}。
character
方法中的for循环确定两个播放器的规格。
每个玩家都可以通过在控制台中键入一个数字(从1到4)来确定角色的类型来选择角色。如果该数字不在1到4之间,则系统将强制退出。系统使播放器1首先选择规格,然后选择播放器2。
但是,我不确定在玩家2选择角色1时如何排除角色1的角色选择。这意味着可以为两个玩家选择相同的角色,我想避免这种情况。我要更改代码的方式不是在列表中显示先前选择的字符(将文本设为灰色将是一个好主意),或者在再次选择同一字符时显示错误消息。 (可能两者都有)
有什么想法吗?
答案 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块。