当前位置:   article > 正文

用它,只需几个简单指令就能开发俄罗斯方块游戏!

ios俄罗斯方块快捷指令

随着工业制造技术的发展,HMI(人机界面)的应用场景愈加广泛,在能源、汽车、医疗、工控、充电桩等领域都有涉及。拓普微的智能液晶显示模块,能简单迅速地实现人机交互界面,外部系统只需使用简单的串口指令就能完成复杂的显示。

智能显示模块支持脚本语言,Lua语言规范简练、体积小、易于嵌入使用,所以适用领域非常广泛,很多应用程序、游戏使用Lua作为自己的嵌入式脚本语言。拓普微的智能液晶显示模块利用Lua语言使用简单的指令就能创建出功能丰富的人机界面,大大缩短了产品开发时间。本文将介绍智能显示模块HMT070ETD-C如何通过上位机设计界面与Lua脚本的配合,实现一款家喻户晓的游戏——俄罗斯方块。

 

一、需求分析

1、明确俄罗斯方块游戏规则

游戏会在7种类型的方块(T型、S型、Z型、L型、反L型、线型、方型)中随机生成1种,然后自上往下移动,玩家在方块移动期间通过“上下左右”改变方块降落位置,或旋转方块形状。然后根据定时控制,将方块停留在底部不可移动的位置。最后检查每一行的方块填充是否完整并消除,增加得分。

 

2Lua程序设计

参考俄罗斯方块游戏规则

①定义游戏中必要的数据结构;

②构建相关的处理函数;

③完成游戏的主循环逻辑。

 

3HMI界面设计

由于该设计基于HMI串口屏开发,因此需要考虑:

①界面风格设计;

②方块如何匹配与Lua中的数据结构;

③上下左右按钮如何关联功能;

④得分数据显示刷新。

 

二、Lua程序设计

嵌入至HMI界面的Lua程序主要实现“俄罗斯方块”的以下功能板块:

               

1、游戏场景数据结构

1.1搭建游戏场景

构建函数:function Scene:ctor()

输入:场景名

输出:12x21方块的场景

说明:以数组的形式存储方块显示的数据

 

1.2定义方块数据结构

定义数组:cBlockArray[]

说明:构建三维数组,数组中定义7种方块类型(T型、S型、Z型、L型、反L型、线型、方型),以及7种方块的4个旋转形态。该数组用以下落时的方块刷新显示使用。

 

1.3场景内方块显示与清除

构建函数:function Scene:Set(x,y,value) 

输入:“x,y”输入场景内方块坐标,“value”显示控制,“1”时显示“0”时不显示

输出:方块的显示与清除效果

算法说明:该函数是游戏的基础函数,场景中所有方块的显示与清除通过调用该函数实现。衍生清行、清屏函数有functionScene:ClearLine(y)  、function Scene:Clear()

 

1.4场景内方块坐标获取

构建函数:function makeKey(x,y)

输入:“x,y”输入场景内方块坐标

输出:HMI中对应方块的地址

算法说明:①判断输入的“x,y”坐标是否在符合场景区域;②该函数用以获取方块坐标的实际对应的地址,返回的地址将用于HMI中实际方块的显示清除控制。衍生函数function Scene:Get(x,y)用以判断移动、变形、放置时是否合法。

 

2、游戏功能算法设计

2.1随机生成方块

调用函数:math. random()

说明:随机数学函数选取方块类型生成。

构造函数:functionBlockPrint(index,trans)

说明:将下一个方块信息显示在左侧提示框。

 

2.2方块检查

function RawPlace(index,trans,scene,newX,newY)

输入:方块、形态、场景、X、Y坐标

输出:生成的方块放置到游戏场景后,更新场景

算法及说明:由新的方块进入游戏场景时调用此函数。①对新进入游戏的方块、或移动时方块进行检查,可以放置则更新方块坐标返回True,不能放置则返回False。

 

2.3方块移动(左、右、加速下降)

构造函数:functionBlock:Move(deltaX, deltaY)

输入:方块以及方块的移动方向,“deltaX”左右移动控制,“deltaY”向下移动

输出:移动后的方块位置

算法及说明:对正在下落的方块进行操作时调用此函数。①根据参数“deltaX”和“deltaY”依次对方块中所有坐标左移、右移、下降操作;②调用方块检查函数,判断移动是否合法。

 

2.4方块旋转变形

构造函数:function Block:Rotate()

输入:正在下降的方块

输出:变形后的方块位置

算法及说明:对正在下落的方块进行操作时调用此函数。依据方块类型,调用检查函数,判断变形后方块坐标是否合法。然后更新变形后的方块坐标。

 

2.5定时操作、延时操作

调用函数:hmt.gettick()进行定时,hmt.delayms()进行延时。

说明:这两个函数由HMI库函数提供

hmt.gettick()获取HMI屏幕系统运行时间,返回时间的单位“ms”,此处用以定时使用,如判断按钮长按、方块下降速度控制;

hmt.delayms()为HMI屏幕系统延时函数。输入的时间单位“ms”。

 

2.6、场景中方块下降完成后,检查场景

构造函数 function Block:Check()

输入:游戏场景中的所有方块数据

输出:消除方块后的场景,增加得分,根据得分数调整方块下落时间

算法及说明:当场景中添加方块后,调用此函数。①检查场景中是否存在可以消除的行;②存在时消除,将上方的方块下移相关数量;③刷新得分,调整下落速度。

 

2.7、游戏结束,初始化场景

构造函数 function Block:lifeDown()

输入:游戏场景中的所有方块数据

输出:初始化场景,清空方块,清空得分,初始化方块下落时间

算法及说明:判定游戏结束时调用此函数①执行方块全显函数;②清空全显的方块;③归零得分,调整方块下落时间为初始值。

三、HMI界面游戏界面设计

1、游戏场景设计

设计游戏界面UI,包括俄罗斯方块活动场景,下一方块类型提示区、得分区、下方按键区;

①俄罗斯方块活动场景,方块活动宽高比“12:21”

②下一方块提示区,采用“4x4”矩阵显示

③得分区,显示游戏内取得分数

④下方按钮区,标识“上下左右”4个按钮

 

2、游戏方块设计

模拟像素的产生,使用了变量图标显示单个方块,每个方块使用一个变量地址控制,当变量置1时显示方块,变量不为1时不显示该方块。方块使用图标“”显示。

 

3、按钮功能设计

 模拟“上下左右”按钮控制功能,使用HMI的触摸键功能替代,每个触摸键都关联相应的地址,配合Lua脚本中回调函数,实现游戏中“上下左右”移动及方块变形的功能。

 

4、信息框,下一方块提示及分数显示

显示下一随机方块,随机方块显示使用HMI中的变量图标“”实现,提示区的变量图标数量为“4x4”;得分数使用HMI中的数字控件关联相应变量显示。 

 

总结

上图为《俄罗斯方块》的游戏显示效果,综合测试表现功能运行正常。智能显示模块的芯片处理速度快,期间游戏界面刷新无卡顿,方块变形移动正常,“上、下、左、右”触摸反馈迅速,功能运行稳定可靠,而且上面这些都是在智能显示模块上独立完成,无需外部协助。

在Topway智能显示模块上采用上位机工具结合Lua脚本的开发方式,对于用户进行界面开发和功能设计都大有裨益,实现一些普通串口屏做不到的功能。该方式能充分利用智能显示模块的处理能力,将主板中的一些程序功能移植到Lua脚本中实现,可以减少主板的指令解析处理,降低串口通讯压力,能大幅缩短产品开发周期,节省成本。

演示视频如下:

1.嵌入式系统已经进入了算力时代~

2.你在疯狂屯货,他在悄悄出货,MCU市场上演孙子兵法

3.手把手教你在STM32F4上跑freeRTOS!

4.嵌入式大会演讲人征集:嵌入式AI、RISC-V、物联网、OS与软件测试

5.0Ω电阻可以过多大电流?

6.电路板上的晶振不工作怎么办?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/146436
推荐阅读
相关标签
  

闽ICP备14008679号