HarmonyOS鸿蒙Next开发板Hi3861之俄罗斯方块小游戏(附源码)

HarmonyOS鸿蒙Next开发板Hi3861之俄罗斯方块小游戏(附源码) 一、原理
俄罗斯方块相信大家都玩过,首先把场景分成可移动部分、和固定部分;

固定场景部分大小为16x12, 用16个无符号short(16位)型表示,仅用到低12位;
可移动部分大小为4x12, 用4个无符号short(16位)型表示,仅用到低12位;
所有的方块(19种)有预定义为block[19][4],下一个预告用一个无符号char型(0-18)表示19个其中的一个;
通过row_act(活动方块所在行数)控制活动方块向下移动。

二、显示
显示函数由三部分组成:游戏场景、下一块预告、分数;

重点介绍一下游戏场景部分:
最外层i循环共8次,每次显示16行中的两行;
第二层j循环共12次,每次处理一行中的一个像素;
第三层k循环把第个游戏像素换算成用于显示的4x4个像素

temp = 行数遇到可移动部分 ? 背景+前景 : 背景;
用于显示的像素数据 |= 显性像素? img中的一列 : 不显示;
下一块预告部分与上面类似,相信能举一反三的理解一下;
再简单介绍一下显示分数的部分“void oled_write_num(hi_u8 x, hi_u8 y, unsigned int n, hi_bool zero)"
x y 是要显示的数值所在的坐标,n是要显示的数值,zero是否显示前面的0;

三、方块移动
直接把活动方块进行移动操作即可,左右原理一样;
当然不是!在移动前还要加一些限制:到边界了不能再移动、有固定方块阻挡不能移动
这个最烧脑的就是方块的旋转了,发视频前就差旋转函数没有写了,直到昨天才调到合适,
先看一下基础代码:

首先是声明一个"turned[4]"用于存放旋转后的方块,为什么不直接在原图旋转呢?
第一个循环从低到高到位扫描找到方块所在列,
第二个循环从找到方块的列取4X4进行行列转置,
第三个循环把旋转后的方块更新到当前活动方块。

重点:前面讲了这是一个基础代码,功能实现了,但有一个问题不得不考虑:旋转后干涉吗?干涉怎么办?
解析:除了上面不会干涉,下左右都可能因为旋转干涉,干涉我就不转了呗。
如图旋转会造成方块下移:

因为是左对齐的,所以左边不会存在这个情况,且只有右边有富裕空间刚好利用一下。
最近再检测一下是否与固定方块干涉:

以上条件都满足了,才能执行最后的更新到当前活动方块,否则放弃旋转。

四、按键的实现(重点)
按键用到了两个接口分别是GPIO5和GPIO8,
这两个接口还是有区别的,5#口上接了三个按键,8#口上一个按键,分别指定了中断服务函数:
8#比较简单检测到下降沿进行中断服务程序(方块旋转)即前面讲到的“block_turn()”;
5#稍复杂一点,进行中断服务程序后再进行AD转换,通过AD转换检出是哪一个按键被按下,再进行不同的操作

当不同的按键按下时,会通过AD检测到不同的采样值,可以通过计算得到,也可以通过实际采集得到:
读取端口的模拟量值:
用到了自带的“hi_adc_read”,参数分别是(要读取的端口、接收数据的变量、取N次采样平均结果、基准电压、采样间隔)
这里读的是端口2(见原理图)取4次平均值,自动基准电压,10us间隔,

这里提供计算方法供参考:
当S1按下 采集电压 = 3.3 * 1 / (1+4.7) = 0.578947368V
采集到的值 = 4096 * 1 / (1+4.7) = 718
当S2按下 采集电压 = 3.3 * (1+1) / (1+1+4.7) = 0.985074627
采集到的值 = 4096 * (1+1) / (1+1+4.7) = 1223
以下参考值来源实际采集!

五、自然下降
向下移动就简单多了,直接进行++就OK了。
但是在加之前也有附加条件,是不是到底了?到底了是不是有满足消除条件的行了?会不会已经到顶行了?

8 回复

已经被征服了,牛

更多关于HarmonyOS鸿蒙Next开发板Hi3861之俄罗斯方块小游戏(附源码)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


如何吃透,交个方法吧

最近真好在找这个,我需要

你们太厉害啦,我可不行

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

膜拜呀,请接受我的膝盖

HarmonyOS鸿蒙Next开发板Hi3861是一款基于鸿蒙系统的开发板,适用于物联网设备的开发。俄罗斯方块小游戏是一个经典的游戏,通过Hi3861开发板实现该游戏,可以展示鸿蒙系统在嵌入式设备上的应用能力。

在Hi3861开发板上实现俄罗斯方块小游戏,主要涉及以下几个技术点:

  1. 鸿蒙系统API调用:使用鸿蒙系统提供的API进行图形绘制、按键事件处理等操作。鸿蒙系统提供了丰富的API接口,开发者可以通过这些接口实现图形界面的绘制和用户交互。

  2. 硬件驱动:Hi3861开发板上的硬件资源需要通过鸿蒙系统的驱动进行控制。例如,使用GPIO接口读取按键输入,使用SPI或I2C接口控制显示屏等。

  3. 游戏逻辑实现:俄罗斯方块的核心逻辑包括方块的生成、移动、旋转、消除等。这些逻辑可以通过鸿蒙系统的多任务机制实现,确保游戏的流畅运行。

  4. 源码结构:源码通常包括主程序、游戏逻辑模块、图形绘制模块、按键处理模块等。每个模块负责不同的功能,通过鸿蒙系统的任务调度机制进行协调。

  5. 编译与烧录:使用鸿蒙系统的开发工具链进行代码编译,生成可执行文件后,通过烧录工具将程序烧录到Hi3861开发板上运行。

通过以上技术点的实现,可以在Hi3861开发板上运行一个完整的俄罗斯方块小游戏,展示鸿蒙系统在嵌入式设备上的开发能力。

在HarmonyOS鸿蒙Next开发板Hi3861上实现俄罗斯方块小游戏,首先需要搭建开发环境,包括安装DevEco Studio和配置Hi3861开发板。接着,编写游戏逻辑,如方块生成、移动、旋转和消除等。利用Hi3861的GPIO和PWM功能控制LED矩阵显示游戏画面。最后,通过串口调试和优化代码,确保游戏流畅运行。源码可在GitHub等平台获取,供开发者参考和学习。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!