找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9138|回复: 15
收起左侧

STM32f103+OLED12864+按键做的贪吃蛇源码

  [复制链接]
ID:259323 发表于 2018-9-4 21:48 | 显示全部楼层 |阅读模式
  刚开始学STM32,看到过网上有人用0.96寸OLED做过贪吃蛇游戏,于是自己也有了这样一个想法,一开始确实遇到了很多麻烦,最主要的是画出来的点总会被下一个点影响,然后开始翻数据手册,才发现一次要写八个点,之后在网上找了很多资料,这一个问题也终于解决了。下面来分享一下我做这个的一点经验。
1.打点函数
   我们先建立一个8*128的二维数组,把屏幕上的每一个点都放进这个数组里
2.蛇身建立
   屏幕上的点很小,很难看清楚,所以我们用4x4的区域来作为蛇身,蛇的身体用4x4中间挖去2x2的空心方块表示,蛇头用4x4的实心方块表示,食物则用4x4方块去掉四个角的点来表示,每一种图形都用一个函数表示,因为整个游戏用了四种点来显示所以才需要用上面的最小单位的点来组合。
3.蛇的移动
   最简单的一种就是添头去尾,移动的时候,以移动的坐标作为新坐标画出头部,如果没吃到食物则删除尾部,吃到食物则保留尾部,每一段移动后都以前一段的旧坐标作为自己的新坐标。为了实现这样的移动,再建一个16bit的数组,高八位存x轴坐标,低八位存y轴坐标,用定时器每隔一段时间显示这个数组的第一位和最后一位就能实现蛇的移动。
4.边界和蛇身判断
  这个游戏是不能触碰边界和自身的,所以需要不断检测蛇头坐标是否越过边界,为了检测是否触碰蛇身,就再建一个数组存放蛇身缓存,每移动一次就将蛇身坐标存到这个数组中,再判断蛇头是否碰到蛇身,判断完就立刻清空数组。

制作出来的实物图如下:
IMG_5105.JPG IMG_5095.JPG

stm32单片机源程序如下:
  1. #include "include.h"

  2. uint8_t CheckBuffer[420];//高八位放x坐标,低八位放y坐标
  3. uint16_t MoveCoordinate[420];//高八位放x坐标,低八位放y坐标
  4. uint8_t SnakeCoordinate[8][128];
  5. uint16_t SnakeLength;
  6. uint8_t SnakeCoordinate_x,SnakeCoordinate_y;
  7. uint8_t FoodCoordinate_x,FoodCoordinate_y;
  8. uint8_t MoveDirection;
  9. uint16_t Counter_x=166,Counter_y=1785;
  10. uint8_t runflag=0;

  11. int main(void)
  12. {         
  13.          Game_Start();
  14.    while(1)
  15.          {
  16.                    MoveDirection = KEY_Scan(1);
  17.                  
  18.                    while(MoveDirection==GAMEOVER)
  19.                          {
  20.                                   TIM_Cmd(TIM3,DISABLE);
  21.                                   OLED_Clear(0);
  22.                                   OLED_ShowString(32,0,"GAMEOVER");
  23.                                   OLED_ShowString(20,3,"SCORE:");
  24.                                   OLED_ShowNum(75,3,SnakeLength-3,4,16);
  25.                                   delay_ms(1000);
  26.                          }
  27.          }
  28. }
复制代码

所有资料51hei提供下载:
贪吃蛇v2.7z (698.21 KB, 下载次数: 343)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:334374 发表于 2018-9-5 08:30 | 显示全部楼层
学习学习,楼主V5
回复

使用道具 举报

ID:406761 发表于 2018-10-8 21:57 | 显示全部楼层
感谢楼主的分享,我得研究一下,如果可以在帖子里直接分享下PCB图就更好了
回复

使用道具 举报

ID:409659 发表于 2018-10-14 22:41 | 显示全部楼层
请问一下,为什么我烧进去不好使呢?
回复

使用道具 举报

ID:153917 发表于 2018-10-30 09:11 | 显示全部楼层
真强,这个代码有难度!
回复

使用道具 举报

ID:428094 发表于 2018-11-17 11:16 | 显示全部楼层
谢谢分享,我来试试
回复

使用道具 举报

ID:423055 发表于 2018-11-17 20:26 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:232734 发表于 2018-12-28 12:26 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:140906 发表于 2018-12-30 21:22 来自手机 | 显示全部楼层
请问只用到一个stm32开发板可以么,带有LCD显示屏的
回复

使用道具 举报

ID:328121 发表于 2019-1-29 09:12 | 显示全部楼层
楼主厉害,这么小屏都能做游戏
回复

使用道具 举报

ID:337376 发表于 2019-2-3 23:05 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:594206 发表于 2019-10-30 14:01 | 显示全部楼层
请问这些io对应要怎么接
回复

使用道具 举报

ID:633837 发表于 2019-11-1 14:32 | 显示全部楼层
这个可以搞个玩玩
回复

使用道具 举报

ID:948441 发表于 2021-12-26 16:13 | 显示全部楼层
一样的板一样的12864,为什么我按键控制不了方向??
回复

使用道具 举报

ID:928177 发表于 2022-4-25 13:12 | 显示全部楼层
学习单片机的好例程
回复

使用道具 举报

ID:971289 发表于 2022-4-26 21:55 | 显示全部楼层
学以致用了  好有乐趣
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表