基于STM32 LCD屏实现的俄罗斯方块小游戏(20220522完成 第一个综合类项目)
概述:
本项目基于 正点原子mini(stm32f103RCT6) 2.8 寸的 ALIENTEK TFTLCD 模块 二轴摇杆模块 的俄罗斯方块小游戏。(学习过程中的项目自测)
我的问题总结:
1.随机数生成我是用RTC的时钟自己写的,用srand+rand 只能生成一次。
2.并行程序(有什么更好的方法)。
3.觉得我哪里需要改进或者有什么见解可以评论私信。
4.需要全部程序联系我吧(不知道咋上传)。
硬件方面:
二轴摇杆模块:由两个变阻器和一个弹性按键组成,通过2个模拟输入和1个数字输入来判断摇杆的状态。
LCD 模块:TLCD 模块采用 16 位的并方式与外部连接。
单片机内核:stm32f103RCT6(正点原子的mini)。
硬件确定后,摇杆模块用杜邦线连接(因为是借的弹性按键没用了所以只用了ROX,ROY),LCD模块插在对应位置(因为都是正点原子的模块)。下图是相关引脚说明
软件方面:
分成三部分:摇杆模块模拟输入的状态获取 lcd的显示 俄罗斯方块运行的部分
随机数部分:
获取RTC的时钟再进行随机数的生成。(处理的不好待优化)
摇杆模块模拟输入的状态获取 :
如上图的通过ADC1获取PA3,PA4的ROX与ROY的姿态。
lcd的显示:
主要分成两块:icd的初始化(驱动器ILI9241初始化) icd画点
初始化:对LCD用到的引脚初始化:PC6-PC10 PB0-PB15
ILI9341:通过对其写命令设定LCD的相关参数~参考ILI9341的使用手册
icd画点:
完成画点后再对其进行扩展:我用到画矩形和画⚪。
俄罗斯方块运行的部分:
在俄罗斯方块部分流程图如下:
在LCD和摇杆部分则是之前两个部分的扩展,主要分析后面4个部分。
移动部分:以下是生成和清除一个块并在数组中置位。
void Display_1Block(u16 x,u16 y,u8 r){ //生成一个块 两个之间x,y相差11 内存置位POINT_COLOR=BLACK;LCD_Draw_Circle(x,y,r);LCD_Draw_Circle(x,y,r-1);LCD_Draw_Circle(x,y,r-2);LCD_Draw_Circle(x,y,r-3);LCD_DrawLine(x-(u16)r,y-(u16)r,x-(u16)r,y+(u16)r);LCD_DrawLine(x-(u16)r,y-(u16)r,x+(u16)r,y-(u16)r);LCD_DrawLine(x+(u16)r,y+(u16)r,x-(u16)r,y+(u16)r);LCD_DrawLine(x+(u16)r,y+(u16)r,x+(u16)r,y-(u16)r);Save_Set_thedata(x,y);}
void Display_1Block_Reset(u16 x,u16 y,u8 r){ //生成一个块 两个之间x,y相差11 内存复位POINT_COLOR=WHITE;LCD_Draw_Circle(x,y,r);LCD_Draw_Circle(x,y,r-1);LCD_Draw_Circle(x,y,r-2);LCD_Draw_Circle(x,y,r-3);LCD_DrawLine(x-(u16)r,y-(u16)r,x-(u16)r,y+(u16)r);LCD_DrawLine(x-(u16)r,y-(u16)r,x+(u16)r,y-(u16)r);LCD_DrawLine(x+(u16)r,y+(u16)r,x-(u16)r,y+(u16)r);LCD_DrawLine(x+(u16)r,y+(u16)r,x+(u16)r,y-(u16)r);Save_Reset_thedata(x,y);}
在完成一个块的生成与清除后,移动和翻转则是同理(需要确定number~块的种类 state~块的翻转):
之后则要实时确定块的状态(stopway)
确定完mode~块的种类 state~块的翻转 stopway~块的状态 hand~摇杆状态开始移动:
特殊状态检测(满行清除回补与越界退出):
在每一次生成下一个随即块前,检前测数组的每一行是否满
在每一次生成随机块后,检测警戒线行上是否有被置位
u8 Check_One_Line(u8 y){ //判断一行是否满 return:1~~~满了u8 i;for(i=1;i<=18;i++){if(State_Block[y][i] == 1){continue;}else{return 0;}}return 1;
}u8 Check_Line_Fail(void){ //判断是否超出警戒线 return : 1~~~没超过 0~~~超过failu8 i;for(i=1;i<=18;i++){if(State_Block[5][i] == 1){return 0;}else{continue;}}return 1;}
综合运行:
将之前的整合在一起
最终结果展示:
俄罗斯方块视频
基于STM32 LCD屏实现的俄罗斯方块小游戏(20220522完成 第一个综合类项目)相关推荐
- 硬件课程设计:基于STM32的多功能播放器之小游戏
4 游戏 4.1 功能介绍 4.1.1 设计思路 为了扩展开发板的应用,同时增加实验的难度和趣味性,我设计了一个类似赛车的小游戏.游戏中共有6条车道,同时有5个障碍物,用按键1和按键2控制赛车更换不同 ...
- 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)
概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...
- 基于stm32单片机俄罗斯方块小游戏Proteus仿真
资料编号:150 视频讲解: 150-基于stm32单片机俄罗斯方块小游戏Proteus仿真(源码+仿真+全套资料) 功能介绍: 通过stm32单片机作为主控,在LCD点阵屏上做出俄罗 ...
- c/c++ 实现俄罗斯方块小游戏(附全部源码)
目录 前言 一.游戏截图和全部代码 1.游戏截图 2.源代码 头文件代码 cpp文件代码 二.easyX库安装 三.宏定义.变量的说明 1.方块像素 2.游戏地图区域 3.预生成方块区域 4.玩家数据 ...
- c++ 小游戏_C/C++编程新手入门基础系列:俄罗斯方块小游戏制作源代码
这篇文章主要为大家详细介绍了C语言实现俄罗斯方块小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 1.要先下载一个 graphics.h 的头文件来绘图. 2.初始化窗口:initgraph ...
- Python编写俄罗斯方块小游戏
俄罗斯方块是俄罗斯人发明的一款休闲类的小游戏,这款小游戏可以说是很多人童年的主打电子游戏了,本文我们使用 Python 来实现这款小游戏. 很多人学习python,不知道从何学起. 很多人学习pyth ...
- 3d游戏编程大师技巧 源代码_C/C++编程入门基础系列:俄罗斯方块小游戏制作,直接源代码分享...
这篇文章主要为大家详细介绍了C语言实现俄罗斯方块小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.要先下载一个 graphics.h 的头文件来绘图. 2.初始化窗口:initgraph( ...
- 分享一个蛋疼的俄罗斯方块小游戏
分享一个蛋疼的俄罗斯方块小游戏 空间 转载请注明出处.http://www.cnblogs.com/dave_cn/ 我在Ubuntu 10.04下测试过,可以正常运行.不过界面让人蛋疼. 代码用到了 ...
- 基于深度学习的一款五子棋小游戏
今天分享一个基于深度学习而开发的AI小游戏 简单介绍 这一款基于深度学习的五子棋小游戏的界面是使用Unity开发的,而网络结构是使用keras搭建的. 环境 笔者的环境如下 操作系统 windows ...
- java俄罗斯方块七中图形类_shell中的俄罗斯方块小游戏
搜索热词 俄罗斯方块的shell脚本 #!/bin/Bash # Tetris Game #APP declaration APP_NAME="${0##*[\\/]}" APP_ ...
最新文章
- 六年磨一剑,全时发布音视频会议平台TANG,多款新品亮相
- 动画原理与实现 浅析
- Kali Linux 64位架构安装Veil-Evasion
- 多平台支持:下一步容器技术热点
- STM32+华为云IoTDA,带你设计一个属于自己的动态密码锁
- 广告拦截之easylist和easylistchina订阅地址
- Tomcat 5 5 JNDI Resource 配置
- 阿里辟谣:不会高薪聘请黑阿里网站的人;苹果欲用 iPhone 替代身份证和护照;Python 3.9.0b4 发布| 极客头条
- POJ2826 An Easy Problem?!
- python 模拟用户点击浏览器_浏览器行为模拟之requests、selenium模块
- 【GIS开发】批量下载和拼接地图瓦片(Python)
- Flutter上传多张图片
- YOLO-zht训练-未完待续
- C++基础课 5- 章
- 3分钟弄明白顶级域名二级域名子域名父域名的区别
- newuoa matlab包,PDFO首页、文档和下载 - Powell 无导数优化求解器
- 订票成功,感激涕淋……
- CYCA 2022少儿形体礼仪初级师资班 深圳总部站圆满结束
- python 多因素方差分析_多因素方差分析估计平方和的三种方法
- MATLAB----符号微积分
热门文章
- 巴菲特-芒格-彼得林奇的经典观点梳理
- 彼得林奇的成功投资三——回购+提高股息+无多元化
- 深圳两所新大学,来了!
- html5播放器声音小,页面声音播放(HTML5 embed标签)
- 计算机桌面常见故障,电脑桌面的常见问题及解决办法
- 天地劫一直说服务器在维护,天地劫手游网络连接错误怎么办 天地劫幽城再临网络异常解决方法...
- 开源OA办公平台教程:手机APP指纹认证的配置
- CSS3(新增样式)
- [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
- Python数据分析-google play store的app数据分析