【发布时间】:2019-12-12 08:48:31
【问题描述】:
上下文
我正在使用 PyQt 创建我自己版本的棋盘游戏Battleship。 PyQt 主窗口包含自己的和敌人的板。棋盘由玩家“开火”的可点击图块组成。该实现支持 HUMANvsAI 和 AIvsAI 游戏。我想通过模拟测试我的人工智能算法的强度。例如,我想循环运行 1000 场 AIvsAI 游戏,并获得 % 胜利、平均准确率等统计数据。
主要问题
我正在努力多次运行 PyQt 应用程序来收集游戏数据,例如在一个 for 循环中。具体来说,我找不到运行应用程序、退出它并重新运行它的方法。从概念上讲,我正在寻找这样的东西:
# conceptual snippet for i in range(n): app = QApplication([]) window = MainWindow(b_size, boat_dict, players) app.exec_()
调用退出应用程序并在每次游戏结束时调用:
# conceptual snippet if is_game_over(): sys.exit(app.exec_())
但是这个简单的解决方案打破了 for 循环。欢迎就如何按顺序(例如 for 循环方法)或并行线程多次运行和退出 PyQt 应用程序提供任何反馈。
【问题讨论】:
-
如果您想查看 AI 与 AI 的结果,为什么还要产生生成 Qt 应用程序的开销呢?为什么不直接隔离 AI 游戏逻辑并观察它呢?我认为生成这样的 GUI 值得投入资源的唯一原因是能够进行人机交互。
-
@JoeHabel 目前逻辑与 PyQt 对象交织在一起。例如,它是类“瓷砖”,它存储自己的游戏数据,关于它是否已经被击中/是否有船/船被击中/船是否沉没等。我同意可以使用列表列表/ numpy 数组作为板子并单独测试 AI,但这是以在没有 PyQt 的情况下重新创建游戏逻辑为代价的。我有兴趣避免这种情况
标签: python loops for-loop pyqt pyqt5