Java 处理纸牌游戏的特定规则

Java 处理纸牌游戏的特定规则,java,logic,Java,Logic,我正在做一个纸牌游戏,我面临一个关于游戏性的问题。所以游戏的基本规则是,谁先完成一手牌,谁就被排在第一位,第二位,依此类推。我在一张list=1张牌中保留一张玩家列表),直到剩下一名玩家。现在,规则是,如果一个人以一张无敌的牌/移动结束,或者其他人传球,那么轮到下一个球员,他可以自由移动。我一直在挣扎,还没有找到一个合适的解决办法。如何做到这一点 我目前正在将浪费的(上次玩过的牌列表)牌保存到列表中,并为上次玩过的玩家保留一个玩家实例lastPlayed,为当前玩家保留一个玩家实例hasstur

我正在做一个纸牌游戏,我面临一个关于游戏性的问题。所以游戏的基本规则是,谁先完成一手牌,谁就被排在第一位,第二位,依此类推。我在一张
list=1张牌中保留一张玩家列表),直到剩下一名玩家。现在,规则是,如果一个人以一张无敌的牌/移动结束,或者其他人传球,那么轮到下一个球员,他可以自由移动。我一直在挣扎,还没有找到一个合适的解决办法。如何做到这一点

我目前正在将浪费的(上次玩过的牌列表)牌保存到
列表中,并为上次玩过的玩家保留一个
玩家
实例lastPlayed,为当前玩家保留一个
玩家
实例hassturn。 在
游戏
类中,此方法中的回合发生移动:

public void determineNextPlayerTurn()
{
    if(playersLeft() > 1)
    {
        int i = players.indexOf(hasTurn) + 1;

        if(i == 4)
            i = 0;

        hasTurn = players.get(i);

        if(hasTurn.isPlaying())
        {
            if(!isHumanTurn())
            {
                display.disableButtons();
                AI temp = (AI)players.get(i);
                temp.onPlayerTurn(this);
            }
            else
                display.enableButtons();
        }
        else
        {
            determineNextPlayerTurn();
        }
    }
    else
        newGame(0);
当轮到AI时调用的AI方法:

public void onPlayerTurn(Game game)
{
    selectCardsToPlay(game.getWaste(), game.getLastPlayedPlayer());
    if(getSelectedCards().isEmpty())
    {
        game.determineNextPlayerTurn();
    }
    else
    {
        if(Moves.canBePlayed(getSelectedCards(), game.getWaste(), this, game.getLastPlayedPlayer()))
        {
            playMove(game);
            game.determineNextPlayerTurn();
        }
        else
            game.determineNextPlayerTurn();
    }
}
而对于用户而言,在播放按钮(播放、传递)的
ActionListener
内,不会调用任何内容作为
determineNextPlayerTurn()


注意:目前这样,如果场景发生在人类最后一次玩的时候,会出现堆栈溢出,因为每个ai都在做一次传球。现在其他代码都还可以,但我需要帮助实现针对该特定情况的简单解决方案,如果我做错了什么,我会打开它。

为什么不为执行的“传球”数量设置一个计数器,然后将其与玩家数量进行比较。如果传球次数等于球员人数-1,则意味着后面的球员可以自由移动。还有什么是“无可匹敌的移动”如果有这样的事情,那么你不能将回合分类为那样,然后附加一个布尔值来检查玩家是否进行了这些类型的移动吗

为什么玩家的确切数量是-1?如果hasTurn没有牌在手,我应该从玩家列表中删除一个玩家,还是跳过下一个回合?不存在无敌招式,但它是无敌的,这取决于当前的牌数。例如,排名最高的单张牌是红色小丑牌。如果一个人最后一张牌是红色小丑,没有人能打败他。但是,如果x玩家最后打出了一些可按等级击败的牌,而其他玩家不能用他们当前的牌击败它,也会发生这种情况。你不应该从列表中删除某个玩家,但你应该有一个声明,检查他们是否手上没有牌,如果是这样的话,然后自动跳过轮次。红色小丑结束游戏了吗?如果没有,那么你可以让球员继续比赛,以达到他们的排名。