鱼C论坛

 找回密码
 立即注册
查看: 6997|回复: 50

[技术交流] python小练习(074):简单游戏AI设计之六(带AI的贪食蛇)

[复制链接]
发表于 2017-2-10 09:04:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
接上一节的python小练习继续优化我们的贪食蛇AI程序。

上一节说到还有一个功能没有实现:当蛇头与食物和蛇尾之间都没有路径的时候,怎么办?还能怎么办,既然都没有路径,那当然只能挑能走的路,走一步看一步了呗。所以我们还需要设计一个函数来实现这个目标。

  1. #当蛇头与食物和蛇尾之间都没有路径时,随便游走
  2. def go_anywhere():
  3.     global body,dire
  4.     head = body[0]
  5.     for i in ddict:
  6.         hx,hy = head[0]+ddict[i][0],head[1]+ddict[i][1]
  7.         if 0<=hx<Height and 0<=hy<Width and [hx,hy] not in body:
  8.             go = [hx,hy]
  9.             break
  10.     dx,dy = go[0]-head[0],go[1]-head[1]
  11.     for i in ddict:
  12.         if (dx,dy) == ddict[i]:
  13.             change_dire(i)
  14.             break   
复制代码


这样就好了么?还不是,还有一种情况也要考虑,即当食物出现在蛇身旁边1的位置的时候,去直接吃食物还是很危险的,因为吃了食物以后,蛇会长长,很有可能就会撞上自己。这时候就需要有个函数能判断是否食物出现在自己身边,如果是,就还是去追蛇尾,如果不是,才去吃食物。

  1. #检查食物是否紧挨蛇身
  2. def near_check():
  3.     global food,body
  4.     near = False
  5.     for i in ddict:
  6.         fx,fy = food[0][0]+ddict[i][0],food[0][1]+ddict[i][1]
  7.         if [fx,fy] in body[1:-1]:
  8.             near = True
  9.     return near
复制代码


这样基本上就完成了本次优化,当然优化后的蛇还做不到,如之前gif图片中的那条蛇那么智能,只是相比之前的AI有了大幅度的提高,而且食物的放置本身也有随机性,陷入死局也是时有发生的。

如果还想继续改进也还是有空间的,比如可以虚拟一条蛇去吃食物,看看吃晚食物是否还安全,如果安全就派真蛇去吃,不然就重新规划路径,这样还能再提升AI一个等级,如果有兴趣,这个优化就留给广大鱼油去做了。

为了加速测试,我还写了一个打印函数,这样每次运行可以把结果输出到文本中,方便查看。当然你也可以关闭time.sleep(),关闭show(),只显示结果,例如:
  1. Welcome to play Greedy Snake!
  2. Your score: 3931
  3. ----------------------
  4. |oooooooooooooo      |
  5. |ooooooo      o      |
  6. |oOooooo     @o      |
  7. |ooooooo      o      |
  8. | oooooo   oooo      |
  9. | oo     ooooo       |
  10. |        o  oo       |
  11. |        o   oo      |
  12. |ooooooooo    o      |
  13. |oooooooooooooo      |
  14. ----------------------
复制代码


附上带注释的完整代码:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
~风介~ + 5 + 5 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-10 20:49:08 | 显示全部楼层
有兴趣的鱼油可以把这个带AI的贪食蛇与我之前发的GUI版本的贪食蛇相结合,那样看起来更美观,相信这个也不难吧,留给大家自行发挥了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 22:18:01 | 显示全部楼层
看下完整代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-19 10:47:17 | 显示全部楼层
??有没有样式看下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-19 13:07:32 | 显示全部楼层
不错,学习了,谢谢~!~!!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 10:29:39 | 显示全部楼层
膜拜大牛!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 18:48:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-27 09:06:18 | 显示全部楼层
楼主太厉害了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 10:55:20 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-14 11:47:23 | 显示全部楼层
2333333333333333333333
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-18 00:51:00 | 显示全部楼层
贪吃蛇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-18 23:33:53 | 显示全部楼层
学习觉悟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 21:39:14 | 显示全部楼层
日常膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 12:13:38 | 显示全部楼层
微观一波
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 13:34:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2017-6-26 09:49:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-11 16:24:16 | 显示全部楼层
顶顶顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-11 18:36:57 | 显示全部楼层
我tm连老奶奶都不扶就扶你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-11 18:41:43 | 显示全部楼层
收徒吗?老铁!会暖床会嘤嘤嘤的大屌萌妹是也
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 00:01:06 | 显示全部楼层
谢谢分享啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表