我正在尝试使用ArrayList构建一个21点纸牌游戏。我很难理解向所有玩家发一张牌的逻辑——我认为我的问题更多地涉及使用迭代器。。。。
问题出在游戏运行器的 //交易卡部分。我知道我没有正确使用itr为阵列列表中的每个玩家分配一张新卡。
import java.util.*;
public class GameRunner {
public static void main(String[] args) {
int numDecks = Integer.parseInt(args[0]);;
int numPlayers = Integer.parseInt(args[1]);
String pName;
//init
Scanner sc = new Scanner(System.in);
Deck gameDeck = new Deck(numDecks, true);
List<Player> players = new ArrayList<>();
players.add(new Player("Dealer"));
//create players
do{
System.out.print("Enter an name of a player: ");
pName = sc.next();
players.add(new Player(pName));
numPlayers--;
}while( numPlayers > 0);
System.out.println(players.toString());
//deal cards
ListIterator<Player> itr = (ListIterator<Player>) players.iterator();
while (itr.hasNext()){
itr.drawCard(gameDeck.dealNextCard());
}
}//end main
}//end GameRunner class
...
来自玩家类:
public boolean drawCard(Card aCard){
//print error if player is already at the card max
if(this.numCards == MAX_CARDS){
System.err.printf("%s's hand already has " + MAX_CARDS +
"cannot add another card\n", this.name);
System.exit(1);
}
//add new card in the next slot and increment the number of cards
this.hand[this.numCards] = aCard;
this.numCards++;
return (this.getHandSum() <= 21);
}
来自甲板班
public Card dealNextCard(){
if (numCards == 0){
System.err.print("Too Few Cards to Deal another card");
System.exit(1);
}
this.numCards--;
return mCards.pop();
}
在使用迭代器的部分中,使用以下内容:
// deal cards
for (Player p : players) {
p.drawCard(gameDeck.dealNextCard());
}
这个for(Player p: player)
称为增强的for循环,有时也称为for-each循环。它循环遍历Iterable
对象中的每个项目。Iterable
对象是实现Iterable
接口的对象。
播放器
,类型为ArrayList
我在上面使用的增强的for循环等价于以下内容:
Iterator<Player> iter = players.iterator();
while (iter.hasNext()) {
Player p = iter.next(); // this statement is what your code was missing
p.drawCard(gameDeck.dealNextCard());
}
这是一个关于增强型for循环的Oracle教程的链接:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html
希望这有帮助!
我有一副洗牌牌,我应该把它做成这样,它可以把5张牌分给4个玩家。我像个白痴一样坐在这里好几个小时了,我被卡住了。 我被最后一部分难住了。我将为四名玩家获得五张类似的牌。看起来是这样的: 红心皇后 红心皇后 红心皇后 红心皇后 红心皇后 10的钻石 10的钻石 10的钻石 10的钻石 10的钻石 红心6号 红心6号 红心6号 红心6号 红心6号 黑桃10 黑桃10 黑桃10 黑桃10 黑桃10 如果
我有一副牌洗牌和返回结果,但现在我想根据用户输入更改输出:玩家数量和每个玩家的纸牌数量。 原始代码: CardRun-main 甲板级 卡片类 纸牌输出甲板:54 玩家数量:4(由用户输入) 每个用户的纸牌数量:5(由用户输入) 玩家1:黑桃A,红心2,红小丑 玩家2:红心8,梅花10,红心9 玩家1手牌更好。
我设法改变了一个玩家的皮肤和它的名字。但是现在我有了一个新问题:我和记分牌团队一起为玩家列表和开销名称工作。现在我把假玩家的名字添加到团队中。它头上的名字变成了“§a”名字,但是在标签列表中,有一个假玩家的白色名字。每个玩家都可以看到,这是一个假玩家。
我的程序要求用户输入牌数和玩家数。我只是想打印出每个玩家的卡片。ex.(球员1:黑桃王牌,红桃两枚。球员2:梅花两枚等)我已经把它打印出来了,但它似乎只打印出一套卡片,尽管玩家的数量中输入了2张。这是我的密码。 手类: 我的司机: 我得到的输出: 我想让它打印出两套卡片,而不是一套,但从逻辑上讲,我不知道该怎么做。任何帮助都会很好,谢谢。
所以现在当玩家进入一个位置(pos),比如A5,如果船不在那里,它会用空字符串替换板数组索引。但是如果船在那里,我希望它用hitShip字符串替换它。 开关盒在所有坐标(A1-J10)上继续 ship1的值为“A6” 我有这个代码来打印命中/未命中消息,这取决于玩家是否命中了一艘船,但我不确定如何使用它来用hitShip变量替换棋盘数组的索引。
为什么我的保安(S)和唐纳德(D)处于相同的位置。 地图应该是这样打印出来的 [D----] [- - - - -] [- - - - -] [--S-] [--P--] 但它却像这样出现 [S----] [- - - - -] [- - - - -] [- - - - -] [--P--] 所以正如你在这里看到的,我把安全位置设为[3,2],但出于某种原因,它没有将其识别为[3,2],并将安全位