从头到尾,从无到有,逐步分析每一个环节的实现,旨在让大家真正搞清楚“如何用python做贪吃蛇”。
课程内容:
基本逻辑 游戏逻辑
第一步、初始框架
第二步、绘制格子
第三步、绘制蛇头、移动蛇头
第四步、蛇的身体
第五步、计分、检测
代码实现上的几个难点:
运动方向的控制。键盘上只有上下左右四个键,要转换到 360 度的运动方向,需要用到不少三角函数运算。
蛇身子的处理。这里我用了一个路径列表,记录蛇头经过的位置,身子则根据路径中的对应数据更新位置。
电脑的运动策略。这里我用的方法是,对于在头部范围内的其他蛇身,计算蛇身与蛇头连线的角度,和自身的运动方向进行比较,如果角度相差很小,就意味着会撞上,于是调整当前运动方向。
运行效率。最大的效率瓶颈在于屏幕上的图片绘制。
主要思路
(1)蛇每走一步,就使用BFS计算游戏界面中每个位置(蛇身除外)到达食物的最短路径长;
(2)将蛇的安全定义为蛇是否可以跟着蛇尾运动,即蛇头和蛇尾间是否存在路径;
(3)蛇每次行动前先利用虚拟的蛇进行探路,若虚拟的蛇吃完食物后是安全的,真蛇才行动;
(4)若蛇和食物之间不存在路径或者吃完食物后并不安全,就跟着蛇尾走;
(5)若蛇和食物之间、蛇和蛇尾之间均不存在路径,就随便挑一步可行的来走;
(6)保证目标是食物时蛇走最短路径,目标是蛇尾时蛇走最长路径。