2

IBM 有(拥有)一个名为 RoboCode 的免费学习 Java 程序,可以在其中编写自定义机器人,然后在 2D 空间中进行战斗。我想写支持这种机器人的环境,但不知道用什么模式或设计。每个机器人都是一个线程。JRE 为每个线程分配了一定的(不确定的)运行时间。机器人世界引擎会首先建立一个玩家/机器人列表,然后进入一个循环,让每个玩家轮流做任何喜欢的事情:向前移动,向左转,向西北角开火,等等。每个机器人还被告知感兴趣的事件:一个或多个敌人在范围内,它被子弹击中等。

处理线程的组合也是事件侦听器(它们也是生产者吗?)让我感到困惑;似乎游戏引擎还有更多内容。即使是一些一般性的想法也会有所帮助。

4

1 回答 1

3

我是 Robocode 引擎开发人员。我在 2 年前加入,大部分时间都在重构 Robocode 引擎。随着我理解的增长,我在这段时间写了几篇文章。不是所有的都是最新的,想。

关于它有几个困难的部分:

1)同步:我们通过在机器人和战斗之间“发送”消息来解决它。更新 UI 和其他组件是生产者/消费者,带有关于每个新状态(游戏滴答)的不可变消息

2)沙箱恶意代码(去学习我们的代码)

3) API 和规则的设计要长期保持不变,因为引擎的发展,旧机器人保持不变,但它们必须像以前一样运行和得分。我们在这里遇到了一些麻烦,例如人们在自己的逻辑中使用 API 中的类。这不是故意的。我们必须使类成为最终类并使用受保护的构造函数。但是现在我们不能改变它以不破坏现有的机器人。

关于Robocode 中的事件的问题。它们都在每个滴答声中出现,我们填充 EventManager(优先级队列),然后机器人一一拉动。每个事件的调用都被分派回机器人的实现。订阅是自动的,实现始终存在于基类中,您可以在机器人类中覆盖它。机器人有单线程。

顺便说一句:下一件大事似乎是扩展 Robocode 以允许自定义/可插入规则。这是设计挑战。我们正在寻找聪明、勤奋的人加入 Robocode 项目来帮助我们。感兴趣的 ?

于 2010-03-09T11:01:51.817 回答