10分钟教你用Python打造一个AI贪吃蛇

愉快的开始

最近在修一门叫Python基础的课,然后匆忙之中做了这个AI贪吃蛇想交个大作业,结果老师的结课作业是给定了题目,我真是……

首先说明一点哈,此AI非彼AI。今天要讲的AI贪吃蛇还是传统意义上遍历图的找路算法编写的,并不是利用机器学习进行学习控制的哈。

关于贪吃蛇

Python编写贪吃蛇的教程此前已经写过了,相关的传送门可以戳:

传送门: 10分钟教你用python打造贪吃蛇超详细教程

那么今天的AI贪吃蛇就是在此基础上完成的,加了AI相关的功能。具体的相关演示图如下:

AI贪吃蛇动态演示图

当然了,AI部分是在一位大神@Charles的代码中整合过来的。总体还是采用广度优先搜索遍历+虚拟走一次(不知道这样算不算作弊呢,欢迎各位在留言区讨论)的方式进行,目前看来还是有些许问题:

  • 可能吃不到满屏,最后的效果可能会空几个(下面会放图),依小编之见应该是找不到路到食物时随机走一步造成的,随机性导致了最后可能陷入死循环而吃不到满屏。
  • 运行速度比较慢,一来可能是小编这个地图比较大,每次找路BFS搜索的时候是需要一点时间的,二来嘛Python确实是个速度比较慢的语言,算法速度上自然是比不上C++这种的。

关于C++的AI贪吃蛇,可以参照此前小编用C++写的一个不怎么完善的AI贪吃蛇,也算基于BFS,但是整个跑起来的速度快得多:

传送门: 10分钟教你用C++写一个贪吃蛇附带AI功能(史上最详细最入门的贪吃蛇教程)附源代码下载

然后再放上一张吃不满屏的图吧,┭┮﹏┭┮我跑了一个早上。结果你让我看这个?

吃不满屏的AI贪吃蛇

哈哈,看不到头尾了,反正代码会放出来,有需要的小伙伴可以给他加个头,这样看起来辨识度更高。

AI部分

好了,现在介绍完了。我们来介绍一下AI部分的原理+算法吧。

地图

我们之前说了,算法是用BFS找路的。那么相应的地图就是整个的游戏区域了。其实整个游戏区域可以分成一个个的像素格子,每个格子就可以看成一张地图中的点(有xy坐标),只不过这些点只与相邻的点连通,这样就形成了一个图。

有了图以后,蛇身所在的位置就是障碍了,不能通过的。然后蛇的移动不能超出图所在的范围。一个点无法就这几种状态:

  • 食物所在的位置(状态码为FOOD)
  • 空位置(状态码为FREE_PLACE)
  • 蛇所在的位置(状态码为SNAKE_PLACE)

我们用width表示地图的宽度,height表示地图的高度。在程序中,该状态用一个一维数组board[width * height]进行标识:比如点(x,y)的状态就可以用board[x + width*y]的具体取值表示(FOOD表示食物等)。

找路

找路的算法流程这里直接引用@Charles大神博客上写的流程:

主要思路
(1)蛇每走一步,就使用BFS计算游戏界面中每个位置(蛇身除外)到达食物的最短路径长;
(2)将蛇的安全定义为蛇是否可以跟着蛇尾运动,即蛇头和蛇尾间是否存在路径;
(3)蛇每次行动前先利用虚拟的蛇进行探路,若虚拟的蛇吃完食物后是安全的,真蛇才行动;
(4)若蛇和食物之间不存在路径或者吃完食物后并不安全,就跟着蛇尾走;
(5)若蛇和食物之间、蛇和蛇尾之间均不存在路径,就随便挑一步可行的来走;
(6)保证目标是食物时蛇走最短路径,目标是蛇尾时蛇走最长路径。
不足之处
由于食物是随机出现的,若虚拟的蛇跑一遍发现去吃食物是不安全的,真蛇就不会去吃食物,而是选择追着蛇尾跑,若一直如此,就陷入了死循环,蛇一直追着蛇尾跑跑跑。。。直到你终止游戏为止。。。

代码下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容