一.系统概述

系统以stm32单片机为控制核心,以ST7735R为显示模块,显示俄罗斯方块游戏,有四个按键,进行操作,分别是开始,左,右,翻转并显示下一个方块,当积满一行加一分,到最顶端时游戏结束。

二.仿真概述

1. 进入仿真此时是待启动界面,按下开始按键就能开始进行游戏。

2. 可以看到方块在不断下降,右侧会显示下次出现的方块,另外还会显示分数。通过下方的三个方向控制按键可以控制左右以及反转。

三.程序设计

#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 */
}
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐