概述:

本项目基于 正点原子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完成 第一个综合类项目)相关推荐

  1. 硬件课程设计:基于STM32的多功能播放器之小游戏

    4 游戏 4.1 功能介绍 4.1.1 设计思路 为了扩展开发板的应用,同时增加实验的难度和趣味性,我设计了一个类似赛车的小游戏.游戏中共有6条车道,同时有5个障碍物,用按键1和按键2控制赛车更换不同 ...

  2. 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)

    概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...

  3. 基于stm32单片机俄罗斯方块小游戏Proteus仿真

     资料编号:150​​​​​​​ 视频讲解: 150-基于stm32单片机俄罗斯方块小游戏Proteus仿真(源码+仿真+全套资料) 功能介绍: 通过stm32单片机作为主控,在LCD点阵屏上做出俄罗 ...

  4. c/c++ 实现俄罗斯方块小游戏(附全部源码)

    目录 前言 一.游戏截图和全部代码 1.游戏截图 2.源代码 头文件代码 cpp文件代码 二.easyX库安装 三.宏定义.变量的说明 1.方块像素 2.游戏地图区域 3.预生成方块区域 4.玩家数据 ...

  5. c++ 小游戏_C/C++编程新手入门基础系列:俄罗斯方块小游戏制作源代码

    这篇文章主要为大家详细介绍了C语言实现俄罗斯方块小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 1.要先下载一个 graphics.h 的头文件来绘图. 2.初始化窗口:initgraph ...

  6. Python编写俄罗斯方块小游戏

    俄罗斯方块是俄罗斯人发明的一款休闲类的小游戏,这款小游戏可以说是很多人童年的主打电子游戏了,本文我们使用 Python 来实现这款小游戏. 很多人学习python,不知道从何学起. 很多人学习pyth ...

  7. 3d游戏编程大师技巧 源代码_C/C++编程入门基础系列:俄罗斯方块小游戏制作,直接源代码分享...

    这篇文章主要为大家详细介绍了C语言实现俄罗斯方块小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.要先下载一个 graphics.h 的头文件来绘图. 2.初始化窗口:initgraph( ...

  8. 分享一个蛋疼的俄罗斯方块小游戏

    分享一个蛋疼的俄罗斯方块小游戏 空间 转载请注明出处.http://www.cnblogs.com/dave_cn/ 我在Ubuntu 10.04下测试过,可以正常运行.不过界面让人蛋疼. 代码用到了 ...

  9. 基于深度学习的一款五子棋小游戏

    今天分享一个基于深度学习而开发的AI小游戏 简单介绍 这一款基于深度学习的五子棋小游戏的界面是使用Unity开发的,而网络结构是使用keras搭建的. 环境 笔者的环境如下 操作系统 windows ...

  10. java俄罗斯方块七中图形类_shell中的俄罗斯方块小游戏

    搜索热词 俄罗斯方块的shell脚本 #!/bin/Bash # Tetris Game #APP declaration APP_NAME="${0##*[\\/]}" APP_ ...

最新文章

  1. 六年磨一剑,全时发布音视频会议平台TANG,多款新品亮相
  2. 动画原理与实现 浅析
  3. Kali Linux 64位架构安装Veil-Evasion
  4. 多平台支持:下一步容器技术热点
  5. STM32+华为云IoTDA,带你设计一个属于自己的动态密码锁
  6. 广告拦截之easylist和easylistchina订阅地址
  7. Tomcat 5 5 JNDI Resource 配置
  8. 阿里辟谣:不会高薪聘请黑阿里网站的人;苹果欲用 iPhone 替代身份证和护照;Python 3.9.0b4 发布| 极客头条
  9. POJ2826 An Easy Problem?!
  10. python 模拟用户点击浏览器_浏览器行为模拟之requests、selenium模块
  11. 【GIS开发】批量下载和拼接地图瓦片(Python)
  12. Flutter上传多张图片
  13. YOLO-zht训练-未完待续
  14. C++基础课 5- 章
  15. 3分钟弄明白顶级域名二级域名子域名父域名的区别
  16. newuoa matlab包,PDFO首页、文档和下载 - Powell 无导数优化求解器
  17. 订票成功,感激涕淋……
  18. CYCA 2022少儿形体礼仪初级师资班 深圳总部站圆满结束
  19. python 多因素方差分析_多因素方差分析估计平方和的三种方法
  20. MATLAB----符号微积分

热门文章

  1. 巴菲特-芒格-彼得林奇的经典观点梳理
  2. 彼得林奇的成功投资三——回购+提高股息+无多元化
  3. 深圳两所新大学,来了!
  4. html5播放器声音小,页面声音播放(HTML5 embed标签)
  5. 计算机桌面常见故障,电脑桌面的常见问题及解决办法
  6. 天地劫一直说服务器在维护,天地劫手游网络连接错误怎么办 天地劫幽城再临网络异常解决方法...
  7. 开源OA办公平台教程:手机APP指纹认证的配置
  8. CSS3(新增样式)
  9. [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
  10. Python数据分析-google play store的app数据分析