- 【48812】今朝装饰:不忘初心诚信为本;服务至上打造标杆!
- 【48812】小尼宅配 家装必定要注意这5个细节!
- 中国乙丙橡胶EPDM密封条行业发展监测分析与未来市场发展的潜力预测
- 奔驰E发动机自燃全国召回万余辆 原因深度解析
- 今日更新-厨卫频道-万维家电网
- 人才市场不接受个人携带的档案怎么办
联系人: 赵先生
手机: 13930904978
电话: 0319-5536156
邮箱: qhtianyu888@www.lnzxsyczx.com
地址: 河北省清河县泰山北路1178号
1984 年,一位名叫阿列克谢·帕基特诺夫(Alexey Pajitnov) 的工程师,在其时的苏联科学院核算机中心工作。他的工作使命是测验新硬件设备的兼容性,比较单位分配的正式使命,更招引他的是研讨怎么运用核算机进行文娱。为此,帕基特诺夫开端测验在核算机上开发一些简略的游戏,经过一段时间的测验后,他从一款拼图游戏上取得了创意,考虑让不同形状的图形顺次下落,在矩形底部堆叠起来,使之排列成完好的一行后消除。在别的两位伙伴的帮忙下,帕基特诺夫在Electronika 60 核算机上完成了这款名为“Tetris”(俄语:Тетрис)的游戏,由于这个类型的核算机没有图形接口,所以游戏只运用空格和实心方块来表明形状(见图 1)。
依据另一位当事人的回想,“Tetris”这个单词是阿列克谢自己创造并坚持运用的,来自反映俄罗斯方块图画根本结构的“四”(希腊语:tetra)和阿列克谢自己最喜欢的运动“网球”(tennis)的组合。今日咱们更习气称号这个游戏为《俄罗斯方块》。
1985 年,《俄罗斯方块》的开发者之一 ——瓦丁·格拉西莫夫在 MS-DOS 下移植了《俄罗斯方块》(见图 2),伴随着 PC 的推行,游戏得以敏捷遍及。
关于“80 后”来说,图 3 所示的《俄罗斯方块》掌上游戏机承载了许多高兴的回想。
我这次运用ESP32 调配 ILI9341TFT LCD 来制造一个《俄罗斯方块》掌上游戏机,挑选的硬件如附表所示。
硬件中最为杂乱的是 ILI9341 TFT 显现屏,它运用 SPI 接口进行通讯。丝印上的 SCL 和 SDA 分别是 CLK 和 MOSI(显现屏能够看作一个单纯的输出设备,因而MISO 是能够省掉的);RES 用于显现屏复位,在初始化显现屏时是必需的;DC用于告诉显现屏当时传输的是数据(Data)仍是指令(Command);CS 是 SPI 接口用于片选的信号,假如当时 SPI 总线上还有其他设备,能够用于选中需求的通讯设备;BLK 用于操控显现屏背光是否敞开,在这个项目中没有封闭显现屏的需求,因而直接悬空,显现屏会一向坚持背光翻开的状况。
确认运用的硬件之后,就能够开端着手规划电路了,我运用立创 EDA 制作电路图和 PCB,成果如图 5、图 6 所示。能够看到电路很简略,除了前面说到的 TFT 显现屏便是 PS/2 摇杆,后者输出 2 路模拟信号和一个数字信号,分别是x 轴和y 轴坐标、按键信号。
立创 EDA 供给在线预览东西,PCB 制作完成后能够直接检查终究作用(见图 7)。
硬件规划完成后即可进行软件规划,比较硬件,软件规划要杂乱得多。代码全体能够看作两部分,一部分是在 screen[Width][Height]数组中核算界面的形状, 代码在Get Next PosRot() 和 Revise Screen() 函数中;别的一部分是经过 ILI9341 TFT 显现屏将前面的数组显现出来,代码在 Draw() 函数中。这样规划的优点是逻辑和硬件别离,便于调试和移植到不同显现接口的设备上。
代码中最重要的数据结构是关于形状的寄存。游戏有 7 种形状(见图 8),能够看到每种形状都由 4 个方块组成,因而能够用方块的坐标表明形状。
比方,图 8 所示的这个形状,以记载坐标的方法,可用 {{-1,1},, ,} 来表明。
当它旋转后, 变成图9所示的形状,以记载坐标的方法,可表明为 {,, ,}。
详细到代码中,我用 blocks[ ] 数组记载了每一种形状的悉数改换成果,旋转便是指向下一个内容。例如 blocks[ ] 数组中的一个形状界说如下:
其间结尾处的深绿色1表明这个形状的色彩索引,浅绿色2表明这个形状有 2 个形状。{{-1,0},, ,}对应图10所示的形状,其间的 x 表明 (0,0) 这个原点。
了解了上面的数据结构,就不难理解GetNextPosRot() 函数了。这个函数的功用是放置重生成形状、呼应按键动作(比方,左右移动和旋转)和触发下落。游戏的难度不同体现为图形不同的下降速度。游戏依据当时积分的不同运用不同的下降速度,详细代码在 GetNextPosRot() 函数中。
Score2Level() 函数回来当时分数对应的延时,当时分数越高,下落速度越快。
ReviseScreen() 函数处理下落的进程,此外计分功用也在该函数中:在消除行时,依据一次性消除的行数核算分数,详细在 DeleteLine() 函数中。每次取得的分数 = 消除层数的平方。
此外,《俄罗斯方块》还要具有显现“下一个图形”的功用。为此,我在 Draw()函数中完成了对应的制作“下一个图形”的功用。这里有特别需求留意的当地,比方, 咱们定 义了一个 image[20][20] 图画,可是想将它里边 10×20 的内容显现出来,是不能够直接运用 tft.fillImage() 的,会呈现紊乱,由于这个函数会默许将显现Buffer 认为是 20×20 巨细的。解决方法是创立别的的 Buffer,先把数据存进去,再运用 fillImage() 函数制作。
正版《俄罗斯方块》出售了 1.25 亿份,遭到 50 多个国家和地区的玩家喜欢,有超越50 种言语的版别,运转在街机、家用游戏机、掌上游戏机、PC、手机等几十种游戏平台上。历经近 40 年,小方块的魅力经久不衰,《俄罗斯方块》游戏能够称得上是传奇。
- 上一篇:大数据训练学习面试真题HTML归纳篇
- 下一篇:【48812】以门窗之名为家保驾护航
-
【48812】以门窗之名为家保驾护航
-
【48812】4问木门企业:崔氏密封条的附加值你了解多少?
-
比震楼器还管用的降噪办法专治邻居家的各种噪音
-
【48812】门窗最好的密封胶条——三元乙丙密封胶条
-
窗户密封条哪种好?分享密封条知识
-
2023年值得选购的门窗密封条品牌推荐汇总(建议收藏)什么牌子的门窗密封条好?
-
【48812】2014年我国玻璃胶十大品牌排行榜
-
【48812】2013年我国玻璃胶十大品牌排行榜
-
2024-05-18塑钢门窗密封条的作用 密封条的质量辨别
-
2024-05-18中国铝门窗密封毛条数据监测报告
-
2024-05-16【48812】我国门窗毛条商场剖析及竞赛战略研讨陈述
-
2024-05-15814444资料
-
2024-05-15【48812】数据计算 - 卓创资讯
-
2024-05-14必看!!!毕业生档案处理全攻略