基于ARM9的俄罗斯方块设计与实现
2017-06-09黄叶胜
赵 莉,薛 彪,黄叶胜
(陇东学院电气工程学院,甘肃庆阳745000)
基于ARM9的俄罗斯方块设计与实现
赵 莉,薛 彪,黄叶胜
(陇东学院电气工程学院,甘肃庆阳745000)
基于ARM9处理器,在嵌入式系统中研究了俄罗斯方块游戏的设计与实现。硬件方面,引用模块化思想,完成了通讯、显示、人机交互三大模块的设计;软件方面,通过编写C程序,合理配置LCD、触摸屏、I2C寄存器,实现了方块的下左右移、旋转、堆积、消行、记分以及提示操作。最终通过系统调试验证了设计的可行性和有效性。
ARM9;俄罗斯方块;嵌入式系统;触摸屏
众所周知,嵌入式产品在我们生活中随处可见,不论是家用电器、汽车和红绿灯,还是随身携带的手机,现在的生活中嵌入式产品是不可或缺的[1]。ARM Cortex-A9是基于嵌入式系统的一款处理器,因其能与其他Cortex系列处理器以及广受欢迎的ARM MPCore技术兼容,并很好地延用包括实时操作系统(OS/RTOS)、中间件及应用在内的丰富生态系统,从而减少采用全新处理器所需的成本。
俄罗斯方块游戏难易适中、操作简单、使用方便,因而是一款家喻户晓的游戏。国内外学者运用不同的方法展开了广泛的研究,文献[2]和文献[3]分别将迭代和自适应估算的方法引入到俄罗斯方块的设计中,Hoogeboom[4]就俄罗斯方块的构造问题进行探讨,张劲波[5]以JBuilder2005作为开发工具,用Java语言实现俄罗斯方块游戏,马俊伟[6]在VB6.0环境中编写俄罗斯方块程序及其具体设计方法,许晴[7]以Excel 2007为游戏平台,利用VBA及Excel的功能和属性,详细地介绍了俄罗斯方块游戏编写过程,杨孟姣[8]利用Flash和Photoshop软件,结合动作脚本语言Actionscript,设计开发了经典的俄罗斯方块游戏,于龙海[9]等引入变量定义、规范子函数、中断函数编写的结构化汇编语言编程思路至游戏设计中,曾庆维[10]等根据心流理论改进了传统的俄罗斯方块游戏,提出了一种新颖的基于玩家水平的方块产生方法,孟芸[11]等则利用C语言开发俄罗斯方块游戏的设计和实现方法。
本文基于ARM Cortex-A9处理器,在嵌入式系统中研究了俄罗斯方块游戏的设计与实现。通过软硬件结合对其进行研究,其中,硬件方面,引用模块化思想,整个系统由通讯、显示、人机交互三大模块组成;软件方面,通过编写C语言对程序进行编写,从而合理配置LCD、触摸屏、I2C寄存器,实现了方块的下左右移、旋转、堆积、消行、记分以及提示操作。最终通过系统调试验证了设计的可行性和有效性。
1 总体设计
ARM Cortex-A9触摸屏由FT5X06组成,可对其进行任意配置并通过I2C收发信息。该系统首先利用ARMCortex-A9芯片的GPIO寄存器对俄罗斯方块进行整体配置,进而根据LCD屏的大小划分游戏区,最后对游戏的得分情况和方块的运行方向进行控制。总体方案设计方案如图1-1所示:
图1-1 总体方案设计
2 硬件设计
系统的硬件设计由通讯、显示、人机交互三大模块组成。先触摸屏幕,将所采集的消息通过I2C总线发送出去,经过处理器处理产生中断后,由I2C发送到LCD显示屏,实现方块移动、停止等功能。
2.1 通讯模块设计
通讯模块的设计是通过总线来完成的。总线是计算机各种功能部件传送信息的通信干线,它可以划分为数据、地址及控制总线,可用来传输数据、数据地址以及控制信号。总线是计算机的各个部件之间传送信息的通道,其目的是使各个部件功能相通。
I2C总线是来连接控制器和外围设备的,I2C通过串行数据(SDA)与串行时钟(SCL)连接到总线来传递信息,从而实现对触摸位置坐标的接收和发送,I2C的SDA和SCL数据传输的关系如图2-1。
图2-1 SDA与SCL数据传输关系
图中,SDA由高电平切换到低电平,同时SCL为高电平时,称为起始阶段;SDA稳定在高电平或低电平时,称为工作阶段;SDA由低电平切换为高电平,且SCL为高电平时,称为工作停止阶段。I2C工作的流程图如图2-2所示。
图2-2 I2C流程图
2.2 显示模块设计
显示模块由LCD液晶显示器完成,LCD通过TFT上的信号与电压改变来控制液晶屏的转动方向,从而控制每个像素点偏振光的出射是否达到显示的目标。利用此来绘制游戏界面及俄罗斯方块的图案,也可利用像素点找到屏幕上相应的坐标从而控制俄罗斯方块的方向。
根据RGB三色可以对所画图形添加颜色,而所用LCD的RGB配置的地址是[255,255,255],可以通过改变地址对三色的深浅混合来配置成不同颜色的方块。
2.3 人机交互模块设计
人机交互模块是通过触摸屏完成的,系统首先通过I2C接口完成触摸屏触摸的读写,从而获取触摸的位置Cotex-a9,本设计所用的触摸屏是多触点电容屏ft5x06,ft5x06,触摸的过程如图2-3所示:
图2-3 ft5x06实现触摸过程
3 软件设计
软件设计是通过配置LCD、触摸屏、I2C的寄存器实现的,软件编写由C程序来完成,而俄罗斯方块的旋转和叠加则是通过一些简单的算法来实现的。
3.1 界面设计
为了游戏者使用方便,将界面分为两部分,一部分是游戏区,另一部分是触摸控制区。游戏区左边为正在运行的游戏,右边为记分和即将下落方块的提示区。触摸控制区包含方块的旋转、下转、左转、右转的四个触摸控制键。由于C语言中的数组展开后是个平面行,所以可将每个元素对应游戏中的小方块,依据该思想可利用数组对方块进行选择。通过调用已编写好的绘画代码,来绘制游戏中的小方块,方块的大小则根据游戏界面的大小来确定,方块的装饰根据RGB的配置来完成。由于游戏的小方块在界面上与在坐标轴上是类似的,且数组中的元素可等效成在坐标轴中的X、Y,因此可利用5X5模型的坐标轴绘制俄罗斯方块模型。
3.2 俄罗斯方块的控制设计
俄罗斯方块的控制设计是利用中断函数来实现的,所要完成的功能是:游戏者对触摸屏进行触摸操作后,I2C总线接收该数据信息,系统通过合理配置,获取当前(x,y)坐标值,此时,分别与预先设定好的右键、左键、下键的初始(x,y)坐标值比较,从而相应地执行方块的右移、左移、下移和旋转。触摸屏配置程序如下:
#include
#include
#include
#include
#include
void tp_int_init(void)
{
GPX1CON |=0xf 《24; //GPX1_6 [24:27] EXT_INT41
EXT_INT41CON &=~(0x7 《24);//[24:26]
EXT_INT41CON |=0x3 《24; //irq's trigger is failing edge
EXT_INT41_FLTCON1 |=0xff 《16;
EXT_INT41_MASK &=~(1 《6); //enable irq
iic1_init(9527);
irq_request_cpu0_(TP_IRQ,do_tp,LEV);
}
3.3 消行加分
消行加分功能是整个游戏设计的关键,游戏者所得分数在游戏区右上部分显示,是利用二维数组中元素与坐标轴的对应关系来完成0到9的自然数绘制。定义具有延时功能的函数,使方块每隔一秒向下移一格,每下移一格会在前一格刷上与界面相同的颜色,从而完成方块的下移。利用一个二维数组进行操作,具体可将方块下落到底部时所对应的坐标轴在二维数组中的元素定义为1;由于游戏界面的坐标轴和二维数组的X、Y轴是相反的,当方块左右移动或下移时,它的下一个位置(二维数组在该位置所对应的元素为1)有方块,则方块不能移动。
判断某行是否满行,利用方块下落的位置所对应的Y轴(即二维数组的X轴)和X轴(即二维数组Y轴)的二维数组中元素是否全为1,若全为1,随即消除该行,再将消行前二维数组中减一的元素复制至该二维数组中,完成后将该数组中元素全设为零。每消一行在所显示分数的三维数组下标加一。
当方块叠加至界面顶部时,标志游戏结束,同时在游戏界面会显示“GAME OVER”(游戏结束)标示符。游戏结束的设计是将界面对应的二维数组的X轴(即游戏界面的Y轴)设为0,判断该数组中的元素是否出现一个1,如果有,意味着俄罗斯方块的堆积到了界面最顶部,那么游戏结束。消行前和消行后加分实物图分别如图3-1,3-2所示:
图3-1 消行前实物图
图3-2 消行后加分实物图
4 设计实现
本设计的实现由五个触摸屏按键完成,顶端的键实现游戏开始,上键实现方块的旋转、下转,左右键分别实现方块的下左右移动。
4.1 进入游戏界面
在Linux系统中将uboot配置烧写到SD卡中,启动ARM板对已烧写好的SD卡进行驱动。Bootloader在操作系统启动之前执行一段代码程序,目的是初始化硬件设备并创建内存空间的映射表,从而建立适合的软硬件环境,最终来调用系统的内核实现启动操作系统的功能。
同时在操作系统中编写Makefile,执行make将所写代码进行编译,并将PC机上的串口与ARM板对应的接口连接,进入minicom界面修改部分参数,将修改好的参数保存并进入minicom。利用dnw命令将已编译好的驱动模块镜像到ARM板中,执行后ARM板上的LCD显示屏上会显示“开始游戏”标示符,点击“开始游戏”,进入游戏界面。
4.2 游戏开始
进入游戏界面后会显示出已降落俄罗斯方块,同时分数界面显示0,即将下落方块的模型提示,控制界面上还标有上下左右方向的按键,即可对方块进行方向控制。游戏开始实物图如图4-1所示:
图4-1 游戏开始实物图
4.3 游戏结束
显示屏上若出现“GAME OVER”即标志游戏结束,若游戏者再次进入游戏挑战,可点击上键重新开始,否则把开发板关掉或退出minicon。
5 结束语
本文设计出一款基于ARM9的俄罗斯方块游戏,完成了游戏的代码、ARM板上的LCD驱动、I2C总线以及触摸屏驱动的代码编写等,并将编写好的代码进行编译,同时烧写至ARM板上稳定运行。文中详细描述了俄罗斯方块游戏的硬件、软件设计及实现过程,最终实现了方块的下左右移、旋转、堆积、消行、记分以及提示等一系列功能。
[1]郭晓慧.嵌入式系统概述[J].电脑知识与技术,2009(24):6719-6720.
[2]B Scherrer,M Ghavamzadeh,V Gabillon,B Lesner,M Geist.Approximate modified policy iteration and its application to the game of Tetris[J].Journal of Machine Learning Research,2015(1):1629-1676.
[3]S Phon-Amnuaisuk.GA-Tetris Bot: Evolving a Better Tetris Gameplay Using Adaptive Evaluation Scheme[J].Neural Information Processing,2014(8836):579-586.
[4]Hoogeboom H J,Kosters W A,How to construct Tetris configurations[J].International Journal of Intelligent Games & Simulation (IJIGS),2004(3):94-102.
[5]张劲波,吴华杰.基于J2SE的俄罗斯方块游戏[J].电脑知识与技术,2006(32):14-18.
[6]马俊伟.利用VB开发俄罗斯方块游戏[J].电脑编程技巧与维护,2009(21):75-78.
[7]许晴.用Excel VBA编写俄罗斯方块游戏[J].电脑编程技巧与维护,2009(15):32-35.
[8]杨孟姣.基于Flash的俄罗斯方块游戏设计与实现[J].计算机时代,2011(8):20-21.
[9]于龙海,罗辰杰,王晓萍,等.俄罗斯方块的结构化汇编语言程序设计[J].单片机与嵌入式系统应用,2012(2):56-62.
[10]曾庆维,冯镍.一种基于玩家水平的俄罗斯方块游戏[J].软件导刊,2014(1):26-28.
[11]孟芸,朱肖安,罗刘敏,等.基于C语言的俄罗斯方块的设计与实现[J].硅谷,2014(23):48-52.
【责任编辑 朱世广】
The Design and Implementation of Tetris Base on ARM9
ZHAO Li,XUE Biao,HUANG Ye-Sheng
(CollegeofElectricalEngineering,LongdongUniversity,Qingyang745000,Gansu)
Base on ARM9 microprocessor in the embedded system,this paper researches the design and implementation of a game named Tetris. In the aspect of hardware,the design of the three modules is complemented with the introduction of modular thought,including the communication module,the display module and the human-computer interaction module. In the aspect of software,by writing C program,the rational allocation of LCD,touch screen and the I2C registers,Tetris achieves the following functions such as moving,rotation,accumulation,elimination the line,scoring and reminder. Finally,the feasibility and effectiveness of the design are verified through system debugging.
ARM9;Tetris;embedded system;touch screen
1674-1730(2017)03-0011-04
2016-05-20
赵 莉(1987—),女,甘肃华池人,助教,硕士,主要从事控制系统的故障诊断与容错控制研究。
TM202
A