哈喽,各位看官,小编终于抽出时间写程序发文章了。上次发文还是初秋,天还暖着呢,这次就是冬天了,希望下一篇文章不会等到春天……
视频链接: https://b23.tv/6K5Bie
早在两个月前,小编就入手了两个硬件:8x8点阵屏和大按键模块,而且内容都想好了,就做一个贪吃蛇——是的就是用Arduino和点阵屏做一个贪吃蛇游戏!
那今天就跟大家唠叨一下这个贪吃蛇游戏的设计思路吧,文末有源代码获取方式哦~~
前 期 准 备
1.硬件准备
这个好像是废话了,不过小编还是要提醒一下,这里用的是8x8点阵模块,是用MAX7219作为显示驱动器的,只需要5个引脚就搞定了。
除了VCC和GND以外,还有DIN、CS、CLK,分别连接到Arduino UNO的12、11、10引脚
另外大按键模块的引脚连接方式如下:
大按键模块 Arduino UNO
GND ------------- GND
VCC ------------- 5V
SW1 ------------- 5
SW2 ------------- 4
SW3 ------------- 3
SW4 ------------- 2
引脚连接好以后,别忘了在程序中设置引脚号和输入输出模式~~
2.下载库文件
小编用的是LedControl这个库,可以在ArduinoIDE中下载也可以在github上下载:https://github.com/wayoda/LedControl,然后把库文件放在Arduino安装目录的libraries库文件夹里,然后就可以在程序中导入LedControl库并且创建点阵屏对象,引用其中的程序点亮点阵屏咯
程 序 设 计
整个程序设计流程:初始化➨倒计时➨按键检测➨蛇前进、吃食物、蛇增长➨死亡检测(撞墙和自杀)➨画蛇和食物➨游戏结束
1.蛇前进和增长
蛇的前进和增长是整个程序设计的关键,我在程序中定义了snakeX[]和snakeY[]数组作为蛇的x坐标和y坐标,然后将两个数组的第一个元素设置为蛇头,那么蛇在移动的过程中就要不断的移动坐标数组,当然不必全部移动,只要移动蛇身长度的数组就可以了
蛇身移动完了,还有蛇头呢,蛇头是要不断获得一个新的位置的,当蛇头的位置和食物的位置相同时就是蛇吃到食物了,此时蛇身增长,食物也要随机产生新的位置。
void snakeRun() {
//移动蛇的坐标
for (int i = snakeLong; i > 0; i--)
{
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
//设置蛇头的位置
switch (snakeAdd) {
case UP: snakeX[0]--; break;
case DOWN: snakeX[0]++; break;
case LEFT: snakeY[0]--; break;
case RIGHT: snakeY[0]++; break;
}
//蛇吃到食物
if (snakeX[0] == foodX && snakeY[0] == foodY)
{
snakeLong++;//蛇身增长
createFood();//产生新的食物坐标
}
}
2.死亡检测
蛇的死亡检测还是比较简单的,分两种情况判断,一种是当蛇头超出点阵屏时,也就是撞墙了;另一种是蛇头撞到了自己的身体,这里直接从蛇身为3的情况开始判断的,小于3也没有机会撞到自己的身体吧
根据这两种情况,直接改变布尔类型的标志变量gameOver的状态就可以控制游戏结束了!
void deadCheck() {
//撞墙检测
if (snakeX[0] > 7 || snakeX[0] < 0 || snakeY[0] > 7 || snakeY[0] < 0)
{
gameOver = false;
}
//蛇头撞到自身检测
for (int i = 3; i < snakeLong; i++)
{
if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0])
{
gameOver = false;
}
}
}
3.画蛇和食物
这段代码就直接调用LedControl库里的setLed语句就可以了,根据横坐标和纵坐标控制点阵屏上的点的亮灭状态,不过小编最开始直接用了清除屏幕的语句,但是出现了光电闪烁不定的情况,所以就机智的改变了方法:只控制好蛇尾走过后的点熄灭就可以了
void drawSnake() {
lc.setLed(0, foodX, foodY, 1);
for (int i = 0; i < snakeLong; i++)
{
lc.setLed(0, snakeX[i], snakeY[i], 1);
}
lc.setLed(0, snakeX[snakeLong - 1], snakeY[snakeLong - 1], 0); //清除显示
}
完 善 程 序
最后就是改进还完善游戏功能了,游戏开始加个倒计时效果、游戏结束加个笑脸等等,各位小伙伴如果有想加的效果也可以自行添加。
贪吃蛇的程序已经上传到后台了,想要程序的小伙伴,先关注公众号,然后在公众号回复**“贪吃蛇游戏”**,即可获得下载链接。先到先得!你值得拥有!