当前位置: 首页 > 知识库问答 >
问题:

将一张牌交易给玩家数组列表

贺恩
2023-03-14

我正在尝试使用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(); 
}

共有1个答案

咸星波
2023-03-14

在使用迭代器的部分中,使用以下内容:

// 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张。这是我的密码。 手类: 我的司机: 我得到的输出: 我想让它打印出两套卡片,而不是一套,但从逻辑上讲,我不知道该怎么做。任何帮助都会很好,谢谢。

  • 为什么我的保安(S)和唐纳德(D)处于相同的位置。 地图应该是这样打印出来的 [D----] [- - - - -] [- - - - -] [--S-] [--P--] 但它却像这样出现 [S----] [- - - - -] [- - - - -] [- - - - -] [--P--] 所以正如你在这里看到的,我把安全位置设为[3,2],但出于某种原因,它没有将其识别为[3,2],并将安全位

  • 所以现在当玩家进入一个位置(pos),比如A5,如果船不在那里,它会用空字符串替换板数组索引。但是如果船在那里,我希望它用hitShip字符串替换它。 开关盒在所有坐标(A1-J10)上继续 ship1的值为“A6” 我有这个代码来打印命中/未命中消息,这取决于玩家是否命中了一艘船,但我不确定如何使用它来用hitShip变量替换棋盘数组的索引。