| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 用它,只需几个简单指令就能开发俄罗斯方块游戏! -> 正文阅读 |
|
[嵌入式]用它,只需几个简单指令就能开发俄罗斯方块游戏! |
随着工业制造技术的发展,HMI(人机界面)的应用场景愈加广泛,在能源、汽车、医疗、工控、充电桩等领域都有涉及。拓普微的智能液晶显示模块,能简单迅速地实现人机交互界面,外部系统只需使用简单的串口指令就能完成复杂的显示。 智能显示模块支持脚本语言,Lua语言规范简练、体积小、易于嵌入使用,所以适用领域非常广泛,很多应用程序、游戏使用Lua作为自己的嵌入式脚本语言。拓普微的智能液晶显示模块利用Lua语言使用简单的指令就能创建出功能丰富的人机界面,大大缩短了产品开发时间。本文将介绍智能显示模块HMT070ETD-C如何通过上位机设计界面与Lua脚本的配合,实现一款家喻户晓的游戏——俄罗斯方块。 ? 一、需求分析 1、明确俄罗斯方块游戏规则 游戏会在7种类型的方块(T型、S型、Z型、L型、反L型、线型、方型)中随机生成1种,然后自上往下移动,玩家在方块移动期间通过“上下左右”改变方块降落位置,或旋转方块形状。然后根据定时控制,将方块停留在底部不可移动的位置。最后检查每一行的方块填充是否完整并消除,增加得分。 ? 2、Lua程序设计 参考俄罗斯方块游戏规则 ①定义游戏中必要的数据结构; ②构建相关的处理函数; ③完成游戏的主循环逻辑。 ? 3、HMI界面设计 由于该设计基于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脚本中实现,可以减少主板的指令解析处理,降低串口通讯压力,能大幅缩短产品开发周期,节省成本。 演示视频如下: |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:16:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |