目录
Let'sDo第2期任务——《彩屏贪吃蛇》背景音乐及音效-个性化
板子系统图结构如下,PICO插到PIOO OMNIBUS (DUAL EXPANDER)双联扩展板扩展板中间槽位,Waveshare微雪的Pico-LCD-1.14插到扩展板的DECK1,DECK2插针用来扩展音频,27管脚作为PWM输出接到蜂鸣上。
程序结构如下
程序运行后首先进行初始化,对按键初始化LCD_1IN14_KEY_Init,液晶初始化LCD_1IN14_Init,LVGL 初始化LVGL_Init,LVGL 各页面及部件初始化Widgets_Init。前面三个初始化时demo中自带的未作修改,Widgets_Init中为贪食蛇四个页面的初始化。页面1是logo图片,页面2为选关界面,页面3为贪食蛇游戏页面,页面4为文本显示页面,显示过关,游戏结束画面。
初始化完成后进入主循环,LCD_1IN14_Read_KEY函数读取按键,handle_key_press函数对按键进行处理,游戏主要功能都在这个函数里面。
呼吸灯代码在handle_key_press函数实现,5ms一个周期,每2.5s左右点亮一次,每次亮80ms
if (16 >= dat->s_hwCounter) {
gpio_put(PICO_DEFAULT_LED_PIN, 1);
} else {
gpio_put(PICO_DEFAULT_LED_PIN, 0);
}
dat->s_hwCounter++;
dat->s_hwCounter &= 511;
程序开始运行时在页面1显示logo图片,
按B键进入页面2选关界面,页面2光标移到关卡处按A键可设置关卡1~8,按B键进入页面3游戏页面。
在游戏界面过关或游戏结束进入页面4显示关卡数及得分情况,停留1秒后跳转到页面2进行下一关或从新开始游戏。
程序主要难度在页面2游戏部分,包含一个snake_run游戏运行主函数,处理按键方向,正在上下运动的蛇只能左右转向,正在左右运动的蛇只能上下转向。确定运动方向后根据不同关卡的速度来调用snake_move函数来处理蛇的运动,第一关运动速度慢每300ms调用一次,第二关225ms调用一次,依次类推,第八关运行速度最快,80ms调用一次snake_move函数。
然后调用draw_snake_food及draw_snake函数来处理蛇及食物的图像。
snake_move函数判断蛇头坐标是否与食物、身体及边界一致。如与食物坐标一致则剩余食物数量减1,蛇身体长度加1,随机生产一个新食物的坐标,如果剩余食物数量为0则过关,跳转到页面4显示通过关卡n及分数,延时0.5s后进页面2然后进入下一关。如与身体或边界坐标一致,则游戏结束,跳转到页面4显示GAME OVER及分数,延时0.5s后进页面2从第一关从新开始游戏。
视频地址: https://www.bilibili.com/video/BV1M8pCeQEy6/?share_source=copy_web&vd_source=771c5bc0a24f31639a426bf66cb9e6c1
固件及源代码 RP2040-LCD-LVGL.zip
https://minkai-shi.github.io/