一.系统概述
系统以stm32单片机为控制核心,以ST7735R为显示模块,显示俄罗斯方块游戏,有四个按键,进行操作,分别是开始,左,右,翻转并显示下一个方块,当积满一行加一分,到最顶端时游戏结束。
二.仿真概述
- 进入仿真此时是待启动界面,按下开始按键就能开始进行游戏。
- 可以看到方块在不断下降,右侧会显示下次出现的方块,另外还会显示分数。通过下方的三个方向控制按键可以控制左右以及反转。
三.程序设计
#include "main.h"
#include "lcd.h"
#include "stdlib.h"
SPI_HandleTypeDef hspi1; // SPI句柄
TIM_HandleTypeDef htim2; // 定时器TIM2句柄
void SystemClock_Config(void); // 系统时钟配置
static void MX_GPIO_Init(void); // 引脚初始化
static void MX_TIM2_Init(void); // 定时器TIM2初始化
static void MX_SPI1_Init(void); // 硬件SPI初始化
void RefreshScore(void); // 刷新得分显示
void RefreshModelCount(void); // 刷新产生方块的个数显示
void RefreshNextModel(void); // 刷新下一个方块的提醒
void RefreshThisModel(void); // 刷新当前操作的方块
void GameInit(void); // 游戏参数初始化
void GameBegin(void); // 刷新开始游戏界面
void GameResart(void); // 重新开始游戏
void GameOver(void); // 游戏结束界面
int HeightCount(void); // 行高计算
int isDown(void); // 判断是否可以下落
int isLeft(void); // 判断是否可以左移动
int isRight(void); // 判断是否可以右移动
int isSpin(void); // 判断是否可以变形
void UpdateFlag(void); // 更新存储当前屏幕颜色的数组
void overJudge(void); // 游戏结束判断执行
uint16_t eliminateCubeLine(void); // 消除并返回消除行数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_SPI1_Init();
LCD_Init(); // 屏幕初始化
GameInit(); // 游戏参数初始化,刷新主界面
while (1)
{
/* USER CODE END WHILE */
count++; // 随机数种子控制
if(count >= 1000)
count = 1;
}
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
}
24-32f-70