如何处理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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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