【发布时间】:2016-03-27 01:21:59
【问题描述】:
我正在基于名为 War 的游戏构建一个简单的纸牌游戏。它适用于两个玩家,但我需要对其进行修改以适用于用户一开始输入的任意数量的玩家。我无法弄清楚如何跟踪球员和得分,因为我不再有具体的变量可以使用(无法为每个可能的球员创建一个变量,所以球员是动态添加的)。我碰壁了,不知道从这里去哪里。
这是我的主要方法:
System.out.println("Welcome to War! How many players are playing?"); //User prompt
Scanner scanner = new Scanner(System.in); //Scanner init
int numberOfPlayers = scanner.nextInt();//set number of players to next integer entered
ArrayList<String> deck = createDeck(numberOfPlayers);
ArrayList<String> playerNames = new ArrayList<String>();
Map<String, Integer> players = new HashMap<String, Integer>();
System.out.println("Enter player name");
for (int p = 0; p <= numberOfPlayers; p++) {
String playerID = scanner.next();
addPlayer(playerID);
players.put(playerID, 100);
playerNames.add(playerID);
}
for (int j = createDeck(numberOfPlayers).size(); j > 0; j = j - numberOfPlayers) { //j is set to deck length. Increment down two number each loop.
String readString = scanner.nextLine(); //Set variable "readString" to user input
int score = 0;
if (readString.equals("")) { //If user input equals "enter"...
ArrayList<Integer> currentScore = new ArrayList<Integer>();
for (int q = 0; q <= numberOfPlayers; q++){
score = checkValue(deck);
String name = playerNames.get(q);
currentScore.add(score);
System.out.println(name +" drew a "+ deck.get(0) + " worth " + score + " points!"); //Print player 1's card
deck.remove(0); //Remove card
players.put(name, players.get(name).intValue() - score);
}System.out.println(players.values());
}
}
此方法检查抽出的牌的值并分配一个点值。
int currentScore = 0;
boolean checkAce = deck.get(0).startsWith("Ace");
boolean checkTwo = deck.get(0).startsWith("Two");
boolean checkThree = deck.get(0).startsWith("Three");
boolean checkFour = deck.get(0).startsWith("Four");
boolean checkFive = deck.get(0).startsWith("Five");
boolean checkSix = deck.get(0).startsWith("Six");
boolean checkSeven = deck.get(0).startsWith("Seven");
boolean checkEight = deck.get(0).startsWith("Eight");
boolean checkNine = deck.get(0).startsWith("Nine");
boolean checkTen = deck.get(0).startsWith("Ten");
boolean checkJack = deck.get(0).startsWith("Jack");
boolean checkQueen = deck.get(0).startsWith("Queen");
boolean checkKing = deck.get(0).startsWith("King");
if (checkAce) {
currentScore = 14;
}else if (checkTwo) {
currentScore = 2;
}else if (checkThree) {
currentScore = 3;
}else if (checkFour) {
currentScore = 4;
}else if (checkFive) {
currentScore = 5;
}else if (checkSix) {
currentScore = 6;
}else if (checkSeven) {
currentScore = 7;
}else if (checkEight) {
currentScore = 8;
}else if (checkNine) {
currentScore = 9;
}else if (checkTen) {
currentScore = 10;
}else if (checkJack) {
currentScore = 11;
}else if (checkQueen) {
currentScore = 12;
}else if (checkKing) {
currentScore = 13;
}
return currentScore;
}
我的主要问题是什么是处理未知数量的多个玩家的最佳方式,以使我能够跟踪分数并宣布获胜者。到目前为止,我所拥有的内容会打印出我的名字以及他们每轮获得多少分,但我没有办法操纵或相互比较这些值。
我使用dictionary 让玩家key 与分数value 相关联。
编辑:任何不包含多个类的解决方案都是首选。
【问题讨论】:
标签: java dictionary arraylist