标题:
STM32f103+OLED12864+按键做的贪吃蛇源码
[打印本页]
作者:
重口辣泡菜
时间:
2018-9-4 21:48
标题:
STM32f103+OLED12864+按键做的贪吃蛇源码
刚开始学STM32,看到过网上有人用0.96寸OLED做过贪吃蛇游戏,于是自己也有了这样一个想法,一开始确实遇到了很多麻烦,最主要的是画出来的点总会被下一个点影响,然后开始翻数据手册,才发现一次要写八个点,之后在网上找了很多资料,这一个问题也终于解决了。下面来分享一下我做这个的一点经验。
1.打点函数
我们先建立一个8*128的二维数组,把屏幕上的每一个点都放进这个数组里
2.蛇身建立
屏幕上的点很小,很难看清楚,所以我们用4x4的区域来作为蛇身,蛇的身体用4x4中间挖去2x2的空心方块表示,蛇头用4x4的实心方块表示,食物则用4x4方块去掉四个角的点来表示,每一种图形都用一个函数表示,因为整个游戏用了四种点来显示所以才需要用上面的最小单位的点来组合。
3.蛇的移动
最简单的一种就是添头去尾,移动的时候,以移动的坐标作为新坐标画出头部,如果没吃到食物则删除尾部,吃到食物则保留尾部,每一段移动后都以前一段的旧坐标作为自己的新坐标。为了实现这样的移动,再建一个16bit的数组,高八位存x轴坐标,低八位存y轴坐标,用定时器每隔一段时间显示这个数组的第一位和最后一位就能实现蛇的移动。
4.边界和蛇身判断
这个游戏是不能触碰边界和自身的,所以需要不断检测蛇头坐标是否越过边界,为了检测是否触碰蛇身,就再建一个数组存放蛇身缓存,每移动一次就将蛇身坐标存到这个数组中,再判断蛇头是否碰到蛇身,判断完就立刻清空数组。
制作出来的实物图如下:
IMG_5105.JPG
(2.47 MB, 下载次数: 91)
下载附件
2018-9-4 21:46 上传
IMG_5095.JPG
(2.46 MB, 下载次数: 74)
下载附件
2018-9-4 21:46 上传
stm32单片机源程序如下:
#include "include.h"
uint8_t CheckBuffer[420];//高八位放x坐标,低八位放y坐标
uint16_t MoveCoordinate[420];//高八位放x坐标,低八位放y坐标
uint8_t SnakeCoordinate[8][128];
uint16_t SnakeLength;
uint8_t SnakeCoordinate_x,SnakeCoordinate_y;
uint8_t FoodCoordinate_x,FoodCoordinate_y;
uint8_t MoveDirection;
uint16_t Counter_x=166,Counter_y=1785;
uint8_t runflag=0;
int main(void)
{
Game_Start();
while(1)
{
MoveDirection = KEY_Scan(1);
while(MoveDirection==GAMEOVER)
{
TIM_Cmd(TIM3,DISABLE);
OLED_Clear(0);
OLED_ShowString(32,0,"GAMEOVER");
OLED_ShowString(20,3,"SCORE:");
OLED_ShowNum(75,3,SnakeLength-3,4,16);
delay_ms(1000);
}
}
}
复制代码
所有资料51hei提供下载:
贪吃蛇v2.7z
(698.21 KB, 下载次数: 346)
2018-9-4 21:47 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
yb3215551
时间:
2018-9-5 08:30
学习学习,楼主V5
作者:
Rott
时间:
2018-10-8 21:57
感谢楼主的分享,我得研究一下,如果可以在帖子里直接分享下PCB图就更好了
作者:
andexiong
时间:
2018-10-14 22:41
请问一下,为什么我烧进去不好使呢?
作者:
zb02373
时间:
2018-10-30 09:11
真强,这个代码有难度!
作者:
薛定谔的痞子
时间:
2018-11-17 11:16
谢谢分享,我来试试
作者:
啊杰啊啊啊
时间:
2018-11-17 20:26
谢谢楼主分享
作者:
1574065994
时间:
2018-12-28 12:26
感谢楼主分享
作者:
WZUOZ
时间:
2018-12-30 21:22
请问只用到一个stm32开发板可以么,带有LCD显示屏的
作者:
hellowC8051
时间:
2019-1-29 09:12
楼主厉害,这么小屏都能做游戏
作者:
xode
时间:
2019-2-3 23:05
谢谢楼主分享
作者:
MZT
时间:
2019-10-30 14:01
请问这些io对应要怎么接
作者:
kevinyang999
时间:
2019-11-1 14:32
这个可以搞个玩玩
作者:
执魔
时间:
2021-12-26 16:13
一样的板一样的12864,为什么我按键控制不了方向??
作者:
黄大山
时间:
2022-4-25 13:12
学习单片机的好例程
作者:
电工小明
时间:
2022-4-26 21:55
学以致用了 好有乐趣
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1