我目前的想法是创建一个像这里描述的本地事件循环,并等待按钮在Human(Bot)中定义的play()方法中单击。这有点难看,所以我想知道是否有更好的方法来做到这一点。
我不明白为什么你觉得这很难看。这就是任何GUI程序的工作原理:初始化一组控件(按钮等),等待用户与控件交互,响应交互,然后重复。
我建议你有一个让玩家提交动作的按钮。他们点击它,一个事件触发,事件处理程序告诉你 Player 已移动的对象,并将其传递给游戏逻辑事件处理程序。游戏逻辑检查移动是否合法(您应该将代码放在此处而不是GUI类中),并将控制传递给下一个 Player 对象如果移动是合法的。
Player
我认为你是对的,在GUI环境中基于事件的模型与原始应用程序设计之间存在一些脱节。使用控制台应用程序,您可以编写事件循环,但在我知道的任何框架中的GUI应用程序中,框架都有自己的框架。
我让Player对象通过信号将其移动到游戏对象。您需要围绕此设计构建基本的Player类。它应该不是那么难做,因为你已经得到了实际的逻辑,你只是重新布线了一下。
请注意,您的Player对象实际上只是游戏与实际玩家之间的接口,可能是某人点击UI中的按钮,或者通过网络连接点击远程玩家。只有在机器人的情况下才能实现玩家对象 是 玩家,即使在这种情况下,您可能最好拥有单独的策略引擎对象。以这种方式思考可能有助于掌握设计。
你不必这样做。你可以解决它,例如通过您描述的方法,但我不想在具有自己的GUI事件循环的应用程序中乱搞我自己的事件循环。这是与GUI框架的斗争,而不是与它一起工作。这不仅仅是Qt,你在任何GUI框架中都会遇到与此类似的问题。考虑构建应用程序是一种不同的方式,我建议接受它。
您可以在播放器中执行的操作 play 功能是:
play
这是一种方法,但您应该修改它以适合您的游戏模型