我正在尝试用MVC模式创建一个回合制的纸牌游戏。我对正确的设计有些怀疑。
我创建了一个由这些类组成的模型:
当用户按下“新游戏”按钮时,我将创建两个Player对象和GameModel(计算机和播放器)。 这是正确的方法吗?(我不需要战略模式)
我创建了一个GameController类,它引用了GameModel类和GameFrame(视图)类。
我需要在计算机正在播放时或某人赢得牌并在桌面上挑选牌时实施某种“暂停”,所以我想我需要创建一个带游戏循环的Runnable类。正确的吗?
这些课程应如何互动? (这是正确的英语吗?xD)
玩家行动示例:
点击卡片按钮 - > actionListener - >调用GameController方法,检查动作是否可行(轮到我了,我可以玩,电脑玩) - >如果可能,GameController更新GameModel - > GameLoop注意到GameModel更改并调用一些升级视图的UI方法(使用一些Thread.sleep(...))。 这可行吗?
但在所有这些中,我应该把AI放在哪里?感谢您的帮助:)
答案 0 :(得分:3)
这不是一个只能用一种方式回答的问题。你想只制作单人游戏还是多人游戏?对于单人游戏,您可能不需要任何线程。我会建议你开始关注事情:
while(gameNotFinished()) { player = determineNextPlayer(); player.makeTurn(); }
这是正确的方法吗?
我不明白为什么“新游戏”按钮和你描述的动作应该是一个问题。也许考虑在这个动作中“重置”所有内容,这样玩家可以随时按下按钮。
计算机正在播放时的“暂停”
你想等到电脑玩家轮到他们的额外时间吗?我会说让他尽可能快地玩。只要游戏只在人类玩家完成转弯时继续进行。
这可行吗?
我会把它改成以下:
点击卡片按钮 - > GameController(是ActionListener) - >检查动作是否可行的方法(轮到我了,我可以玩,电脑玩卡可以放下。控制器在轮到你时联系你!当你可以转弯时禁用卡按钮和makeTurn()将再次启用它 - >如果可能,GameController更新GameModel - > GameModel通知所有Observers(视图),然后更新
我应该把AI放在哪里?
如上面在实现PlayerController接口的HumanPlayerController旁边所解释的那样。