0

我已经做了很长一段时间了,我似乎无法解决游戏的动态问题。

所以,基本上,这款游戏是我的国家非常流行的纸牌游戏,名为 Truco。我将尝试用以下要点来解释它,但无论如何,我解释后的粗体段落对于游戏的结构来说非常简单明了,所以,请随意跳过。

  • 每个玩家轮流轮流,例如在每个回合中,玩家 1 可以打出一张牌并执行一个动作。
  • 动作 A 有点像扑克出价,它提高了获胜者通过赢得比赛获得的积分数量,玩家 2 必须决定他们是否弃牌/输掉游戏,接受挑战还是反击,并提高赌注。
  • 还有另一种类型的动作,我们称之为动作 B,如果玩家 1 调用它而玩家 2 拒绝接受它,与动作 A 不同,游戏还没有结束,玩家 2 只是在游戏结束时失去一些分数。也可以反驳这一点。
  • 在一个回合中,玩家最多可以调用两个动作,但他永远不能调用已经在游戏中调用过的动作。
  • 每回合结束时玩家打出一张牌。

对于不了解游戏的人来说,所有这些信息一定是非常令人困惑的信息。因此,总而言之,总共有 6 个回合,每个回合由玩家打出他的牌结束,并且在每个回合本身中,两个玩家之间都会交换一些信息,其中包括轮到的玩家可以挑战的挑战打电话,对方必须接受或拒绝。除此之外,当比赛结束时,比赛本身并没有结束,比赛一直进行到两人中的一个达到 30 分,通过赢得比赛和挑战。

我开始尝试使用 while 循环来设置它,但由于循环从不暂停并等待 onClickListeners,因此很容易失败。然后,我发布了这个问题:如何在 Android 中处理玩家回合?

我开始对状态设计模式进行一些研究,并且在过去的几天里一直在研究它。我有一个游戏本身的课程:GameTruco。一个TrucoState类和该 TrucoState 的 10 种不同实现. 在 GameTruco 中,我有所有这些不同状态的实例以及我需要跟踪的所有不同变量,对于玩家可以执行的两个动作,轮到谁,轮到哪轮。所以,我的 GameTruco 中的所有选项(无论是不同的状态和调用这些状态的不同方法)都只考虑在可以调用的不同挑战之后的游戏状态,但不要考虑打牌本身......我不知道如何处理这个。而且,当我完成设计时,我不太明白如何将它与我的 Button 的 onClickListeners 混合。

如果有人能建议我如何解决这个问题,我将不胜感激,无论是通过建议改变我的状态模式还是解决纸牌游戏动态的其他方式。

4

1 回答 1

1

状态模式可能是解决这个问题的好方法。

我的 GameTruco 只考虑可以调用的不同挑战后的游戏状态,但不考虑打牌本身

如果该州只考虑轮到谁以及当前的赌注是什么等,则可以将牌视为与该州分开。您将需要有其他逻辑来跟踪卡片以及如何确定谁赢了(这可能还会更新状态)

另外,当我完成设计时,我不太明白如何将它与我的 Button 的 onClickListeners 混合。

您的点击侦听器代码应该是更改状态的地方。

例子:

//listener code implementation
//user has decided to raise...

int raiseAmount = ... // perhaps passed in thru listener or from UI objects
State currentState;  //current state before raise

currentState = currentState.player1Raises(raiseAmount);
//now state is for player 2 to decide what to do

//update UI to let player 2 decide what to do given current State
于 2013-09-21T20:58:11.023 回答