我可以用州设计模式解决这个纸牌游戏应用程序吗?

时间:2013-09-21 19:50:51

标签: java android design-patterns state

我已经有一段时间了,我似乎无法解决游戏的动态。

所以,基本上,这款游戏在我的国家名为Truco是一款非常受欢迎的纸牌游戏。我将尝试使用以下要点解释它,但无论如何,在我的解释之后的Bold段落对于游戏的结构是非常简单和简单的,所以,请随意跳过它。

  • 每位玩家轮流轮流,每回合玩家1 例子可以打牌并发挥作用。
  • 动作A有点像扑克竞标,它提高了分数 获胜者将通过赢得比赛获得,而玩家2必须决定是否 他们弃牌,输掉比赛,接受挑战或者反击,并提高赌注。
  • 还有另一种类型的动作,我们称之为动作B,如果 玩家1调用它而玩家2拒绝接受它,与动作A不同,游戏不是 结束时,玩家2在游戏结束时只丢失了一些积分。人们也可以反驳这一点。
  • 在一个回合中,玩家最多可以召唤两个动作,但他永远不能 调用已在游戏中调用的动作。
  • 每回合结束时,玩家都会播放他的卡片。

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

我开始尝试使用while循环进行设置,但由于循环从不暂停并等待onClickListeners,因此很容易失败。 然后,我发布了这个问题:How can I handle player turns in Android?

我开始对国家设计模式进行一些研究,并且在过去的几天里一直在努力。我有一个游戏本身的课程: GameTruco TrucoState 类和该TrucoState 的10种不同实现。在GameTruco里面,我有所有这些不同状态的实例,以及我需要跟踪的所有不同变量,玩家可以执行的两个动作,它们的转动是什么以及它是什么回合。因此,我在GameTruco中的所有选项(不同的国家和不同的方法称为这些国家)只考虑可以被调用的不同挑战后的游戏状态,但不要考虑自己玩牌....我不知道如何处理这个问题。而且,当我完成设计时,我不太清楚如何将它与我的Button的onClickListeners混合起来。

如果有人能告诉我如何通过推荐改变我的状态模式或其他方式来解决纸牌游戏的动态,我会非常感激。

1 个答案:

答案 0 :(得分: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