基于彩屏驱动函数(已经实现贪吃蛇向右移动),实现贪吃蛇上下左右移动和 实现贪吃蛇吃食物增加长度和撞边界结束游戏的功能,实际上都是属于贪吃蛇游戏的具体功能的实现了,在这里我们需要首先了解一下现有资源,课程提供的里面主要已经实现的功能包括,屏幕的的初始化和贪吃蛇向右移动。
屏幕的初始我们简单了解一下:
通过SPI进行的通信,这种通信方式在屏幕控制中还是比较常见的,不知道屏幕的具体资料,不过这种小屏幕一般用的比较多的就是7735系列的芯片,这方面就简单了解一下,因为一般的驱动工程中已经实现了,大点的绘制是通过LCD_draw_block(uint16_t x,uint16_t y,uint16_t w,uint16_t h,uint16_t color)进行了,这个函数实际上绘制就是一个单色的矩形(本次贪吃蛇的身体是个10*10的正方形)连在一起的时候不太方便看到的个体,所以这里准备弄个空心的回来表示单节身体:
void draw_snake(){ uint16_t i; LCD_1IN3_Clear(GLCD_COLOR_BLACK); for(i = 0; i < eat_snake.snake_body_len; i++){ LCD_draw_block(eat_snake.snake_body[i].iX ,eat_snake.snake_body[i].iY,eat_snake.snake_body_width,eat_snake.snake_body_width,eat_snake.snake_body[i].color); LCD_draw_block(eat_snake.snake_body[i].iX+2 ,eat_snake.snake_body[i].iY+2,eat_snake.snake_body_width-4,eat_snake.snake_body_width-4,GLCD_COLOR_BLACK); } LCD_draw_block(eat_snake.snake_food.iX ,eat_snake.snake_food.iY,eat_snake.snake_body_width,eat_snake.snake_body_width,eat_snake.snake_food.color); }
实际上就是在绘制完正方形在其中回个其他颜色的小正方形:
如何实现速度的变化呢,这里是通过:
if(timer_cnt >= eat_snake.snake_speed){ snake_run(); timer_cnt = 0; }
也就是贪吃蛇的刷新速度,这里是通过1ms的延时进行各种判断,这样也会兼顾按键判断的需求;
然后在贪吃蛇的吃食物的操作中进行:
if(eat_snake.snake_body_len >= 10){ snake_init(); if(eat_snake.snake_speed >= 200) eat_snake.snake_speed -=100; }
初始是1s,然后每一回合减少0.1s,当然了也不能无限制减少的。
咱们看一下成果视频吧!
【Let's doDIY第二期成果视频】 https://www.bilibili.com/video/BV1quWPedE6H/?share_source=copy_web&vd_source=2176e73645ba9710d1c29e12a1f03ada