我用Python创建了一个简单的基于控制台的拼字游戏。我尽量从I/O封装游戏模型,这意味着我创建了几个类来描述游戏规则和当前状态。基本上我想到了这些课程:
LetterSet
:描述游戏中的牌(分数、总金额等)Board
:用它的分片和辅助功能来表示电路板Player
:一个虚拟类,将像Human或Bot这样的真实类进行子类化,得到一个方法play()
,它应该返回玩家的移动Game
:嗯。。。在在我的控制台应用程序中使用简单的线性和同步流,一切都很好。在
但事实证明,将这个概念移植到Qt并不容易。我已经创建了所有必要的小部件,比如一个可拖动的板,描述游戏状态的一般视觉元素和简单的按钮,如“通过”、“继续”、“交换”。在
问题是,我不确定如何处理play()
方法,该方法可能使用我创建的Qt接口来生成有效的移动。这对Bot
来说没有问题,它只搜索一个移动而不进行任何交互。在
我目前的想法是创建一个类似于所描述的here的本地事件循环,并等待在Human(Bot)
中定义的play()
方法中单击按钮。这有点难看,所以我想知道有没有更好的方法。在
我希望主逻辑是相同的,例如,Player
类服务于生成移动并返回它的play()
方法。这样就可以创建任何类型的Player
,比如网络播放器或机器人。这种同步方式与基于Qt的signal/slot方式不太适合。希望有人想出个好主意来解决我的问题。在
总结:如何在play()
方法中生成Player
的移动,并像一个简单的move = player.play(game)
调用一样返回它?
编辑:快照,了解我在说什么:
(来源:b52 at reaktor42.de)
Edit2:这是一个相当古老的问题,我在大约两年前成功地完成了这项任务。尽管如此,我认为如果我发布results through github,它可能对其他人有用。在
先谢谢你,奥利
我不明白你为什么觉得这很难看。实际上,任何GUI程序都是这样工作的:初始化一组控件(按钮等),等待用户与控件交互,响应交互,然后重复。在
我建议你给玩家一个按钮来提交他们的移动。{1}事件处理程序通知事件处理程序,^事件处理程序发出一个事件。游戏逻辑检查移动是否合法(您应该将代码放在这里而不是GUI类中),如果移动合法,则将控制权传递给下一个
Player
对象。在我认为您是对的,GUI环境中基于事件的模型与您最初的应用程序设计之间有点脱节。对于控制台应用程序,您可以编写事件循环,但在我所知的任何框架中的GUI应用程序中,框架都有自己的一个。在
我会让玩家对象通过信号把它的移动发送到游戏对象。你需要围绕这个设计来构建你的基本播放器类。它不应该那么难做,因为你已经有了实际的逻辑,你只是重新布线了一点。在
请注意,你的播放器对象实际上只是游戏和实际玩家之间的接口,可能是在用户界面中点击按钮的人,或者是通过网络连接的远程玩家。只有在bot的情况下,player对象才能真正成为player,即使在这种情况下,最好使用单独的策略引擎对象。这样想可能有助于掌握设计。在
你不必那样做。你可以解决它,例如通过你描述的方法,但是我不想在一个有自己的GUI事件循环的应用程序中处理我自己的事件循环。这是在对抗GUI框架,而不是使用它。不仅仅是Qt是这样的,在任何GUI框架中都会出现类似的问题。这是一种思考构建应用程序的不同方式,我建议采用它。在
在Player
play
函数中可以做的是:这是一种方法,但你应该修改它以适合你的游戏模型
相关问题 更多 >
编程相关推荐