将自主游戏模型与基于Qt的UI连接起来

6 python qt asynchronous signals

我使用Python创建了一个简单的基于控制台的Scrabble游戏.我试图尽可能地从I/O封装游戏模型,这意味着我创建了一些类来描述游戏的规则和当前状态.基本上我想出了这些课程:

  • LetterSet:描述游戏中的图块(分数,总金额等)
  • Board:董事会的代表及其瓷砖和辅助功能
  • Player:一个虚拟类,用于子类真实类,如Human或Bot,有一个方法play()可以让玩家移动
  • Game: 好 ...

使用我的控制台应用程序使用简单的线性和同步流程,一切正常.

但事实证明,将这个概念移植到Qt并不容易.我已经创建了所有必要的小部件,如可拖动的板,描述游戏状态的一般视觉元素和简单的按钮,如"通过","继续","交换".

问题是,我不知道如何处理play()可能使用我创建的Qt接口生成有效移动的方法.Bot虽然这没有问题,只是在没有任何互动的情况下搜索一个动作.

我目前的想法是创建一个像这里描述的本地事件循环,并等待按钮在我play()定义的方法中单击Human(Bot).这有点难看,所以我想知道是否有更好的方法来做到这一点.

我希望主要逻辑是相同的,例如,Player类提供一个play()生成移动并返回它的方法.这样就可以创建任何类型的Player网络播放器或机器人.这种同步方式对于基于Qt的信号/槽操作方式不起作用.希望有人有一个巧妙的想法来解决我的问题.

总结: 如何Player在其play()方法中生成移动并将其返回为简单move = player.play(game)调用?

编辑:快照,以了解我在说什么: 快照http://reaktor42.de/~b52/shots/2011-06-26-235749_972x729_scrot.png

编辑2:这是相当陈旧的,我大约两年前成功完成了作业.然而,如果我通过github发布结果,我认为它可能对其他人有用.

在此先感谢,奥利

Pat*_*ola 2

您可以在 Playerplay功能中执行以下操作:

  1. 启用按钮并将它们连接到插槽(每个操作一个)
  2. 等待玩家移动生效(或任何其他原因退出)
  3. 当收到(或验证)玩家移动时,断开与插槽的信号连接

这是一种方法,但您应该修改它以适合您的游戏模型