前言:本实现基于stm32芯片,移植RT_Thread Nano系统源码,实现两个小游戏(贪吃蛇/俄罗斯方块)。本实验提供完整的IAR工程源码并且有很多注释,是一个不错的参考例程。关键知识点:OLED驱动,ADC采样,游戏逻辑设计,RT_Thread移植


《点击下载源码》

1.硬件设计

0.96寸OLED

摇杆

stm32f103c8t6 (64k-ROM 20k-RAM)

以上材料,照着图片搜索都能在TB买到。

2.设计思路:

运用RT-Thread系统需要结合自己的项目需求,将RT-Thread的优点发挥出来,不仅要实现需求,还要让代码具有可扩展性、移植性。

我们利用一个定时器进行周期地检测摇杆的状态,我们要保证任务能够快速响应摇杆。

作为游戏机而言,其中包含了很多种小游戏,如果一种游戏当作一个线程,那么某一个时刻只会运行一个游戏,也就是一个游戏线程;创建那么多个线程不就没有意义了吗?确实最好的方式是使用前后台的形式实现,但这里为了让代码能够层次分明,可扩展性,一个小游戏就是一个线程,系统只需要运行当前用户打开的小游戏的线程,其他的线程挂起,不参与调度。

回到刚才摇杆的问题,我们要保证每个线程都能快速地获取摇杆状态,当摇杆的状态变化时产生出一个摇杆事件,线程等待该事件,当事件到来时,调用摇杆驱动的接口,主动获取摇杆信息。

按键也是同样的道理,利用一个定时器周期地检测按键的状态,当有按键发生变化时产出事件,线程等待事件发生时,主动获取按键信息。

接下来说一下关于显示的问题,通常的做法就是利用定时器,周期地将显存的数据同步到屏幕了,但是这样做有缺陷,但用户没有操作界面变化时,这时候的刷新时没有必要的,会大大增加系统的负担。

我们用一个线程实现周期地刷新屏幕,其他的线程会调用屏幕驱动函数,把数据写入显存时,在该函数里发送一个屏幕刷新事件,屏幕服务线程等待到这个事件就进行屏幕显示刷新,将显存的数据通过i2c发送的屏幕。

我们需要利用一个线程也就是main函数进行游戏管理和设置,当用户选择某种游戏时,创建该游戏的线程,当退出时,把该线程删除。

线程的优先级:main函数 > 游戏进程 > 屏幕刷新线程。要注意的是在屏幕刷新时,进行i2c数据传送过程中不能被其他线程打断,所以先把中断关闭,数据传输完成后再打开中断。

3.代码设计:

我之前单独做过贪吃蛇和俄罗斯方块的小游戏,再结合STM32移植rt_thread源码的例程。可参考以下博客:

基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)
基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)
基于IAR-stm32裸板工程,完美移植RT-Thread Nano系统(附源码)

将上面的代码结合到一个工程里就是本篇所要做的项目:

使用说明:

接线如下:

如果要在电脑上看串口打印信息,需要将PA9引脚通过串口小板接到电脑。

  • 下载编译代码,将工程烧录到开发板上,点击运行,出现以下界面,如果屏幕花屏,那么将OLED的RES引脚接地进行复位,再复位单片机。

  • 上下控制摇杆可以选中不同的游戏,按下摇杆中键进入选中的游戏,例如运行Snake游戏,首先出现以下界面:

  • 再按下摇杆中键开始游戏,操控摇杆进行游戏,界面如下:

  • 在游戏进行时中或游戏失败(弹出”GAME OBER”),这时候按下中键可以重新开始游戏:

  • 在游戏过程中,长按中键2s以上再松开回到首页。

如果在这个代码架构下添加新游戏,在main函数里的gamestr结构体数组加入元素,一个元素包括游戏名、游戏启动接口、游戏停止接口,游戏内容的实现方法可参考现有的游戏例程。

时间仓促,如有错误之处,还望指出。

《博观而约取,厚积而薄发。————苏轼》

基于RT-Thread实现的小游戏(贪吃蛇、俄罗斯方块)相关推荐

  1. 微信小游戏——贪吃蛇

    博客简介 本篇博客介绍的是微信小游戏贪吃蛇的案例,详细的开发过程,并且提供代码压缩包下载. 案例简介 布局 构建对象 响应事件 蛇头对象的移动 蛇身的移动 食物刷新 绘制得分 碰撞检验 开始界面和结束 ...

  2. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  3. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  4. Java经典小游戏——贪吃蛇简单实现(附源码)

    文章目录 一.使用知识 二.使用工具 三.开发过程 3.1素材准备 3.2 开发过程 3.2.1 创建项目 3.2.2 页面设计 3.23 画蛇 3.24创建蛇的食物 3.2.5增加蛇的存活状态 3. ...

  5. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  6. 小游戏贪吃蛇的c++源代码

    小游戏贪吃蛇的c++源代码,快来看看,还带解释 #include #include #include #include #include <conio.h> #include #inclu ...

  7. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  8. Python命令行小游戏—贪吃蛇

    Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...

  9. 我的小游戏——贪吃蛇

    我的小游戏--贪吃蛇 简介 最近学习了Java的GUI编程写一个贪吃蛇的游戏来玩玩. 游戏主要涉及到Java的GUI编程和多线程等技术. 游戏一共有两种模式:窗墙模式和撞墙模式,默认是窗墙模式,选择不 ...

  10. GUI编程详解:小游戏贪吃蛇

    GUI编程 1.简介 Gui的核心技术:Swing.AWT 界面不美观 需要jre环境 为什么要学习? 可以写出自己想要的小工具 工作时候,也可能需要维护到swing界面 了解MVC架构,了解监听 ( ...

最新文章

  1. LeetCode 12 Integer to Roman (整数转罗马数字)
  2. hdu 5045 费用流
  3. 非此即彼的逻辑错误_MBA逻辑攻略-逻辑知识大全,快来收藏吧!
  4. 区块链BaaS云服务(36)欧盟“用户身份认证”ESSIF
  5. swiper 滚回第一个数据_名企必备的数据分析基础技能:Python大法(一)
  6. CSS 3 中的伪类选择器
  7. 计算机活动天窗,玩出花样,天窗的正确打开方式
  8. Python模块(3)--PIL 简易使用教程
  9. bigdecimal 保留两位小数_Python的保留小数及对齐
  10. Ubuntu12环境下Thin+rails(4)+ruby(2)+nginx+mysql 配置
  11. DirectSound
  12. mysql-5.6.24-win32.zip 下载 安装 配置 创建数据库
  13. 前端开发工具之jQuery
  14. 网管学习日记-三层交换机
  15. Android 科大讯飞、语音听写集成指南
  16. gcode 解析入门1-1
  17. hive sql 添加字段以及修改字段
  18. VC++ 查看系统进程,获取进程关联的DLL列表
  19. Altium designer—STM32F103ZET6最小系统原理图
  20. c语言 北京时间转换utc时间_UTC时间与北京时间相互转换

热门文章

  1. 小酌重构系列[19]——分解大括号
  2. [android] 隐式意图的配置
  3. [C++] STACK_Principle
  4. Androidpn 消息推送总结
  5. 2018 年年终总结 -- 斜杠前进
  6. k8s 给worker/master节点打标签(角色标签)
  7. python安装psutil库及使用
  8. python3出现module importlib._bootstrap has no attribute SourceFileLoader解决办法
  9. eureka实例相关配置
  10. springboot支持三种嵌入式servlet容器:tomcat(默认),jetty,undertow