如何处理AI线程与主游戏循环之间的通信?

我正在用 Java (在 Android 框架中) 开发一款回合制策略游戏。按照《Beginning Android Games》中的结构,我有一个渲染线程和一个 UI 线程。 渲染线程重复更新世界状态,然后重绘世界。 当用户与屏幕交互时,GUI 将 Actions 发送到世界(命令模式)。 现在我正在添加 AI 玩家,这是我的计划:

每个 AI 玩家都将拥有一个在单独线程上运行的 AI。

当世界在 AI 回合更新时,它会检查是否有待处理的动作。 如果有,则执行它。 然后它会向 AI 玩家询问它的下一个动作。

AI 玩家会将动作请求发送到 AI 线程,然后返回。

最终,AI 会想出一个动作,并将其发回给世界,世界会在下次更新时看到它。

两个问题:

1) 这种设计看起来合理吗?

2) 如何处理与 AI 线程的来回通信? 如果我让 AI 线程调用 world.queueAction(action),这似乎可行,但如果渲染线程调用 ai.chooseAction(world),这将在渲染线程上运行动作选择,这不是我想要的。


回答:

我会为 AI 准备一个 ExecutorService,并向其中添加你希望它执行的任务。 对于 UI,你可以拥有一个已更改并可能需要重新绘制的事物队列。 我会倾向于为所有 AI 使用单个线程,直到你确定这样做会有所帮助。 大多数 Android 设备只有 1-2 个 CPU。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注