战舰游戏!
回到2003年(当时我17岁),我参加了一场战舰AI编程比赛。尽管我输掉了那场比赛,但我从中得到了很多乐趣和收获。
现在,我想重新启动这项竞赛,寻找最佳的战舰AI。
获胜者将被授予+450声望!比赛将于2009年11月17日开始举行。不接受任何晚于17日零点提交的条目或编辑。(中央标准时间) 提早提交您的条目,以免错过机会!
为保持客观性,请遵循比赛精神。
游戏规则:
- 游戏在一个10x10的网格上进行。
- 每个竞争者将在他们的网格上放置5艘船(长度为2、3、3、4、5)。
- 没有船只可以重叠,但它们可以相邻。
- 然后,竞争者轮流向对手开火。
- 游戏的变种允许每次发射多枚子弹,每枚子弹针对一艘存活的船只。
- 对手将通知竞争者子弹是否击沉、命中或未命中。
- 当任何一名玩家的所有船只被击沉时,游戏结束。
比赛规则:
- 比赛的目的是寻找最佳的战舰算法。
- 任何被认为违反比赛精神的行为都将成为取消资格的理由。
- 干扰对手是违背比赛精神的行为。
- 多线程可以在以下限制下使用:
- 当轮到你时,不能有多于一个线程正在运行。(尽管,任意数量的线程可能处于"Suspended"状态)。
- 没有线程可以以除"Normal"之外的优先级运行。
- 在以上两个限制下,你将保证在你的回合期间至少有3个专用CPU核心。
- 每个竞争者在线程上分配了1秒钟的CPU时间。
- 时间用完会导致当前游戏失败。
- 任何未处理的异常都会导致当前游戏失败。
- 网络访问和磁盘访问是允许的,但您可能会发现时间限制相当禁止。 然而,已添加了一些设置和拆卸方法以缓解时间压力。
- 代码应作为答案发布在stack overflow上,或者如果太大,则链接到其他位置。
- 条目的最大总大小(未压缩)为1 MB。
- 正式来说,.Net 2.0 / 3.5是唯一的框架要求。
- 您的条目必须实现IBattleshipOpponent接口。
评分:
- 101场比赛中获胜51场的选手将成为比赛的获胜者。
- 所有参赛选手将以循环赛的方式相互比赛。
- 最好的一半选手将进行双败淘汰赛,以确定获胜者。(实际上是大于或等于一半的最小2的幂次方。)
- 我将使用TournamentApi框架进行比赛。
- 比赛结果将在这里发布。
- 如果您提交了多个条目,则只有得分最高的条目有资格参加双败淘汰赛。
祝你好运!玩得开心!
编辑1:
感谢Freed发现了Ship.IsValid
函数中的错误。已经修复,请下载更新版本的框架。
编辑2:
由于对将统计信息持久化到磁盘等方面产生了重大兴趣,我添加了一些非定时的设置和拆卸事件,应该提供所需的功能。这是一个半破坏性更改。也就是说:接口已被修改以添加函数,但不需要为其编写主体。请下载更新版本的框架。
编辑3:
错误修复1:GameWon
和GameLost
仅在超时情况下才会被调用。
错误修复2:如果引擎每场比赛都超时,则比赛永远不会结束。
请下载更新版本的框架。
编辑4:
锦标赛结果: