
一.前言 这个俄罗斯方块同样也是DIY项目中的一个,和上一篇stm32贪吃蛇实现的过程一样,只需要一个.h和一个.c文件即可,与平台无关,根据俄罗斯方块中的数据,自行在目标显示设备上进行显示即可,非常方便。5 w& X; K+ q0 k! x# O6 e6 | 这个俄罗斯方块的实现过程是基于我在FPGA实现俄罗斯方块设计思想来进行的。直接点,就是将Verilog代码重新用C语言写了一遍。(#.#)9 [* h" e1 h+ x, h. I 二. 函数调用介绍 函数的使用也是异常的简单,只需要按顺序调用两个函数即可。在运行之前先调用初始化函数,然后再每个1s(多少时间间隔可以自行设置)调用一下游戏函数5 B' W2 Y3 K5 R v4 ~9 Y8 g ![]() / Q* C! \; W- g# _3 {9 T5 Z9 L 我的主函数如下。 先对屏幕进行清屏,然后俄罗斯方块初始化,开始定时器4* t; f/ L: N9 U& r 通过定时器3读取按键的值,然后根据按键的状态,进行相应的操作 }5 y1 M( r6 ?; _ 通过定时器4,产生TetrisFlag标志,表示下落一格(为什么要放在这里,不直接在TIM4中调用呢?原因如下 : 下落是对当前图形中的数据进行操作,移动和变换也是,如果没有明确的执行顺序的话,可能某个时间段会同时对其进行操作,从而出现bug) ![]() ' E1 z/ c. D6 d4 f4 o9 j 三. 核心函数介绍7 y8 ^- n. w) V. _) E7 v TetrisInit()游戏初始化,刚开始对存储地图进行初始化,全部赋值为0,然后生成一下下一个图形,然后更新一下当前图形,再吃更新一下下一个图形。当前图形是通过下一个图形来赋值的。所以这里需要使用两个GenerateNext,然后是一些显示的函数。4 X) k$ \, }; {: n! S" c* O, C , e, Y' o8 M! @% s, l, A ![]() TetrisGame()游戏函数 ,首先判断是否达到可以存储了,然后是的话,就继续消行判断,游戏介绍判断,以及更新当前图形,和生成下一个图形。如果没有的话,方块就下落一格。其他的都是与显示相关的操作。- r- k7 v5 f$ h ) O3 Z. f( j& W% r- w. ^/ @7 d. c ![]() ( G' @( Q0 f1 A& f _; P Rotate()旋转函数,旋转操作是直接套用Verilog的实现方式,将每一次旋转坐标的变化情况,都计算出来,然后写入。这部分也是是一个比较繁琐的事情。 & H* v, x% N7 Q; O' p7 I ![]() - d) [9 S% G1 q p! E 其他的函数我觉得都很容易实现,就不多介绍了,想学习的可以自行下载,如果有不明白的,可以微信公众号私聊我。 最后看一下.h函数吧! e2 w% i; ~5 H$ H ![]() * i( A: L! J# p2 I. k |
游戏是个好想法,我看创客秀也有这个# I( f# i% S* K3 O( U& i& Y' Z |
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南