使用esp8266作为主板,max7219cng作为显示屏,adkeybord作为按键 用mixly做一个贪吃蛇小游戏,使其可以直接编译运行


实现思路 要使用Mixly制作基于ESP8266主板、MAX7219CNG显示屏和ADKeyboard按键的贪吃蛇小游戏,需要完成以下几个步骤: 1. 连接硬件:将ESP8266、MAX7219CNG显示屏和ADKeyboard按键正确连接。 2. 在Mixly中搭建程序逻辑:包括初始化硬件、处理按键输入、更新贪吃蛇的位置和显示。 代码实现(Mixly图形化代码对应的Arduino代码) ```cpp #include <MD_Parola.h> #include <MD_MAX72xx.h> #include <SPI.h> #include <Arduino.h> // 定义MAX7219的参数 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define MAX_DEVICES 1 #define CS_PIN D8 // 创建MAX7219对象 MD_Parola mx = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // 定义ADKeyboard的引脚 #define KEYPAD_PIN A0 // 贪吃蛇的结构体 struct Snake { int x[20]; int y[20]; int length; int direction; }; // 食物的坐标 int foodX; int foodY; // 初始化贪吃蛇 Snake snake; // 初始化函数 void setup() { // 初始化串口通信 Serial.begin(115200); // 初始化MAX7219 mx.begin(); mx.setIntensity(0); // 初始化贪吃蛇 snake.length = 3; snake.direction = 1; // 初始方向向右 for (int i = 0; i < snake.length; i++) { snake.x[i] = i; snake.y[i] = 0; } // 生成初始食物 generateFood(); } // 生成食物 void generateFood() { foodX = random(0, 8); foodY = random(0, 8); // 确保食物不在蛇的身体上 for (int i = 0; i < snake.length; i++) { if (foodX == snake.x[i] && foodY == snake.y[i]) { generateFood(); break; } } } // 主循环函数 void loop() { // 读取按键输入 int keyValue = analogRead(KEYPAD_PIN); if (keyValue < 100) { // 上 if (snake.direction != 3) { snake.direction = 0; } } else if (keyValue < 200) { // 右 if (snake.direction != 2) { snake.direction = 1; } } else if (keyValue < 300) { // 下 if (snake.direction != 0) { snake.direction = 3; } } else if (keyValue < 400) { // 左 if (snake.direction != 1) { snake.direction = 2; } } // 移动贪吃蛇 moveSnake(); // 检查是否吃到食物 if (snake.x[0] == foodX && snake.y[0] == foodY) { snake.length++; generateFood(); } // 检查是否撞到墙壁或自己 if (snake.x[0] < 0 || snake.x[0] >= 8 || snake.y[0] < 0 || snake.y[0] >= 8) { gameOver(); } for (int i = 1; i < snake.length; i++) { if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i]) { gameOver(); } } // 显示贪吃蛇和食物 displaySnake(); // 延迟一段时间 delay(200); } // 移动贪吃蛇 void moveSnake() { for (int i = snake.length - 1; i > 0; i--) { snake.x[i] = snake.x[i - 1]; snake.y[i] = snake.y[i - 1]; } switch (snake.direction) { case 0: // 上 snake.y[0]--; break; case 1: // 右 snake.x[0]++; break; case 2: // 左 snake.x[0]--; break; case 3: // 下 snake.y[0]++; break; } } // 显示贪吃蛇和食物 void displaySnake() { mx.clear(); // 显示蛇 for (int i = 0; i < snake.length; i++) { mx.setPoint(snake.x[i], snake.y[i], true); } // 显示食物 mx.setPoint(foodX, foodY, true); mx.display(); } // 游戏结束 void gameOver() { mx.clear(); mx.print("GAME OVER"); while (true) { // 游戏结束,程序停止 } } ``` 代码解释 1. 初始化部分:在`setup`函数中,初始化串口通信、MAX7219显示屏,初始化贪吃蛇的位置和方向,并生成初始食物。 2. 主循环部分:在`loop`函数中,读取ADKeyboard的按键输入,根据按键改变贪吃蛇的方向,移动贪吃蛇,检查是否吃到食物或撞到墙壁、自己,最后显示贪吃蛇和食物。 3. 辅助函数:`generateFood`函数用于生成食物,`moveSnake`函数用于移动贪吃蛇,`displaySnake`函数用于显示贪吃蛇和食物,`gameOver`函数用于处理游戏结束的情况。 额外注意的逻辑点 1. 按键输入的精度:ADKeyboard的按键输入是通过模拟值读取的,不同的按键对应不同的模拟值范围。在实际使用中,可能需要根据硬件的情况调整这些范围。 2. 贪吃蛇的边界检查:在移动贪吃蛇时,需要检查蛇是否撞到墙壁或自己。如果撞到,游戏应该结束。 3. 食物的生成:生成食物时,需要确保食物不在蛇的身体上。可以通过递归调用`generateFood`函数来实现。 [2025-07-22 21:07:17 | AI写代码神器 | 1531点数解答]
- 年会 1.热场视频:工会2024年度活动集锦 2.馆领导新春致辞 3.串场游戏:听前奏猜歌曲 4.钢琴演奏《我爱你中国》 独舞 (待定) 5.小游戏:每轮6个人。主持人提一个问题,每个人按顺序回答,答案必须是三个字,接不上来或答错的人淘汰,最终留下的人获胜。 6.新职工亮相+拜年 7.合唱表演《星辰大海》 8.串场游戏:听前奏猜歌 9.小游戏:以心传心:每组两人搭档,每轮3组共上场6人。游戏开始时每组的书写者转身看大屏幕显示词。书写者需通过写字或简笔画的方式用手指在搭档后背传达看到的内容,不能出声、不能用手势比划其他多余动作。搭档(画画者)要凭借后背感受到的笔画轨迹,尽可能精准地把对应的词语画出来。绘画过程中,不可询问,独立完成。 10.快板儿表演《战马超》 贯口《小孩子》 11.串场游戏:听前奏猜歌 12.小游戏:改名换姓:每轮8个人。参与者每人给自己想一个昵称(5个字以内)。游戏开始后大家从1-8喊数字,喊到相同数字的要尽快说出对方昵称,说错的人淘汰。 13.本命年职工送祝福 字数:200字(270点数解答 | 2025-01-16 14:21:53)173
- 年会 1.热场视频:工会2024年度活动集锦 2.馆领导新春致辞 3.串场游戏:听前奏猜歌曲 4.钢琴演奏《我爱你中国》 独舞 (待定) 5.小游戏:每轮6个人。主持人提一个问题,每个人按顺序回答,答案必须是三个字,接不上来或答错的人淘汰,最终留下的人获胜。 6.新职工亮相+拜年 7.合唱表演《星辰大海》 8.串场游戏:听前奏猜歌 9.小游戏:以心传心:每组两人搭档,每轮3组共上场6人。游戏开始时每组的书写者转身看大屏幕显示词。书写者需通过写字或简笔画的方式用手指在搭档后背传达看到的内容,不能出声、不能用手势比划其他多余动作。搭档(画画者)要凭借后背感受到的笔画轨迹,尽可能精准地把对应的词语画出来。绘画过程中,不可询问,独立完成。 10.快板儿表演《战马超》 贯口《小孩子》 11.串场游戏:听前奏猜歌 12.小游戏:改名换姓:每轮8个人。参与者每人给自己想一个昵称(5个字以内)。游戏开始后大家从1-8喊数字,喊到相同数字的要尽快说出对方昵称,说错的人淘汰。 13.本命年职工送祝福 (392点数解答 | 2025-01-16 14:34:56)133
- 商品展示模块 前端页面:productlist.jsp、productdetail.jsp 后端逻辑:productservlet 处理获取商品列表与详情请求 实现商品分页显示、按类别或关键词搜索功能 前端页面渲染与交互 使用 jsp、el、jstl 渲染商品数据 使用 css 优化页面样式,确保用户界面美观统一 使用 javascript 实现简单的前端交互,如商品图片切换、下拉菜单 搜索与过滤功能 在 productlist.jsp 实现搜索栏,允许用户输入关键词进行搜索 后端根据搜索条件查询数据库,返回符合条件的商品列表 使用 jstl 循环输出商品数据,并实现价格或类别过滤选项(19点数解答 | 2024-12-13 15:00:43)227
- 贪吃蛇。(57点数解答 | 2025-04-17 20:33:23)92
- 贪吃蛇(1352点数解答 | 2025-06-06 20:22:46)71
- 题目:按照以下步骤在 pycharm 中进行自动化测试脚本编写,并执行脚本。 步骤: (1)从 selenium 中引入 webdriver; (2)使用 selenium 模块的 webdriver 打开谷歌浏览器; (3)在谷歌浏览器中通过 get 方法发送网址eshop测试平台登录页面; (4)增加智能时间等待 5 秒; (5)查看登录页面中的用户名输入框元素,通过 css_selector 属性定位用户名输入框,并输入用户名(用自己注册的用户); (6)查看登录页面中的密码输入框元素,通过 xpath 属性定位密码输入框,并输入密码(用自己注册的用户对应密码) ; (7)查看登录页面中的登录按钮元素,通过 class_name 方法定位登录按钮,使用 click()方法点击登录按钮进入eshop测试平台首页; (8)在eshop测试平台首页通过 link_text 方法对“我的订单”按钮进行定位,使用 click()方法点击“我的订单”(304点数解答 | 2024-11-06 15:38:30)311
- 一、建造者模式练习1、电脑组装工厂可以将cpu、主板、显卡、显示器等硬件设备组装在一起构成一台完整的电脑, 且构成的电脑可以是笔记本, 也可以是台式机。对于用户而言, 无须关心电脑的组成设备和组装过程, 工厂返回给用户的是完整的电脑对象。使用建造者模式实现电脑组装过程, 要求编程实现。builderdirectorbuildcpu ()voidbuildmotherboard 0voidconstruct ( ) : productbuildgrapgics ()voidbuilddisplay 0voidgetproduct ()productconcretebuilder1contretebuilder2buildcpu (): voidbuildcpu ()voidbuildmotherboard0: voidbuildmotherboard0voidbuildgrapgics (): voidbuildgrapgics 0void+ builddisplay 0: voidbuilddisplay (): voidgetproduct (): productgetproduct(1205点数解答 | 2024-10-31 16:20:44)303
- java写一、建造者模式练习1、电脑组装工厂可以将cpu、主板、显卡、显示器等硬件设备组装在一起构成一台完整的电脑, 且构成的电脑可以是笔记本, 也可以是台式机。对于用户而言, 无须关心电脑的组成设备和组装过程, 工厂返回给用户的是完整的电脑对象。使用建造者模式实现电脑组装过程, 要求编程实现。builderdirectorbuildcpu ()voidbuildmotherboard 0voidconstruct ( ) : productbuildgrapgics ()voidbuilddisplay 0voidgetproduct ()productconcretebuilder1contretebuilder2buildcpu (): voidbuildcpu ()voidbuildmotherboard0: voidbuildmotherboard0voidbuildgrapgics (): voidbuildgrapgics 0void+ builddisplay 0: voidbuilddisplay (): voidgetproduct (): productgetpr(909点数解答 | 2024-10-31 16:21:50)125
- 建造者模式练习1、电脑组装工厂可以将cpu、主板、显卡、显示器等硬件设备组装在一起构成一台完整的电脑, 且构成的电脑可以是笔记本, 也可以是台式机。对于用户而言, 无须关心电脑的组成设备和组装过程, 工厂返回给用户的是完整的电脑对象。要求E-R图实现 (179点数解答 | 2025-03-19 16:23:03)74
- #定义 simmr_in <- simmr_load( mixtures = mix, source_names = s_names, source_means = s_means, source_sds = s_sds, correction_means = c_means, correction_sds = c_sds, concentration_means = conc ) #运行 #1.马尔可夫链蒙特运行模型的代码 carlo(mcmc) simmr_out <- simmr_mcmc(simmr_in) #检查算法收敛(2不需要检查 prior_viz(simmr_out) #检查模型拟合 post_pred <- posterior_predictive(simmr_out) #比较来源 compare_sources(simmr_out, source_names = c( "gw", "s1", "s2", "s3", "s4", "s5", "s6" ) )(190点数解答 | 2024-10-01 01:23:56)197
- 实现周期可调的方波信号发生器设计,输出的周期是0.5hz-1khz,通过4个按键对频率和方波信号发生器的工作原理进行设置。设置的方式如下: (1)共**1-**4个按钮,对频率进行调整(0.5-1000.0hz),4个按键的功能定义如下表 序号 按键 按键功能 1000 1 **1 调整选择,在正常显示状态时,按一下该按钮进入调整小数位,如果再按一下调整个位,再按一下调整十位,再按一下调整百位,当频率大于100后,不对小数位进行调整,即显示的参数为整数。 选择到频率调节的最高位后,再按一下进入方波发生原理选择,默认为0,采用软件查询及软件计数的方式实现方波发生器功能,调整为1,表示采用定时器中断。完成方波发生器的功能,再按一下调整的参数生效,最终显示调整好的数据。 2 **2 增调整,按一下将被调整的值增加1 3 **3 减调整,按一下将被调整的值减1 4 **4 调整退出,开始调整的数据不生效,显示调整之前的数据。 (2)调整过程的数据不能作为最终生效参数,只有经过**1最终退出才生效,这是作为设备操控的安全确认,防止调整过程设置不当引起安全事故,设置不合适可以经过**4直接退出,设(42点数解答 | 2024-10-21 11:00:16)286
- 51单片机 综合gpio应用的led灯、按键,设计实现基于stc51单片机如图电路结构(无关结构可自行删除),其中led灯8个,独立按键3个,编程实现按键控制流水灯功能。具体功能如下:(1)开机进入初始状态,led灯全灭。 (2)按下key1按键,流水灯左移循环点亮。 (3)按下key2按键,流水灯右移循环点亮。 (5)按下key3按键,所有灯的状态取反。(2358点数解答 | 2024-12-15 21:04:55)194