用python制造一条令人涨姿势的贪吃蛇

之前看了一副大涨姿势的贪吃蛇的图,甚为震精,可以再观赏一下:


既然talk is cheap,show me the code ,我就按照http://hawstein.com/posts/snake-ai.html的教程写了一个,当然并没有能像上图那么令人涨姿势,但是让贪吃蛇自动跑很长时间还是做到了的


首先是照教程所说,网上下了一个可以根据方向键来控制贪吃蛇的一个代码版本,直接在上面进行改造,所以下面的代码有些地方可能有点无厘头=,=

第一步,当然是让贪吃蛇自己跑起来,这个很简单,但由于当时没仔细看教程,想想又要保存蛇和,实物之间的路径,就直接试了试dfs,代码很简单,代码很简单,但是会写代码的人就知道这不是最短路径啊!!!每次都要绕好长一圈才能到食物,这有什么意思?然后就思考了下bfs(),bfs()确实应该是最短路径了,但是用bfs怎么表示路径了,想了一会想到可以建个数组来表示点的父节点,于是bfs版本又写好了=,=能跑一段时间了,到后来才发现教程里就直接写着bfs路径的解决方法!!可惜当时没看到,自己想一遍理解也深刻点吧。。。。。。。


到目前的止,蛇能自己运行一段时间,但是万一蛇身的长度超过x轴或者y轴,蛇的智商就比较捉急了,这时候由于找不到路径蛇就会一直停留在原地。

按照教程所说的,应该定义一个安全模式:在吃掉食物后,蛇头到蛇尾之间还有路径(就算蛇头到食物之间没有路径,舌头可以跟着蛇尾跑,跑动过程中可能出现到食物的路径)因为移动过程中蛇尾会一直释放出新的空间,所以每次找到到食物的路径后,应该派出一条虚拟蛇去吃食物,吃完后应该判断是是否安全,安全了派真蛇吃,不安全就跟着蛇尾跑(这里教程说跟蛇尾跑要用最长路径,本人比较无知,用了dfs来替代),但其实在实验过程中,这种思路也会有bug(现在还没解决= =):就是虽然这一步你判断为安全,你朝食物进了一步,单手一步之后你发现安全了,只能跟着蛇尾跑,这样会出现蛇一直在一个循环里跑的现象。。。。。。

实现了上面的思路,下面是我自己的贪吃蛇的截图:

@代表蛇头,#代表蛇身,-代表蛇尾,+代表食物


talk is cheap,show me the code:具体代码请参考 https://github.com/wangyuquan/snake,因为csdn的代码处理唔实在不想吐槽更多。。。。。注意windows下要安装curse才能运行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值