极客游戏——坦克大战AI编写
今天看到一个特别有意思的东西,叫做CODE GAME,你可以通过Javascripe语言来给你的小坦克写AI,然后与其他人的AI坦克对战。
传统的游戏,都是人们来操作游戏元素,而这个游戏不同,你要写一套算法,用这套算法去控制你的坦克,游戏开始之后,你能做的就只是看着两台坦克对战,他们的灵活性,战斗力以至于『智能』都取决于你的算法。
这让我想到了多年前的『磁芯大战』,这是最古老的游戏,也是计算机病毒的前身,两个科学家互相用汇编语言编写能够破坏对方程序的程序,生存到最后即为胜者。今天我们鲜有人再有能力用汇编语言去编写程序了,但是CODEGAME却给了我们一种『创造』的可能。
CODEGAME的世界由一片由16×12的『格』组成,这些格子中有些是畅通无阻的大路,有些是子弹和坦克都无法穿越的石头,还有些是柔软而富有隐蔽性的草坪,坦克如果处在草坪中,就不会对对方发现。坦克可以发射子弹,也可以前进,还可以朝左或朝右转向。事实上,这几乎就是你能有的所有操作了。
这些操作都是由指令来构成的,比如
坦克前进:me.go()
坦克转向:me.turn(n) n=left or right
坦克发射子弹:me.fire()
这是我们能做的所有操作,但是我们还可以通过一些函数来感知自身或周围的情况,比如
己方坦克坐标:me.tank.position
己方坦克朝向:me.tank.direction
敌方坦克坐标:enemy.tank.position
敌方坦克朝向:enemy.tank。position
地图:game.map[x][y] x为横坐标,y为竖坐标,返回的是那一点是『石头』『草坪』还是什么都没有
星星坐标:star.position
我们的目的就是让我们的小坦克吃尽可能多的星星,或者消灭敌方坦克,同时注意不要被地方击中,在以上前提下,还要使算法尽可能高效。
这个上手非常容易,官方的指南中的代码直接贴上去,就得到了一个可以转向可以发射子弹的坦克,但是如果你希望你的坦克更加聪明一些,那就需要自己动手了。
我首先给我的坦克加上了探路系统,这个系统的算法由一系列语句实现,它可以让我的坦克在遇到障碍物之前就及时转向,并且能够在死胡同里面很快的走出来:
紧接着我又编写了攻击系统,这个系统能让我追踪并在合适的时候发射子弹。
这两个系统基本上保证了我的小坦克初具威严了,它可以边走边射什么的。但是作为一台聪明的坦克,它还应该有找星星的算法,因为尽可能多的吃星星也是获胜条件之一,于是我写了找星星算法
找星星是优先级不太高的,当能打敌人的时候是冲敌人去的,但是如果没事,坦克还会去找找星星。到这基本上就差不多了,但是我注意到在对战中我还是经常被别人的坦克击中,于是我又加了闪避系统,使得我的小坦克在发现敌人的子弹的时候能快速逃离,这样又增加了一些胜算。
至此,一个『聪明』的小坦克就诞生了,这个坦克会主动发现敌人,然后转到正确的方向开炮,遇到对方的子弹还会躲闪,同时它会在整个地图寻找星星,虽然我为它写了所有AI,但是我还是赞叹它的灵活和智慧,简单的『左转』『前进』『右转』『射击』结合对状态的感知,居然会让死物变得灵活。这种灵活并非『控制』的灵活,而是不受控制的灵活。你不能操作你的坦克,你只能看着它走来走去。
这真是人工智能的乐趣。
生命和智慧有时候并非我们想象的那么复杂,也许它们更像是一种由简单演变而来的精巧,生物的每个基因都并不复杂,可是却组合成了叹为观止的生命体系。而程序中的简单指令可以在某种程度上还原这种精巧。
我的坦克虽然有六百行代码,可是在很多方面还是做的不够,比如对障碍物的高级判断,预先计算敌方坦克路线来发射子弹等等,这些都是可以完善的。值得一提的是,这并非『程序员』的游戏,它所需要的编程知识非常少,官方的文档可以让所有人在十分钟内入门,而这些也就足够了。这个游戏更需要的是对行为的思考和对算法的考虑。我认为它适合每个极客,每个对人工智能,计算机与生物感兴趣的人。
如果你编写了你的小坦克,欢迎你挑战我,我的用户名是wdkwdkwdk,在对手用户名那里填写我的名字,即可与我的坦克对战~
nice
快来挑战我
吊吊吊!
快来一起玩
………….尼玛。 这是文明6么。。
试试哇
最近研究罗素先生,试这个完全八竿子打不着的节奏啊
罗素是墨迹实验的那个人嘛?
伯特兰·亚瑟·威廉·罗素 百度吧。
好。
太专业。默默路过。
很简单的,基本上没有基础也可以很快入门
问博主一个问题呢,具体怎么调试呢,新手不懂。文档给的print怎么用呢
比如你要查看坦克坐标,就写 print(me,tank.position)
print的详细用法在哪里能够查到呢
这个print是这个网站开发者写的函数,你可以自己写个输出函数,但是我觉得这个print就够用了,print变量和常量都行
这游戏有年头了。
嗯嗯,是的,但是我才开始玩
秒回复呀,据说有很多路线可以降低被攻击到的概率。
看了博客,挺厉害的