# 课程_23 贪吃蛇游戏 还记得在老式的诺基亚手机上玩的贪吃蛇游戏吗? 这款在5*5像素屏幕上的贪吃蛇游戏不但非常容易制作,而且还非常好玩哦! ## 制作目标 --- 在这篇手把手指导的制作说明中,我们将从零开始创建一个贪吃蛇游戏,操作控制按键,控制蛇的运动,设置输赢条件,以及绘制游戏面板。 ## 制作材料 --- - 1 x BBC micro:bit - 1 x USB线 - 1x 耐心 (编程大概需要30 min) **温馨提示: 如果你想要以上所有这些元器件,你可以购买我们的[micro:bit小小发明家套件](https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.9.z3IMPf&id=564707672256&abbucket=5)。** ###为什么选择Python? - 读起来和英文一样 – Python是一种最简单的编程语言,这使它成为了初学者入门的最佳选择。 - 灵活多变 – Python成为行业编程语言是有它的原因的。你可以用它来做很多东西。这也是为什么谷歌和Youtube用这门语言作为它们的后台支持语言。 - 社区活跃 – Python是初学者最受欢迎的编程语言之一。在它的社区有数不清的资源和帮助。这些帮助是非常有价值的。它不仅限于帮助你查看你的代码,它还可以帮助你扫除编程学习之路上的绊脚石。 - 实际编程比基于积木块拖拽式的编程看起来看更酷。我知道这看起来似乎特别深奥,但是看看这些颜色吧! ## 如何用Python开始编程? --- 如果你刚刚学习编程,你可能还没有Python编辑器。别担心! 你可以去到[Micro:bit官方的Python编辑器](http://www.python.microbit.org/)或者是下载离线版的Python编辑器[mu](https://codewith.mu/)来编写代码并发送代码到你的micro:bit上。 你也可以用你自己的文本编辑器(Sublime 3和Atom),但是你必须把代码存储至micro:bit.这样做可能会比较麻烦一些。或者,你可以用一个[micro:bit仿真器](https://create.withcode.uk/)来测试代码。这种方法非常有效。你不需要每次下载.hex文件,它可以使修改错误的代码变得更加简单。 一旦设置成功,用一根USB线将micro:bit连接至你的电脑。USB线连接micro:bit背面的顶部接口。当准备存储代码的时候,micro:bit会亮起黄色的光。如果你用的是仿真器,你就可以忽略这一步了。如果你不是用仿真器的话,请停止阅读,按照上面说的操作即可。 ## 制作蛇的六个简易步骤! --- 通过将代码分为不同的部分,游戏的每个部分都可以单独测试以确保它们能够正常运行。 1.加载代码库 2.初始化变量 3.创建主循环 4.显示蛇和食物 5.移动蛇 6.设置输赢条件 通过不断地检查代码,我们可以确保目前所写的代码都是正确的。 ### 步骤 1 – 加载代码库 因为这个项目比较简单,我们只需要默认的micro:bit代码库。这个叫做randint的函数可以生成我们所需要的随机数。 ### 步骤 2 – 初始化变量 待会儿,我们将用到一些变量。 Micro:bit板子上的一个点可以用一个[x,y]的坐标序列展示,x代表行, y代表列。一列点就是一条蛇(是的,一列坐标序列就组成了蛇哦!),因为它包含了一个以上的点。 它在屏幕左上角的一个单独的像素点开始,以(0,0)为坐标。之后,更多的点将会加入到这个列队中。食物则是一个单独的像素点,随机地分布在某个地方(不在同一行或同一列)。 每个方向都是由一个坐标序列组成,包含在行的方向增加或减少一点,或者是在列的方向增加或减少一点(本质上来说就是一个矢量)。例如,向右是由[1,0]表示,也就是在行的方向前进一步,在列的方向不变。蛇默认是朝右边移动,也就是方向序列中的第一选项。要让蛇朝左转弯,我们只需要进行到序列的下一个方向(朝右 -> 朝上 -> 朝左 -> 朝下 -> 朝右)。要让蛇朝右边转弯,我们需要去到序列的初始方向选项。 ### 步骤 3 – 创建主循环 循环中的代码重复运行无数次,或一直运行直到循环被破坏。记住,这是Python,因此所有后续行都需要缩进。 ### Step 4 – 显示蛇和食物 首先,我们需要清除之前绘制的所有东西以便于我们以一个空白屏幕开始。接下来,我们要绘制食物,用显示屏上的一个亮着的点来表示。之后,我们通过蛇的序列和以中等亮度绘制每个单独的像素点来进行循环。然后,下一次在屏幕上绘制之前,让程序暂停0.8秒。 运行代码 时常检查代码保证所有代码正常运行是非常重要的。在这这个时候,micro:bit板子上应该有2个像素点亮起来了。按住复位键,食物粒子将移动到另一个位置。 ### 步骤 5 – 移动 移动蛇,看看接下来会发生什么。 所有的代码都应该放置在上一段的显示代码的顶部。第一行代码决定了蛇的下一个像素点将移动到哪里。基于当前蛇头的位置,添加方向(就行和列而言),我们可以找到下一个像素点。通过选择modulo 5,我们可以把蛇的运动限制在每个边的附近。 如果下一个点被蛇的身体占据了,会发生什么呢?在这种情况下,程序就会崩溃,游戏结束。记住这次崩溃使while:True循环停止运行。 下一个点现在成了新的蛇头。接下来,我们要检查一个食物是否被蛇吃了。如果是的话,那么应该生成一个新的食物。如果不是的话,要删掉蛇尾,让蛇只是简单地移动,而不是仅仅变长。 运行代码 当你意识到游戏想获胜是不可能的时候,你可能会生气。 ### 步骤 6 – 游戏获胜 这一段代码应该放置在显示代码的顶端和运动代码的下方。常常检查看看蛇是否已经占据了25个像素点,也就是整个屏幕。如果蛇已经占满了屏幕,玩家就获胜了。 ### 制作成功 尽情地享受这个贪吃蛇游戏带来的乐趣吧! ## 常见问题 ---