python小练习(074):简单游戏AI设计之六(带AI的贪食蛇)
接上一节的python小练习继续优化我们的贪食蛇AI程序。上一节说到还有一个功能没有实现:当蛇头与食物和蛇尾之间都没有路径的时候,怎么办?还能怎么办,既然都没有路径,那当然只能挑能走的路,走一步看一步了呗。所以我们还需要设计一个函数来实现这个目标。
#当蛇头与食物和蛇尾之间都没有路径时,随便游走
def go_anywhere():
global body,dire
head = body
for i in ddict:
hx,hy = head+ddict,head+ddict
if 0<=hx<Height and 0<=hy<Width and not in body:
go =
break
dx,dy = go-head,go-head
for i in ddict:
if (dx,dy) == ddict:
change_dire(i)
break
这样就好了么?还不是,还有一种情况也要考虑,即当食物出现在蛇身旁边1的位置的时候,去直接吃食物还是很危险的,因为吃了食物以后,蛇会长长,很有可能就会撞上自己。这时候就需要有个函数能判断是否食物出现在自己身边,如果是,就还是去追蛇尾,如果不是,才去吃食物。
#检查食物是否紧挨蛇身
def near_check():
global food,body
near = False
for i in ddict:
fx,fy = food+ddict,food+ddict
if in body:
near = True
return near
这样基本上就完成了本次优化,当然优化后的蛇还做不到,如之前gif图片中的那条蛇那么智能,只是相比之前的AI有了大幅度的提高,而且食物的放置本身也有随机性,陷入死局也是时有发生的。
如果还想继续改进也还是有空间的,比如可以虚拟一条蛇去吃食物,看看吃晚食物是否还安全,如果安全就派真蛇去吃,不然就重新规划路径,这样还能再提升AI一个等级,如果有兴趣,这个优化就留给广大鱼油去做了。{:5_109:}
为了加速测试,我还写了一个打印函数,这样每次运行可以把结果输出到文本中,方便查看。当然你也可以关闭time.sleep(),关闭show(),只显示结果,例如:
Welcome to play Greedy Snake!
Your score: 3931
----------------------
|oooooooooooooo |
|ooooooo o |
|oOooooo @o |
|ooooooo o |
| oooooo oooo |
| oo ooooo |
| ooo |
| o oo |
|ooooooooo o |
|oooooooooooooo |
----------------------
附上带注释的完整代码:
**** Hidden Message ***** 有兴趣的鱼油可以把这个带AI的贪食蛇与我之前发的GUI版本的贪食蛇相结合,那样看起来更美观,相信这个也不难吧,留给大家自行发挥了{:5_109:} 看下完整代码 ??有没有样式看下? 不错,学习了,谢谢~!~!!~ 膜拜大牛!{:10_256:} {:5_106:} 楼主太厉害了! 感谢分享 2333333333333333333333 贪吃蛇 学习觉悟 日常膜拜 微观一波 {:10_249:}{:10_249:}{:10_249:}{:10_249:}{:10_249:}{:10_249:}{:10_249:} 顶顶顶 我tm连老奶奶都不扶就扶你 收徒吗?老铁!会暖床会嘤嘤嘤的大屌萌妹是也 谢谢分享啦