内容介绍
内容介绍
软硬件介绍:
- 开发板:树莓派pico ZP2040开发板。该开发板是由树莓派基金会推出的双核ARMCortex M0+微控制器,有133MHz的时钟速率以及264kb的SRAM,支持C/C++、micropython的编程
- 软件工具:Thonny。该软件是一款面向初学者的Python IDE,界面简洁易上手
流程图
已实现功能:
- 贪吃蛇初始位置及食物位置的随机生成
- 贪吃蛇与自身及边框的碰撞检测
- 使用ZP2040摇杆和案件控制贪吃蛇行动轨迹
- 难度分级及分数结算
本项目基于ZP2040开发板引脚及相关特性,通过修改相关参数与引脚,对控制方法进行相应修改与优化,将适用于其他开发板的贪吃蛇游戏移植到ZP2040上并成功运行。
实物展示图
相关说明:
- 贪吃蛇初始位置及食物位置的随机生成
def food(snake=[-1,-1]): global x1,y1 x1=random.randrange(0,230) y1=random.randrange(0,180) x1=x1-x1%10#取十的倍数,保证蛇头和食物能完全重合 y1=y1-y1%10 while(x1 in snake and y1 in snake):#与蛇身列表比较,重复则重新生成 x1=random.randrange(0,230) y1=random.randrange(0,180) x1=x1-x1%10#取十的倍数,保证蛇头和食物能完全重合 y1=y1-y1%10 display.fill_rect(x1,y1,10,10,st7789.RED)#显示以x,y坐标为起点的10*10正方形 def intsnake(): x2=random.randrange(0,230) y2=random.randrange(0,180) x2=x2-x2%10#取十的倍数,保证蛇头和食物能完全重合 y2=y2-y2%10 snake=[x2,y2]#初始蛇身列表 display.fill_rect(x2,y2,10,10,st7789.WHITE) return snake#返回蛇身列表供其他模块调用
- 贪吃蛇与自身及边框的碰撞检测
def chuli(snake): global x,y,x1,y1,goal,speedv,lv,crush a=b=crush=0 length=len(snake) newsnake=addlong(x,y,snake)#将沿规定方向移动的蛇头坐标加入蛇身列表 while a<length:#判断是否发生碰撞 if snake[a]==x and snake[a+1]==y: crush=1 break a+=2 if crush==1 or x>240 or x<0 or y>180 or y<0:#游戏结束画面 display.fill(st7789.BLACK) display.text(font2, "Game Over!", 40, 80,st7789.RED) display.text(font2, "Final score:", 10, 110,st7789.BLUE) display.text(font2, str(goal), 200, 110,st7789.YELLOW) display.text(font1, "Press the run key to restart!", 10, 160) Timer.deinit() sys.exit() if x==x1 and y==y1:#判断是否吃到食物 goal+=1 print(goal) newsnake=addlong(x1,y1,newsnake)#食物坐标添入蛇身列表 displays(newsnake)#在屏幕上显示整个蛇身 food(newsnake)#生成新食物 display.fill_rect(newsnake[-2],newsnake[-1],10,10,st7789.BLACK)#绘制蛇移动后的样子 del newsnake[-1] del newsnake[-1] displays(newsnake) time.sleep(speedv) display.hline(0,190,240,st7789.RED)#绘制得分栏 display.text(font2, "score:", 0, 200) display.text(font2, str(goal), 95, 200,st7789.YELLOW) display.text(font2, "level:", 125, 200) display.text(font2, str(lv), 215, 200,st7789.YELLOW) return newsnake
- 使用ZP2040摇杆和案件控制贪吃蛇行动轨迹。
- 操作方法:B键(下)、A键(上)、拨动左边摇杆控制左右时需同时按下B键
xAxis = ADC(Pin(28)) yAxis = ADC(Pin(29))
while True: l2=dir(l1) l1=l2 xValue = xAxis.read_u16() yValue = yAxis.read_u16() print(str(xValue) +", " + str(yValue)) utime.sleep(0.01) if yValue<=10000: flag=2 elif yValue>=40000: flag=1
- 难度分级及分数结算
if goal<5: #判断速度和难度等级 speedv=0.5 lv=1 elif goal<10: speedv=0.4 lv=2 elif goal<15: speedv=0.3 lv=3 elif goal<20: speedv=0.2 lv=4 else: speedv=0.1 lv=5
遇到问题及解决
- 代码中引脚的匹配与修正-阅读代码并查阅原理图
- 无法通过摇杆控制贪吃蛇行动-原代码为通过摇杆电平转折控制贪吃蛇左右,修改为通过识别摇杆电平大小控制贪吃蛇左右
软硬件
附件下载
greedysnake.py
操作方法:B键(下)、A键(上)、拨动左边摇杆控制左右时需同时按下B键
st7789.py
joystick.py
团队介绍
2018级电子信息工程专业
团队成员
ax57
评论
0 / 100
查看更多
猜你喜欢
Shark:基于树莓派PICO移植游戏-贪吃蛇使用MicroPython进行移植贪吃蛇游戏,游戏控制为MMA7660三轴姿态传感器,光电旋转编码器旋转控制贪吃蛇前进速度
shark_xin
1430
基于树莓派RP2040的嵌入式学习板实现能控制LCD和电脑界面的“鼠标”本项目基于树莓派RP2040,实现了四向摇杆控制LCD屏幕上图像化的鼠标移动和控制电脑鼠标移动
blackfish
1540
基于树莓派RP2040嵌入式系统学习平台设计俄罗斯方块通过树莓派RP2040以及microPython进行俄罗斯方块的开发,通过LCD屏显示,通过按键和四向摇杆控制游戏的动作;在游戏中要通过蜂鸣器播放背景音乐。
arbelat
1291