1、基于ARM俄罗斯方块联机游戏设计摘要:俄罗斯方块俄罗斯方块【9】(Tetris, 俄文:)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。也许大家觉得俄罗斯方块有什么好联机的,是这样说没错,但世界上所有的很多事情觉得很无趣的事情确能够成为一个有趣的事情,这样的现象也是常见的,还有我们玩QQ里面的游戏,比如消除游戏,这个不也是联机游戏吗,虽然好像没什么联机性,但却为什么很多人玩。竞争,现在很多人在游戏中为的
2、就是个名次,高分,所以一个联机游戏具有竞争性才是最重要的。对于本次开发的俄罗斯方块游戏除了具有竞争性外,还加入高度的可玩性,玩家之间可以彼此释放技能,比如让对方加速,让对方游戏区域旋转等效果,确实可以瞬间让人觉得一个很乏味很普通的游戏瞬间变为一个很有趣很高端的一个游戏。本文基于ARM下的俄罗斯方块联机的设计与实现进行了研究。首先阐述了俄罗斯方块游戏的发展背景,发展现状,以及发展趋势。分析了开发俄罗斯方块联机软件的必要性和可行性,对开发俄罗斯方块软件进行了需求分析,系统设计,探讨了俄罗斯方块联机软件的开发方法和实现技术。对于本俄罗斯方块算法,下面也将进行详细描述,另外还有用到的QT跨平台的编程语
3、言,以及交叉编译工具链的使用。关键词:QT;ARM;俄罗斯方块;Socket通信。指导老师签名:南昌航空大学东软班 综合报告Tetris online game design based on ARMAbstract: Tetris (Tetris, Ru: ) is a popular global TV game and PSP games, it consists of the Russian Alexei palmer jesters invention, therefore the name. Tetris is the basic rules of movement, rotati
4、on, and put the game automatically output various diamonds make it into a complete one or more lines and eliminate scores. Because it is simple, for young and old, to household names, popular in the world.Maybe you think of any good online Tetris, said yes, but all the things in the world feel very
5、boring things it can become an interesting things, such a phenomenon also is common, and we play the inside of the QQ game, such as the elimination of the game, this is not a online game, too, although not online, but why a lot of people play. Competition, now a lot of people to a place in the game,
6、 good grades, so an online competitive game is the most important thing. For the development of Tetris game in addition to competitive, also to join the high playability, players can release each other between skills, such as to accelerate each other, let the other side effects, such as rotating gam
7、e, can let a person feel a moment very boring very ordinary game into one high end a very interesting game.This article is based on the ARM of the design and implementations of Tetris online were studied. Firstly expounds the development background of Tetris game, development present situation, and
8、development trend. Analyzed the necessity and feasibility of developing the Tetris online software, Tetris software developed for the demand analysis, system design, discusses the Tetris online software development method and realization technology.For this Tetris algorithm is described in detail be
9、low, and use of QT cross-platform programming language and the use of cross compiler tool chain.Keyword:QT; ARM; Tetris;Socket transfer. Signature of Supervisor:学士学位论文原创性声明本人声明,所呈交的论文是本人在导师的指导下独立完成的研究成果。除了文中特别加以标注引用的内容外,本论文不包含法律意义上已属于他人的任何形式的研究成果,也不包含本人已用于其他学位申请的论文或成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式表明
10、。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期:学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权南昌航空大学可以将本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 作者签名: 日期:导师签名: 日期:1.最终纸版材料,需要正式装订,每人1份,需要注意中英文摘要里去掉学生姓名班级指导教师;2.最终电子材料,上传服务器,并刻录光盘两份;3.额外提交学校的纸质版中英文论文摘要各1份(若学生论文成绩达到90分以上,即
11、优秀论文,则需要提交2份),电子版中英文论文摘要各1份,需要注意中英文摘要保留学生姓名班级指导教师;基于ARM俄罗斯方块联机游戏设计摘要俄罗斯方块俄罗斯方块【9】(Tetris, 俄文:)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。也许大家觉得俄罗斯方块有什么好联机的,是这样说没错,但世界上所有的很多事情觉得很无趣的事情确能够成为一个有趣的事情,这样的现象也是常见的,还有我们玩QQ里面的游戏,比如消除
12、游戏,这个不也是联机游戏吗,虽然好像没什么联机性,但却为什么很多人玩。竞争,现在很多人在游戏中为的就是个名次,高分,所以一个联机游戏具有竞争性才是最重要的。对于本次开发的俄罗斯方块游戏除了具有竞争性外,还加入高度的可玩性,玩家之间可以彼此释放技能,比如让对方加速,让对方游戏区域旋转等效果,确实可以瞬间让人觉得一个很乏味很普通的游戏瞬间变为一个很有趣很高端的一个游戏。本文基于ARM下的俄罗斯方块联机的设计与实现进行了研究。首先阐述了俄罗斯方块游戏的发展背景,发展现状,以及发展趋势。分析了开发俄罗斯方块联机软件的必要性和可行性,对开发俄罗斯方块软件进行了需求分析,系统设计,探讨了俄罗斯方块联机软件
13、的开发方法和实现技术。对于本俄罗斯方块算法,下面也将进行详细描述,另外还有用到的QT跨平台的编程语言,以及交叉编译工具链的使用。关键字:QT;ARM;俄罗斯方块;Socket通信。AbstractTetris (Tetris, Ru: ) is a popular global TV game and PSP games, it consists of the Russian Alexei palmer jesters invention, therefore the name. Tetris is the basic rules of movement, rotation, and put
14、the game automatically output various diamonds make it into a complete one or more lines and eliminate scores. Because it is simple, for young and old, to household names, popular in the world.Maybe you think of any good online Tetris, said yes, but all the things in the world feel very boring thing
15、s it can become an interesting things, such a phenomenon also is common, and we play the inside of the QQ game, such as the elimination of the game, this is not a online game, too, although not online, but why a lot of people play. Competition, now a lot of people to a place in the game, good grades
16、, so an online competitive game is the most important thing. For the development of Tetris game in addition to competitive, also to join the high playability, players can release each other between skills, such as to accelerate each other, let the other side effects, such as rotating game, can let a
17、 person feel a moment very boring very ordinary game into one high end a very interesting game.This article is based on the ARM of the design and implementations of Tetris online were studied. Firstly expounds the development background of Tetris game, development present situation, and development
18、trend. Analyzed the necessity and feasibility of developing the Tetris online software, Tetris software developed for the demand analysis, system design, discusses the Tetris online software development method and realization technology.For this Tetris algorithm is described in detail below, and use
19、 of QT cross-platform programming language and the use of cross compiler tool chain.Keywords: QT; ARM; Tetris; Socket transfer.1. 论文研究背景 俄罗斯方块游戏原本是前苏联科学家阿列克谢帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。Game Boy版的俄罗斯方块在日本卖出424万套,是Game Boy史上卖最好的游戏。海湾战争时,也是前线美军最常拿消磨时间的游戏之一。由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来
20、作为游戏程序设计的练习题材。俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。2. 论文研究意义该游戏是一款基于ARM平台的游戏,不仅在ARM平台下运行,Linux和window下都能够运行。所用到的技术都是和嵌入式系统相关。嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设
21、备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。3. 基于ARM俄罗斯方块联机的系统设计3.1. 硬件方案设计CPU 处理器- Samsung S3C2440A,主频400MHz,最高533Mhz
22、SDRAM 内存- 在板64M SDRAM- 32bit 数据总线- SDRAM 时钟频率高达100MHzFLASH 存储在板 256M Nand Flash, 掉电非易失(用户可定制256M/1G,批量采购升级为1G Flash加60元!)在板2M Nor Flash,掉电非易失,已经安装BIOSLCD 显示- 板上集成4 线电阻式触摸屏接口,可以直接连接四线电阻触摸屏- 支持黑白、4 级灰度、16 级灰度、256 色、4096 色STN 液晶屏,尺寸从3.5 寸到 12.1 寸,屏幕分辨率可以达到1024x768 象素;- 支持黑白、4 级灰度、16 级灰度、256 色、64K 色、真彩色
23、TFT 液晶屏,尺寸从3.5 寸到12.1 寸,屏幕分辨率可以达到1024x768 象素;- 标准配置为 256K 色240x320/3.5 英寸TFT 真彩液晶屏,带触摸屏;接口和资源- 1 个100M 以太网RJ-45 接口(采用DM9000 网络芯片)- 3 个串行口- 1 个USB Host- 1 个USB Slave B 型接口- 1 个SD 卡存储接口- 1 路立体声音频输出接口,一路麦克风接口;- 1 个2.0mm 间距10 针JTAG 接口- 4 USER Leds- 6 USER buttons(带引出座)- 1 个PWM 控制蜂鸣器- 1 个可调电阻,用于AD 模数转换测试
24、- 1 个I2C 总线AT24C08 芯片,用于I2C 总线测试- 1 个2.0 mm 间距20pin 摄像头接口- 板载实时时钟电池- 电源接口(5V),带电源开关和指示灯系统时钟源- 12M 无源晶振实时时钟- 内部实时时钟(带后备锂电池)扩展接口1 个34 pin 2.0mmGPIO 接口1 个40 pin 2.0mm 系统总线接口规格尺寸- 100 x 100(mm)操作系统支持- Linux2.6.32.2 + QtE4.6.3 +Qtopia-2.2.0- WindowsCE.NET 6.0(R3)图1. 开发板示意图3.2. 软件方案设计【1】3.2.1. 客户端模块客户端用户通
25、过和GUI界面进行交互,向客户端通信层发送各种请求,客户端通信层收到请求后发向服务端,最后收到服务端的回应达到消息响应的效果。本项目客户端请求有:登录、注册、举手、暂停、各个技能释放、游戏结果提交、游戏退出等请求。服务端通过这些请求对应的各种协议进行回应各个请求结果,然后客户端接收到后处理各个回应实现通信。以下是客户端模块结构图:图2. 客户端模块结构图3.2.2. 服务端模块服务端,开启端口进行监听,本项目端口为9527,开通监听后,开始监听客户端登录、注册、举手、暂停、各个技能释放、游戏结果提交、游戏退出等请求,然后通过和数据库进行交互并将回应结果发送给客户端。以下是服务端模块结构图:图3
26、. 服务端模块结构图3.2.3. 数据库设计由于涉及信息存储不是很多,所以数据库设计这方面只建立了一个表。表结构如下:表1.序号字段名字段类型说明备注1accountvarchar账号主键2usernamevarchar用户名3passwordvarchar密码4winvarchar总赢数5losevarchar总输数6gradevarchar历史最高分7statusvarchar在线状态1在线,0不在线8roomvarchar所在房间不在房间时为99993.2.4. 整体模块动作时序图4. 时序图4. 基于ARM俄罗斯方块联机的实现技术4.1. QT图形界面编程的信号与槽【5】信号与槽是一种
27、高级接口,应用于对象之间的通信,它是 QT 的核心特性。信号和槽能携带任意数量和任意类型的参数。我们可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接。使用信号与槽,发送者和接收者可以不用知道object的任何信息。在此次毕业设计中,主要应用信号与槽,进行不同窗体之间的通信,实现了重画机制以及在不同窗口中处理从通信模块发过来的请求数据。4.2. Socket通信【6】(1)、Socket通常也称作“套接字”,应用程序通常通过“套接字”以下是TCP通信的三次握手示意图:向网络发出请求或者应答网络请求。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三
28、个步骤:服务监听,客户端请求,连接确认。图5. TCP三次握手示意图(2)、QT中提供的Socket完全使用了类的封装机制,使用户不需要接触底层的各种结构体操作。而且它采用QT本身的信号与槽机制,使编写的程序更容易理解。(3)、Socket和QTcpServer类实现了本次围棋联机软件的客户端和服务器。TCP是一个流式协议,对于应用程序来说,数据是一个很长的流。QTcpSocket继承自QIODevice,可以从QDataStream或QTextStream中读取或写入数据,在此次毕业设计,用的是从QDataStream读取和写入数据。4.3. 多线程编程【3】【4】【6】多线程处理可以同时、
29、运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:l 多线程技术使程序的响应速率更快,因为用户界面可以在进行其它工作的同时一直处于活动状态;l 当前没有进行处理的任务时可以将处理器事件让给其它任务;l 占用大量处理时间的任务可以定期将处理器时间让给其它任务;l 可以随时停止任务;l 可以分别设置各个任务的优先级以优化性能 QT通过三种形式提供了对线程的支持,使得开发轻巧的多线程QT程序更为容易,并能充分利用多处理器及其的优势。它们分别:l 平台无关的线程类l 线程安全的事件投递l 跨线程的信号槽连接4.4. Sqlite数据库编程【2】SQLite是遵
30、守ACID的关系数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp创建的公有领域项目。不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。4.5. 俄罗斯方块算法实现技术【7】 游戏map区域:图形背景采用蓝色背景,20行*10列,用一个指针数组存储 游戏下一个图形提
31、示区域:4行*4列,也用一个指针数组存储 方块种类:一共七种:分别以S、Z、L、J、I、O、T这7个字母的形状来命名I:一次最多消除四层J(左右):最多消除三层,或消除二层L:最多消除三层,或消除二层O:消除一至二层S(左右):最多二层,容易造成孔洞Z (左右):最多二层,容易造成孔洞T:最多二层 方块颜色设置:每个种类方块的数组里面的数分别代表某种颜色,如下方块的定义unsigned char SquareShape4*4=0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0;该定义为田字形方块,1是颜色值的代表,其他方块值分别定义为11,21,31,41,51,61,然后通过sw
32、itch选择哪种颜色。 方块旋转算法:旋转是在上图矩阵中进行旋转的,因为旋转角度是90度,所以可以通过对称变换进行旋转。算法代码如下:for(int i=0;i4;i+)for(int j=0;j4;j+)*(pszTmp +(3-j)*4+i) = *(pszShape +i*4+j); /rotate 90 angle图6. 方块旋转流程图 方块碰撞算法:碰撞检测通过当前方块矩阵与map区域的指针数组进行按位与操作,如果为0则没有碰撞,否则产生碰撞。图7. 碰撞检测 游戏结束判断:如果方块一出来就发生碰撞就说明游戏结束了。4.6. 移植技术【8】所有功能及算法都实现后,在PC端都能够正确编
33、译并执行,但本项目最主要的是能够在mini2440开发板上运行,所以要进行交叉编译。交叉编译过程大致如下:1.安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下(如果已经安装好的话,就可以免去这一步了):#sudo apt-get install gcc g+libgcc1 libg+ make gdb2.下载arm-linux-gcc-3.4.1.tar.bz2arm-linux-gcc-3.4.1.tar.bz2 的下载地址如下:http:/www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4
34、.1.tar.bz23.解压 arm-linux-gcc-3.4.1.tar.bz2#tar jxvf arm-linux-gcc-3.4.1.tar.bz2解压过程需要一段时间,解压后的文件形成了 usr/local/文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下# cd usr/local/ #cp -rv arm /usr/local/现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了4.修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一) 方法一:修改/etc/bash.bashrc文件 #vim /etc/b
35、ash.bashrc 在最后加上: export PATH$PATH:/usr/local/arm/3.4.1/bin export PATH 方法二:修改/etc/profile文件: # vim /etc/profile 增加路径设置,在末尾添加如下,保存/etc/profile文件: export PATH$PATH:/usr/local/arm/3.4.1/bin 方法三:#export PATH$PATH:/usr/local/arm/3.4.1/bin 注:(这只能在当前的终端下才是有效的!)5.立即使新的环境变量生效,不用重启电脑:对应方法一:#source /root/.bas
36、hrc对应方法二:# source /etc/profile6.检查是否将路径加入到PATH:# echo $PATH显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。7. 测试是否安装成功 # arm-linux-gcc -v5. 结论该项目通过基于Socket通信,多线程编程,以及QT图形界面化编程,SQLITE数据库编程,实现了多人间的互相通信功能。本论文在也是通过在韩海峰老师以及苗利老师的指导帮助下进行完成,在该项目开发阶段也遇到过不少问题,问题肯定是会有的,最重要的是碰到一个问题,该怎么去解决这个问题,我平时大多数
37、通过谷歌搜索答案,虽然是答案,但不能一味的照搬,要了解该问题的本质所在,否则在下一次再重现该问题时又不知所措。在此期间我认为以下问题是一个开发者比较头痛的问题1、环境搭建针对于一些开发经验比较高点的来讲,环境搭建是最基本,最简单的事情了,但如果针对一个刚刚接触新环境的来讲,确实是件比较棘手的事情,比如我所用的环境来讲吧,我开始是直接用Qt Creator 来进行代码编写的,但其间遇到各种问题,想去调试,确又要下个什么调试工具,觉得好烦恼,但当我在官网看到有VS版的Qt是,我当时就喜了,将Qt装到VS中去,下个Qt嵌入VS插件。因为本人对于VS来讲还是比较熟悉的,然后进行代码编写,调试工具也是用
38、VS的调试,功能甚是强大,不仅省了时间,也省了更多的劳动力啊。2、框架设计一个高质量的代码不仅是具有高度的防御性,而且让人易懂,所以,设计很重要,对于一个项目刚开始着手来讲,你不可能先去写代码,因为你还没有想好框架,没有定义好各个类以及方法属性,如果你盲目的直接去写代码,也许当你写的一大半时候,感觉某个对方不对劲,要重写!,这时,就一脸茫然了,所以先弄好框架, 要搭建一个好的框架,说得容易,做的难啊,有一本设计模式书比较好,学好设计模式,就可以搭建一个好的框架了。 3、移植因为本项目采用的是跨平台语言编写的,所以要移植到各个系统上进行运行,本项目着重要在ARM上正常运行,交叉编译就少不了,但这
39、个问题确实很让人头痛,主要是QT编译配置的时候要花比较长时间,如果没有成功,又要重新再来。 以上问题主要针对经验较少的来讲,也许经验丰富的对于这些都是小菜一碟了。最重要的还是后期的努力,努力学习才有收获,不断遇见问题,然后不断解决问题。6. 参考文献【1】大话设计模式 下载网址:【2】sqlite,sqlite官网 网址:http:/www.sqlite.org/【3】解析 QT 多线程程序详细设计 上篇,51CTO,2011年6月22日 网址:【4】QT 多线程程序设计,cnblog,老邮局,2011年2月3日 网址:【5】QT中信号和槽浅浅淡淡,51CTO.com,2011年6月20日网址
40、:【6】Qt中采用多线程实现Socket编程,51CTO,2011年6月20日网址:【7】基于Qt的俄罗斯方块与实现网址:【8】交叉编译环境搭建网址:【9】俄罗斯方块简介网址: 录第一章 总 论1第一节 项目名称及承办单位1第二节 研究工作的依据与范围2第三节 简要研究结论3第四节 主要经济技术指标5第二章 项目提出的背景及必要性7第一节 项目提出的背景7第二节 项目建设的必要性13第三章 市场预测与需求分析19第一节 车用生物燃气市场发展分析19第二节 有机肥市场分析23第四章 建设规模与产品方案29第一节 建设规模29第二节 产品方案29第五章 厂址选择与建设条件31第一节 厂址方案31第
41、二节 建设条件32第六章 工艺技术方案40第一节 项目组成40第二节 生产技术方案40第三节 生产设备53第七章 原辅材料供应56第一节 原辅材料供应56第二节 公用设施58第八章 工程建设方案59第一节 总图运输59第二节 建筑结构工程62第三节 公用工程70第九章 环境保护、劳动安全卫生75第一节 环境保护75第二节 劳动安全卫生77第十章 节能与消防84第一节 节 能84第二节 消 防89第十一章 企业组织与劳动定员92第一节 企业组织92第二节 劳动定员92第三节 人员培训93第十二章 项目实施进度计划94第十三章 建设项目招标方案95第十四章 投资估算与资金筹措97第一节 投资估算97第二节 资金筹措98第十五章 财 务 评 价100第十六章 社会影响分析105第一节 社会效益分析105第二节 社会风险分析10622