寒假在家一起练(5)功能二:俄罗斯方块
该项目为用STM32实现的游戏“俄罗斯方块”。4个按键分别控制变换、下移、左移、右移。当一行消除时蜂鸣器发出声音,姿态传感器感知板子旋转的方向,并自动将屏幕调整到合适观看的角度。
标签
嵌入式系统
北理工yk
更新2021-02-26
1329

内容介绍

经典游戏:“俄罗斯方块“项目:

一、所用开发板资源

  1. 定时器4
  2. LCD——SPI协议
  3. 按键——轮询扫描
  4. MPU6050——I2C协议

二、各模块功能设置

按键

按键为硬件下拉,初始化时只需要保持默认。

FkA4ohYck-XvFO79ocRCZikUjuAg

蜂鸣器:

该项目的板子是无源的蜂鸣器,所以如果我们需要使其发出我们所希望的声音,在引脚上我们要手动设置好点平改变的频率和持续的时间,这样才能使其发出我们希望的声音。

LCD:

从LCD的电路图和stm32芯片的管脚对应下,可以在lcd_init.h和lcd_init.c进行管脚配置,即对结构体变量各个参量进行赋值,即可在屏幕得到相应图形。

Fu8qD6nec5DEvfy_3RVz6ppvwkGdFhRPBVVMw07KBsxfWFFTEV4ugUJ2

FhY_vuYiUmYQBxFGCHHcQTD_8fnl

mpu6050:

mpu6050与姿态。当然,这只是得到了mpu6050的角速度和加速度的原始数据而已,想要知道板子对应的姿态还需要对其进行姿态解算。我在这里采用了以加速度判断角度的方式,通过把bitch,roll,yaw角得出的方式,判断各个姿态,达成了对板子屏幕调整的目的。

Ft4y6CoYLVOmEjB_y48NrnA_jEje

按键检测:

按键检测使用轮询方式进行检测。因为仅仅有4个按键,资源消耗不大,这样操作比较简单。

游戏逻辑主体:

  1. 用23×16的Status数组来显示每一个小区域是否有方块填充。当方块移动时,Status数组值也在一直修改。
  2. 自底向上逻辑思维。左侧方块区域降落的为10×10像素的黑边灰体的方块,右侧NEXT区域为5×5的黑边灰体的方块显示,于是建立Draw_Realbox和Draw_Realbox1两个函数,分别绘制10×10和5×5的方块。用同样的思想,绘制填充色为白色的方格,即是删除了原来的方格,绘制10x10的方格的程序如下所示:FmPT8AF0rNqwAJe1oPxsn5hwbdjl
  3. 有了基本方块,可以用case语句来组成不同的图形。一共设计了19种基本图形,下面是未变换的7种基本图形。Folkznz3GN5YPry8-c8K9sHQtiKW
  4. 碰撞检测:通过图形移动前后Status的sum值是否相同来判断是否发生了碰撞,当发生碰撞时,根据情况判断图形将要消除、停止或者转向游戏结束。

三、程序运行过程

  • 进行延迟、LCD屏、按键、蜂鸣器、I2C控制器、MPU6050的初始化;
  • 清屏、进入初始“Welcome“界面;
  • 按住K1,进入游戏进行界面。从19个图形中选取4个图形,为其在屏幕上显示。其中一个在屏幕左侧下落,其余3个作为将来掉落的,显示在屏幕右侧。四个按键控制正在掉落图形的变换、下落、左移、右移。当判断四周有障碍物时停止移动,当一行满的时候进行消除操作,上面的方块下移,并且蜂鸣器发生声音,右侧Score加1。当右侧Score每加10时,Level加1,图形掉落速度会加快。当图形碰触界面上沿时,游戏结束,进入游戏结束界面(在每一个界面都会调用mpu6050姿态传感器判断屏幕方向,并修改显示至正确的方向);
  • 在游戏结束界面,显示“GAME OVER“和此次游戏获得的分数,按K1键回到Welcome界面,循环以上,继续进行游戏。

四、项目完成功能

  1. 游戏界面显示:共有三个阶段的界面需要显示,分别为:初始“Welcome“界面、游戏进行界面、游戏结束界面。游戏的逻辑功能和手机上的小游戏相似,并提供计分功能。
  2. 根据重力调整时钟位置,LCD屏幕的显示会随着器件的转动而发生相应的改变,从而将屏幕更改到适合观看的角度。
  3. 通过4个按键控制图形的变换、下落、左移、右移。按键对应不同的功能:K1:图形变换、K2:加快下落、K3:图形左移、K4:图形右移。

五、感想与体会

本次项目我收获了很多东西,这是我第一次接触STM32开发板,之前自己只有一些FPGA的开发经验,对于单片机,特别是其底层的寄存器部分很头疼。经过这几周的学习,自己在嵌入式系统开发过程中掌握了很多经验,虽然对底层寄存器级别的实现还了解的不是很清楚,但已经找到了学习的方向。

感谢硬禾学堂给我的这次机会,我会在以后继续努力。希望可以用嵌入式系统实现更多好玩的东西,为未来的生活带来便捷。

附件下载

俄罗斯方块(Brandon_Yang).rar
俄罗斯方块源代码
工程打开方式.txt
“俄罗斯方块”工程打开方式

团队介绍

该项目由北京理工大学杨琨一人独自完成。
团队成员
杨琨
北京理工大学18级电子信息工程专业学生

评论

0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号