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玩家最后打出了一些可按等级击败的牌,而其他玩家不能用他们当前的牌击败它,也会发生这种情况。你不应该从列表中删除某个玩家,但你应该有一个声明,检查他们是否手上没有牌,如果是这样的话,然后自动跳过轮次。红色小丑结束游戏了吗?如果没有,那么你可以让球员继续比赛,以达到他们的排名。