设计蛇AI


9

我是这个gamedev stackechange的新手,但之前使用过数学和CS网站。

因此,我正在为蛇创建AI竞赛,它将在5分钟内与另外四条蛇竞争,规则类似于传统的诺基亚蛇游戏,除了有五条蛇,棋盘为30x30,并且有球场上有许多小障碍。

像诺基亚游戏一样,当您到达水果时,您的蛇会长大;如果撞到自己,另一条蛇或墙壁,您会死去。游戏在移动之间的延迟为30ms的情况下运行,服务器每隔50ms发送新的游戏状态,代码必须分析该状态,然后再分析不输出什么,并输出下一移动。

胜利者是在游戏中任何时刻都最长的蛇。决胜局由杀手决定。

到目前为止,我所做的是对每条蛇执行A *图形搜索,以确定我的蛇是否最接近苹果,如果是,它就适合苹果。否则,我会做出一个巧妙的小算法来确定棋盘上最空的区域,以供我预测蛇的位置,以预测下一个苹果。

除此之外,我还进行了一些小的生存性检查,以确保我的蛇不会走入无法摆脱的陷阱,如果确实被卡住,我还有一些办法可以使它更好地摆脱困境。

...

无论如何,我已经在测试服务器上测试了我的蛇,它做的很好。通常,我的策略是只在苹果确定可靠的情况下才选择苹果,而在苹果没有使其比其他任何蛇长得更快的情况下寻找空间(某些蛇也做类似的事情,但通常只走到中间或角落),有时它会获胜在这些试玩游戏中,但常常被似乎在生存能力方面具有优势的同一条蛇打败(我的蛇生长更快,但随后以某种方式死亡,而另一条蛇则缓慢前进,并赢得了稳定性。

所以我想知道任何人必须尝试改善我的蛇的想法。也许是采用新方法的想法。我的函数和类很好,因此看起来似乎很剧烈的更改应该不会太糟糕。我鼓励所有想法。

有什么想法吗?

Answers:


5

一个好的防御策略可以是做一个完美的身材(因此,您的头部和后侧始终彼此相距1个空间,并且您可以制作一个完整的正方形或以给定的长度形成任何可能的形状),这会使您几乎永无止境,因为没有蛇会进入您的封闭区域,您也永远不会遇到自己(除非以某种方式在您的嘴中生成了一个苹果,但我想如果没有空间,那是不可能的)。

这样一来,如果苹果实际上出现在您的封闭区域中,您可以编程为不去做,而其他蛇很可能会死于试图得到它,然后经过一段时间后,您就可以以这种方式获得它了尽可能地恢复到您的形状(可能有点棘手,但似乎可行)

苹果什么时候去买,仅取决于它们相距多远,也许如果您离苹果最近,您可以选择它,但是要保持保守,很难说,可能需要根据反复试验对它进行调整。 ,但我认为这将是一个不错的策略。


1
因此,基本上,他的“蛇”应该是“乌龟”。xD +1好主意。
Cypher 2012年

好一个 但是董事会存在障碍。因此,其他蛇编程人员必须制作蛇来检查是否有障碍物(墙壁是围住苹果还是其他蛇围住了苹果)。他们可能不会来就死。可以避免该问题的一件事是在头部和尾部之间留出一定的间距。
Shashwat 2012年

嗯,一个有趣的主意,我想我可以实现这样的功能,当我的蛇正徘徊在等待下一个苹果产卵时..哈哈,我有点担心苹果在我的嘴中产卵,这会导致死亡,而这些游戏通常是由不合时宜的死亡决定的
Rawb 2012年

@Ronald实际上,如果您发现苹果在嘴里产卵,您可以向内和向外转回并继续,因为AI具有完美的反射效果,因此实际上应该很容易根据实现方式进行补救(甚至可以自行修复)。
凯文·迪特里亚

0

蛇应根据其当前长度调整其策略。

一条非常长的蛇可以用它的身体在对手中围栏。这意味着它应该用墙壁密封。

如果蛇向东移动,而苹果向东北移动,则应在向北旋转之前一直走到墙壁,因此严重限制了其他蛇的行进路线。

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

这头C头的蛇应该在e9处向北,而不是在e8处向北,这样它下面的任何对手都将被困住,无法吃掉任何在'e'线以上产卵的苹果。

您可以切除的面积越大,握持的时间越长越好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.