谷动谷力

 找回密码
 立即注册
查看: 1816|回复: 0
打印 上一主题 下一主题
收起左侧

【RT-Thread】ART-Badge V2.0 之俄罗斯方块开发

[复制链接]
跳转到指定楼层
楼主
发表于 2022-2-8 22:58:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunsili 于 2022-2-8 23:01 编辑

【RT-Thread】ART-Badge V2.0 之俄罗斯方块开发                

思路

在看到 ART-Badge V2.0 支持了 2048 小游戏之后,萌生了制作一个 俄罗斯方块的小游戏,毕竟是童年的经典。
整个工程是在原有的 ART_Game 工程的基础上进行开发的。
在游戏列表中添加跳转的页面选项:card1 中添加 panel4 以及 imagebox3 的子控件,用于列表中游戏的选择。
在 JS 中添加 游戏名称,以及跳转页面的代码
之后就新建页面(Game_Tetris)完全由自己开发了

界面设计

其实界面没有一点美感可言,都是方框直接堆积而成的,
不过考虑到一些重复的工作(一些方格的绘制),看到界面是 XML 格式的,就直接吧这些重复的方块使用 python 生成输出,然后直接放在了 XML 里,(不建议这样使用,这样可能有很多问题,不详细说明)

整体思路

说白了俄罗斯方块其实很简单,七种方块随机出现,随机方向,从顶部落下,可以左右下移动,可以旋转方块,一样的一行消除得分。只要把这些事情考虑清楚就可以了
一些函数的功能,
reduceMatrix 去除全为零的行和列:简化之后的一些碰撞的判断,方便旋转之后的显示,
rotateMatrix 旋转方块:分别以90、180、270旋转用于手动旋转还有显示下一个方块时随机显示方块
nextTetrominoDisplay 随机显示下一个出现的方块
fillColor 填充颜色 :用于填充并显示有两个功能,1、将消失的方块恢复底色。2、将方块新走到的地方填充为方块的颜色(这里有优化的空间,例如:将两次不改变的方块颜色不做处理)
fillBlock 对一整个“棋盘”做一个占位处理,这里仅一个方块结束时才进行占位填充,为了之后进行一个方块的结束判断,以及消除一行时的判断
isDeleteRow 判断哪一行要删除,通过 fillBlock 函数的填充去判断
deleteRow 删除行通过 isDeleteRow 判断出要删除之后,去删除该行,并把上面行的方块向下填充
blockEnd 判断一个方块下一个位置是否结束(针对的是方向向下、向左、向右)还有旋转的下一个位置是否碰撞
定时器:方块的自动向下移动,
最后下载这里就不细说了,相信大多说有 ART-Badge V2.0 的都是去过现场体现过下载的(其实我没去,哈哈哈)               

1、上键:方块旋转
2、下键:方块下移
3、左键:方块左移
4、右键:方块右移
最后这里有一些小问题还未完善

虽然我已经尽力在优化,但还是有一些可以优化,未优化完全的部分
1、在方块移动和变形时,目前使用的是先将该方块对应控件改为默认颜色,然后再填充移动或变形后的方块,其实同种前后都一样的颜色没有必要先改为默认色,然后再填充
2、在删除行时,使用的是一行一行的删除,同时消除多行的时候,也是一行一行的删除,可以优化
3、在旋转后如果超出边界或重叠到现有方块,将会无效果,不旋转,可以优化,可以放下旋转后的方块的话,就贴着边界或现有方格。
4、目前多行消除,不会有额外的得分,待优化
5、界面待优化,太丑了
望大家有兴趣的一起开发完善呀!

代码仓库 :

https://github.com/pk-ing/ART_Game


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-18 12:47 , Processed in 0.079927 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表