FEATURED · 精选文章

基于Micro:bit与Snap Circuits的实体贪吃蛇游戏机设计与实现

发布时间 / 2026/8/19 22:35:17
来源 / 创域科博编辑部
栏目 / 资讯中心
基于Micro:bit与Snap Circuits的实体贪吃蛇游戏机设计与实现 1. 项目概述当经典贪吃蛇遇上实体编程还记得小时候在诺基亚手机上玩得停不下来的贪吃蛇吗那个由像素点组成的简单游戏承载了一代人的记忆。今天我们要做的不是复刻一个手机应用而是把它从虚拟世界“拽”出来变成一个看得见、摸得着、能亲手搭建的实体游戏机——Snap:bit。这个项目巧妙地将英国广播公司BBC出品的Micro:bit微型电脑、美国Elenco公司的Snap Circuits电子积木以及经典的贪吃蛇游戏逻辑结合在一起。它不仅仅是一个游戏更是一个绝佳的STEM科学、技术、工程、数学教育项目让你在动手玩乐中理解编程逻辑、电路原理和物理交互的奥秘。Snap:bit的核心思路是利用Micro:bit作为“大脑”负责运行贪吃蛇游戏逻辑、处理输入和控制输出而Snap Circuits则作为“躯干”和“感官”提供电源、搭建控制按钮方向键和驱动显示设备如LED阵列或蜂鸣器。你不需要焊接也不需要复杂的电路知识只需要像拼乐高一样将带有卡扣的电子模块“咔哒”一声连接起来就能构建出完整的硬件系统。最终你将获得一个完全由你自己组装、编程的掌上游戏机蛇的移动、食物的生成、碰撞检测所有逻辑都在你写的代码里所有交互都通过你搭建的实体按钮完成。这非常适合对编程和电子感兴趣的初学者、教育工作者或者任何想给孩子一个既酷又有教育意义的周末项目的家长。2. 项目整体设计与核心思路拆解2.1 为什么选择Micro:bit Snap Circuits这个组合在开始动手之前我们先来聊聊为什么这个组合如此经典且高效。市面上有Arduino、树莓派Pico等多种开源硬件Snap Circuits也有许多竞争对手。但Micro:bit和Snap Circuits的结合在教育和快速原型领域几乎是无敌的。首先看Micro:bit。它是一块信用卡大小的单片机开发板专为教育设计。其最大优势是极低的上手门槛和丰富的内置资源。板载了5x5的LED点阵屏可以直接用来显示简单的贪吃蛇图形、两个可编程按钮A和B、加速度计、磁力计、蓝牙等。更重要的是它支持多种图形化编程环境如MakeCode和Python你可以用拖拽积木的方式编写代码这对于初学者来说直观且无挫败感。对于我们的贪吃蛇游戏5x5的LED点阵虽然小但正好能模拟早期像素游戏的复古感且完全够用。再看Snap Circuits。它解决了电子入门中最令人头疼的问题连接。传统的面包板需要插线对小朋友或不常动手的人来说容易接触不良焊接则门槛更高且有安全风险。Snap Circuits的模块都封装在塑料壳内通过标准的卡扣接口连接只要颜色和接口对应几乎不可能接错。它提供了稳定的电源模块电池盒、导线、按钮开关、蜂鸣器、电机等常用元件。在这个项目中我们将主要用它来搭建一个外置的“方向控制板”因为Micro:bit自带的两个按钮A/B并不适合作为上下左右四个独立方向的控制。所以这个组合的核心设计思路就是“软件逻辑归Micro:bit硬件交互归Snap Circuits”。Micro:bit专注于它擅长的计算与核心I/O控制而Snap Circuits则提供可靠、安全的扩展硬件接口。这种分工让项目结构清晰调试方便。2.2 贪吃蛇游戏逻辑的实体化映射将虚拟游戏逻辑映射到实体硬件需要想清楚几个关键点显示如何“画”出蛇和食物我们使用Micro:bit自带的5x5 LED点阵。每个LED可以看作一个像素点。蛇身由一串连续亮起的LED表示食物则由一个单独亮起的LED表示。虽然显示区域有限但这也增加了游戏的策略性和挑战性。输入如何控制蛇的移动方向我们将使用Snap Circuits的四个瞬时按钮开关分别对应上、下、左、右。它们将连接到Micro:bit的四个GPIO通用输入输出引脚上。当按下按钮时对应的引脚会从高电平变为低电平或反之取决于电路设计Micro:bit的程序检测到这个变化从而改变蛇头的移动方向。逻辑与状态蛇的表示在程序中蛇可以用一个数组或列表来存储其身体每一节所在的坐标x, y。移动每一帧或每个时间间隔蛇头根据当前方向向新坐标移动一格蛇尾的坐标被移除实现向前移动的效果。如果吃到食物则不移除蛇尾从而实现增长。食物生成随机在一个未被蛇身占据的空白LED位置上生成食物。碰撞检测检测蛇头是否撞到了游戏区域边界对于5x5网格就是x或y坐标小于0或大于4或者是否撞到了自己的身体即蛇头的新坐标是否已存在于蛇身坐标列表中。游戏状态需要管理游戏是否开始、进行中、结束撞墙或自撞等状态。注意在5x5的极小空间里设计游戏需要特别注意蛇的初始长度不宜过长通常为2-3节否则游戏会很快结束。同时随机生成食物的算法要确保不会生成在蛇身上这在空间快满时需要高效处理。3. 硬件搭建与电路连接详解3.1 所需材料清单在开始拼搭前请准备好以下材料。大部分来自Snap Circuits套件和Micro:bit基础包。核心控制单元Micro:bit V2 开发板 x1 推荐V2其内置扬声器和麦克风可扩展音效但V1也完全可用Snap Circuits 模块以SC-100/300等常见套件为例电池盒B1 使用3节AA电池x1滑动开关S1x1 – 用作总电源开关。按压开关即按钮 S2x4 – 作为上、下、左、右方向键。导线条3-snap, 5-snap若干 – 用于连接各模块。Micro:bit适配板这是关键 你需要一个能将Snap Circuits接口连接到Micro:bit引脚的特殊模块。例如Snap Circuits的“U8 Micro:bit Adapter”模块或者第三方兼容的适配板。它一面是Snap卡扣另一面是排针可以插到Micro:bit的边缘连接器上。其他AA电池 x3USB数据线用于给Micro:bit编程和供电调试3.2 电路原理图与连接步骤我们的目标是构建一个独立的控制系统不依赖电脑供电和输入。电路的核心是为Micro:bit提供电源并将四个按钮的信号输入到Micro:bit的GPIO引脚。电路连接思路电源部分Snap Circuits电池盒B1 4.5V正极 → 滑动开关S1→ Micro:bit适配板的“VCC”或“3V3”引脚。负极直接连接到适配板的“GND”引脚。这样当滑动开关打开时Micro:bit就由电池供电。按钮输入部分四个按钮采用相同的接法构成“上拉电阻”模式。这是数字输入最常用的防抖动、稳定检测的方式。具体接法如下按钮的一个脚通过导线连接到Micro:bit适配板的某个GPIO引脚例如P0、P1、P2、P3。按钮的同一个脚还需要通过一根导线连接到电源正极3V3。在Snap Circuits中你可以用一个“T型”三通导线条3-snap connector来实现这一点。按钮的另一个脚直接连接到电源地GND。这样当按钮未按下时GPIO引脚通过导线连接到3V3我们程序里读到的是高电平数字1。当按钮按下时引脚被短接到GND程序读到低电平数字0。Micro:bit内部有上拉电阻但为了在Snap Circuits中电路更清晰稳定我们外接这个上拉线路是很好的实践。具体接线表示例假设使用P0-P3按钮功能连接的Micro:bit引脚Snap Circuits 连接说明上 (Up)P0按钮一脚接P0和3V3上拉另一脚接GND。下 (Down)P1同上。左 (Left)P2同上。右 (Right)P3同上。电源正极3V3来自电池盒经过开关。电源负极GND直接来自电池盒。搭建步骤将Micro:bit插入适配板确保方向正确Micro:bit的LED屏朝上金色触点与适配板排针对齐。将电池盒、滑动开关、适配板按电源路径在底板上摆放好并用导线条连接好电源正负极线路。将四个按钮开关在底板上排成“十字”方向键布局。按照上表用导线条仔细连接每一个按钮到对应的Micro:bit引脚和电源/地。使用三通导线条来实现引脚的上拉连接连接P0和3V3。务必在接通电源前再次检查所有连接特别是电源正负极不能接反避免短路。实操心得在Snap Circuits上搭建时尽量让线路走向清晰避免导线交叉过多导致接触不良。完成搭建后可以轻轻按压每个按钮并摇晃一下底板确保所有卡扣连接牢固没有虚接。这是后续编程调试能顺利进行的基础。4. 软件编程从零编写贪吃蛇游戏硬件准备就绪后我们进入核心环节——编程。这里我们使用微软的MakeCode for Micro:bit在线图形化编程平台因为它最直观。当然你也可以使用Python模式。4.1 初始化与变量定义打开MakeCode (makecode.microbit.org)新建一个项目。首先我们需要创建游戏所需的所有变量snake: 一个数组用于存储蛇身每一节的坐标。坐标可以用一个包含x和y值的自定义“数组”或“字符串”来表示但在MakeCode中更简单的方式是使用两个并行数组snakeX和snakeY分别存储每一节的x坐标和y坐标。foodX,foodY: 食物所在的坐标。directionX,directionY: 蛇头当前移动的方向。例如(1,0)表示向右(0,1)表示向下(-1,0)表示向左(0,-1)表示向上。length: 蛇的当前长度。gameRunning: 一个布尔值真/假标识游戏是否正在进行中。score: 游戏得分。在“变量”类别中创建这些变量。在“当开机时”积木块中进行初始化设置gameRunning为falsescore为0。初始化蛇设置snakeX [2],snakeY [2]让蛇初始出现在屏幕中心(2,2)length 1。设置初始方向例如directionX 1,directionY 0向右移动。调用一个自定义函数createFood在随机位置生成第一颗食物。绘制初始画面点亮蛇头snakeX[0],snakeY[0]和食物所在的LED。4.2 主游戏循环与输入处理游戏的核心是一个永不停止的循环。在MakeCode中我们使用“无限循环”积木块。4.2.1 方向控制输入在循环开始部分或单独用一个“当始终”事件我们需要持续检测四个按钮的状态。使用“输入”类别下的“数字读取引脚 P0”积木块。如果读取P0为0按下且当前方向不是向下防止直接反向则设置directionX 0,directionY -1向上。同理检测P1下、P2左、P3右。注意要加入方向反转的判断逻辑这是贪吃蛇的基本规则。4.2.2 游戏逻辑更新如果gameRunning为true则执行以下步骤计算新蛇头位置newHeadX snakeX[0] directionX;newHeadY snakeY[0] directionY。碰撞检测撞墙判断newHeadX或newHeadY是否小于0或大于4。撞自己遍历snakeX和snakeY数组从索引0到length-1检查是否有坐标与 (newHeadX,newHeadY) 相同。如果发生任何碰撞设置gameRunning为false在LED上显示一个“哭脸”图案或“GAME OVER”然后跳出循环或结束游戏。移动蛇身将新的蛇头坐标 (newHeadX,newHeadY) 插入到snakeX和snakeY数组的最前面索引0位置。在MakeCode中可以使用“数组”类别下的“在索引处插入值”积木。判断新蛇头是否吃到食物检查newHeadX foodX且newHeadY foodY。如果吃到score增加比如10分length增加1然后调用createFood生成新食物。注意吃到食物时不要移除蛇尾数组的最后一项。如果没吃到需要移除蛇尾。即删除snakeX和snakeY数组的最后一项索引为length的位置。在MakeCode中可以使用“移除数组的最后一个值”积木。重绘画面首先清除整个LED点阵使用“显示”类别的“清除屏幕”。然后遍历蛇身数组点亮每一个 (snakeX[i],snakeY[i]) 坐标的LED。可以使用“显示”-“点亮 (x)(y)”积木结合循环。最后点亮食物所在的LED (foodX,foodY)。加入延迟在循环末尾加入一个“暂停毫秒”积木例如300毫秒。这个时间控制了游戏的速度值越大蛇移动越慢。4.3 辅助函数与游戏流程控制createFood函数此函数负责在空白位置随机生成食物。实现方法是在一个当条件为真时循环中随机生成0到4之间的foodX和foodY。然后遍历当前的蛇身数组检查这个随机位置是否与任何蛇身节重合。如果重合就继续循环生成新的随机数直到找到一个空白位置为止。游戏开始与重置我们可以利用Micro:bit板载的A/B按钮来控制游戏。例如“当按钮A被按下时”设置gameRunning为true并重置所有变量到初始状态开始新游戏。“当按钮B被按下时”可以用于暂停/继续游戏。4.4 代码优化与调试技巧防按钮抖动物理按钮在按下和弹起时会产生机械抖动导致Micro:bit在极短时间内读到多次高低电平变化。虽然我们的主循环速度不是特别快但加入简单的防抖逻辑是好习惯。可以在检测到按钮按下后加入一个短暂的延时如50毫秒再读取一次引脚状态进行确认。使用函数模块化将绘制蛇身、绘制食物、碰撞检测等逻辑封装成独立的函数会使代码结构非常清晰易于调试和修改。调试利器——串口输出在MakeCode中可以使用“串口”类别下的“串口写入行”积木将变量值如蛇头坐标、方向、分数输出到电脑的串口监视器。这在排查逻辑错误时非常有用尤其是当LED显示不直观的时候。电源管理我们的游戏由电池供电。为了省电可以在游戏结束gameRunning为false时让Micro:bit进入低功耗模式或者至少关闭无线功能如蓝牙。注意事项MakeCode是图形化编程但逻辑复杂度不低。务必耐心地将积木块组合正确特别是数组的索引操作在开头插入、移除末尾很容易出错。建议先完成一个最小可行版本例如只能向右移动、不增长、不撞墙就循环然后逐步添加吃食物、增长、碰撞检测、方向控制等功能。5. 系统集成、测试与功能扩展5.1 软硬件联调与问题排查将编写好的程序通过USB线编译并下载到Micro:bit中。然后打开Snap Circuits的电源开关。常见问题与解决方案速查表问题现象可能原因排查步骤与解决方案Micro:bit不上电LED不亮1. 电池没电或装反。2. 电源开关未打开。3. Snap Circuits电源线路连接错误或虚接。4. 适配板与Micro:bit接触不良。1. 检查电池电量和方向。2. 确认开关已拨到ON。3. 逐段检查电池盒-开关-适配板3V3/GND的导线连接按紧所有卡扣。4. 重新拔插Micro:bit到适配板。按下按钮游戏无反应1. 程序未正确读取GPIO引脚。2. 按钮电路连接错误如上拉电阻未接。3. 引脚号在程序中设置错误。1. 在MakeCode中用“显示数字”积木临时显示读取的引脚值0或1验证程序能读到变化。2. 用万用表或一个简单的LED模块测试按钮电路是否导通。3. 核对硬件连接的引脚P0, P1...与程序中读取的引脚是否一致。蛇的移动方向混乱或不受控1. 按钮方向与程序中的方向映射错误。2. 防反向逻辑有bug导致可以180度转头。3. 主循环速度太快或太慢导致输入响应异常。1. 逐个按下按钮在串口监视器中查看程序识别到的方向变量值。2. 检查方向判断逻辑按下“上”键时必须确保当前方向不是“下”才允许改变方向为“上”。3. 调整主循环中的“暂停”时间找到合适的游戏速度。食物有时会出现在蛇身上createFood函数的随机位置检测逻辑有漏洞可能在蛇长度很长时陷入长时间循环。优化食物生成算法。可以维护一个“空白位置”列表每次生成食物时从这个列表中随机选取吃完后更新列表。对于5x5小网格简单的循环检测通常够用。游戏运行一段时间后卡死或复位1. 电池电量不足导致电压下降Micro:bit工作不稳定。2. 程序存在内存泄漏如数组无限增长但MakeCode环境管理得较好此情况少见。3. 静电或接触不良导致的瞬时故障。1. 更换新电池。2. 检查在蛇增长时数组操作是否正确确保没吃到食物时一定会移除蛇尾。3. 确保工作环境干燥所有连接稳固。5.2 项目功能扩展与创意优化基础版本完成后你可以尽情发挥创意让这个Snap:bit游戏机更具个性增加音效Micro:bit V2板载了扬声器。你可以在吃到食物时播放一个欢快的音调在撞墙时播放一个低沉的音调游戏结束时播放一段旋律。使用MakeCode中的“音乐”类别积木可以轻松实现。难度分级通过增加蛇的初始长度、提高移动速度减少主循环暂停时间、或者让食物有时效性闪烁几秒后消失来增加游戏难度。分数显示与记录除了在游戏结束时显示分数还可以在游戏过程中通过让Micro:bit的某个LED以特定模式闪烁来表示当前分数段。甚至可以尝试利用Micro:bit的存储功能保存最高分记录。更换显示方式5x5 LED点阵太小利用Snap Circuits的“8x8点阵模块”如果有的话或者通过适配板连接一个更大的OLED屏幕游戏体验会立刻提升一个档次。这需要你学习如何使用I2C或SPI协议来驱动外接屏幕。体感控制抛开按钮试试用Micro:bit内置的加速度计来控制蛇的方向倾斜板子来让蛇移动这会带来全新的操作体验。你需要将加速度计的X、Y轴读数映射到方向变量上。双人对战这是终极挑战需要两块Micro:bit通过无线电功能进行通信。可以设计成两条蛇在同一场地竞速吃食物或者互相对抗。这涉及到无线通信协议和更复杂的游戏状态同步逻辑。完成Snap:bit贪吃蛇项目你收获的远不止一个自制的游戏机。你亲身体验了从问题定义、方案设计、硬件搭建、软件编程到系统调试的完整项目流程。你理解了数字输入、上拉电阻、游戏循环、状态机等核心概念。更重要的是你掌握了将虚拟代码与物理世界连接起来的能力。这种“造物”的成就感是单纯在屏幕上编程无法比拟的。下次当你看到任何有趣的电子创意时你可能会自信地想“我可以用Micro:bit和Snap Circuits试试把它做出来。”
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻