




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号:学号: 常常 州州 大大 学学 毕毕业业设设计计(论论文文) (2012 届)届) 题题 目目 学学 生生 学学 院院 专业班级专业班级 校内指导教师校内指导教师 专业技术职务专业技术职务 校外指导老师校外指导老师 专业技术职务专业技术职务 二二一二年六月一二年六月 i 基于基于 arm 的俄罗斯方块游戏的开发的俄罗斯方块游戏的开发 摘摘 要:要:随着现代化技术的高速发展,人们的生活已经离不开嵌入式了。在消 费电子领域,嵌入式系统的游戏娱乐功能受到越来越多的关注。本课题是基于 arm 微处理器 s3c2440a 硬件平台,设计并实现了俄罗斯方块游戏。 系统的实现主要分为两个部分。首先,在 pc 机上安装 qt creator 开发软件, 利用 qt 的信号与槽、事件机制等技术,完成俄罗斯方块游戏程序的设计。程序 设计的重点是实现方块的数据存储、移动旋转和消行等功能。然后搭建 qt/embedded 开发环境,嵌入式交叉编译俄罗斯方块游戏程序 生成可执行 文件,并下载到 arm 开发板 mini2440 上运行。 经过测试,整个系统性能良好,满足设计要求。俄罗斯方块游戏通过键盘 进行操作,人机交互效率较高。界面美观大方,功能说明简单完整。研究方案 跟进时代主流,具有重要的现实意义。 关键词:关键词:嵌入式 linux、s3c2440a、qt、俄罗斯方块 ii the development of tetris game based on the arm abstract : with the rapid development of modern technology, peoples lives have been inseparable from the embedded. the entertainment function of embedded system is paid more and more attention in consumer electronic application field.this paper designed and implemented tetris game which is based on the arm microprocessor s3c2440 hardware platform. the realization of the system is divided into two parts. first install the qt creator development software on a pc,and complete the design of tetris game program with the techniques of qts “signals and slots” and the event mechanism.the program focuses on the data storage of boxes and the functions of moving,rotation and removing.then build the development environment of qt/embedded ,embedded cross compile tetris game program to generate an executable file which is downloaded to run on arm development board mini2440. after testing,the system runs quite well and meet the design requirements. tetris game is operated with a keyboard and the man-machine efficiency is very high.it has a pretty interface. the functional description is both simple and complete. research approach keeps with the times and it has important practical significance. key words: embedded linux、s3c2440a、qt、tetris iii 目录目录 摘 要 i abstractii 1绪论.1 1.1 课题研究背景及国内外研究现状1 1.2 课题的提出与意义2 1.3 解决问题的思路、方法以及取得成果2 2需求分析.4 2.1 硬件需求 4 2.1.1 嵌入式处理器4 2.1.2 开发板的选择5 2.2 软件需求6 2.2.2 qt 简介6 2.2.2 qt creator 开发软件.6 2.2.3 vmware 虚拟机 .7 2.2.4 linux 操作系统 .7 2.3 功能需求.8 2.4 游戏界面需求9 2.5 方块图形需求10 3 系统设计11 3.1 qt creator安装与配置11 3.2 模块实现.12 3.3 关键技术实现.13 3.3.1 方块的数据结构13 3.3.2 方块的旋转和移动14 3.3.3 消行16 3.3.4 定时器实现17 3.3.5 ui 设计和游戏区域的绘制.18 3.3.6 键盘处理21 4 移植和测试23 4.1 交叉编译工具安装23 4.2 交叉编译 qt/embedded.23 4.3 下载运行24 5 总结与展望28 5.1 总结28 5.2 展望28 参 考 文 献29 致 谢30 常州大学本科生毕业设计(论文) 第 1 页 共 31 页 1绪论绪论 1.1 课题研究背景及国内外研究现状课题研究背景及国内外研究现状 嵌入式系统是当前发展最快最有前途的 it 应用领域之一,嵌入式技术的发 展正以前所未有的速度影响和改变着我们的生活。人们平常所熟知的手机、摄 像机、游戏机、智能玩具、3d 电视、医疗仪器、汽车电子、工业控制设备、航 天航空设备等都有嵌入式系统。嵌入式系统是二十一世纪科技领域的重大创新, 将推进全球经济社会高速发展。 嵌入式系统在硬件和软件交替发展的双螺旋的支撑下逐渐趋于稳定和成 熟。作为一类特殊的计算机系统,主要由硬件平台、嵌入式操作系统和嵌入式 应用程序构成。硬件平台包括嵌入式处理器和外围设备。嵌入式微处理器是嵌 入式系统的核心部件,是控制、辅助系统运行的硬件单元,所以,嵌入式微处理 器是决定嵌入式系统功能强弱的主要因素,也决定了嵌入式系统的应用范围和 开发复杂度。arm(advanced risc machines)是微处理器行业的一家知名企 业,设计了大量高性能、廉价、耗能低的 risc 处理器、相关技术及软件,技 术具有性能高、成本低和能耗省的特点3。 到目前为止,arm 微处理器及技术的应用几乎已经深入到各个领域: (1)工业控制领域:作为 32 位的 risc 架构,基于 arm 核的微控制器芯 片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制 器应用领域扩展,arm 微控制器的低功耗、高性价比,向传统的 8 位/16 位微 控制器提出了挑战。 (2)无线通讯领域:目前已有超过 85%的无线通讯设备采用了 arm 技术, arm 以其高性能和低成本,在该领域的地位日益巩固。 (3)网络应用:随着宽带技术的推广,采用 arm 技术的 adsl 芯片正逐 步获得竞争优势。此外,arm 在语音及视频处理上行了优化,并获得广泛支持, 也对 dsp 的应用领域提出了挑战。 (4)消费类电子产品:arm 技术在目前流行的数字音频播放器、数字机 顶盒和游戏机中得到广泛采用。 (5)成像和安全产品:现在流行的数码相机和打印机中绝大部分采用 arm 技术。手机中的 32 位 sim 智能卡也采用了 arm 技术。除此以外,arm 微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用9。 arm 的商业模式是开放的,任何厂商都可以购买授权 ,目前,总共有 30 家半导体公司与 arm 签订了硬件技术使用许可协议,其中包括 intel、ibm、lg 半导体、nec、sony、飞利浦和国家半导体这样的大公 司。至于软件系统的合伙人,则包括微软、 sun 和 mri 等一系列知名公司 。 进入 21 世纪之后,由于手机制造行业的快速发展,出货量呈现爆炸式增长, 常州大学本科生毕业设计(论文) 第 2 页 共 31 页 arm 处理器占领了全球手机市场 。由此可见, arm 处理器还具有广阔的 发展空间,将会不断影响和改变我们的生活。 1.2 课题的提出与意义课题的提出与意义 当前,arm 正在与包括 android 在内的所有 linux 联盟合作,致力于从芯 片级至操作系统级两方面统一,降低产品的开发门槛。“arm+linux” 代表 了未来的趋势,标准化的硬件+软件的组合,可以令更多 oem 厂商愿意去做差 异化设计。linux 是开放源代码的操作系统,直接带来的就是开发成本的降低。 另外,linux 不仅在系统资源上占用率较低,在高性能运算上又能媲美 windows,而良好的可扩展性和可维护性也是其优势所在,所以, “arm+linux”毫无疑问成为了嵌入式开发的主流组合6。 qt 是跨平台的应用程序和 ui 框架。它包括跨平台类库、集成开发工具和 跨平台 ide。使用 qt,只需一次性开发应用程序,无须重新编写源代码,便可 跨不同桌面和嵌入式操作系统部署这些应用程序。所以本设计采用先在 pc 机 上实现应用程序的编写,再跨平台移植到 arm 硬件平台上的方法来实现嵌入 式应用程序的开发。 俄罗斯方块(tetris)是一款风靡全球的电视游戏机和掌上游戏机游戏,它 由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移 动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且 消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。俄罗斯方块 曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简 单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭 不想的那个俄罗斯方块时代。由于俄罗斯方块具有的数学性、动态性与知名 度,也经常拿来作为游戏 程序设计的练习题材。 本设计选择开发 “俄罗斯 方块”游戏不仅具有技术上的可行性,而且开发成果也具有相当的现实意义。 1.3 解决问题的思路、方法以及取得成果解决问题的思路、方法以及取得成果 本设计的目的是在 arm 开发板上运行“俄罗斯方块”游戏程序,而硬件 平台选用的是 mini2440 开发板,它采用了 s3c2440 微处理器,这款开发板低 价实用,重要的是 mini2440 开发板已经移植了基于 linux-2.6.32 内核的嵌入式 linux 操作系统,还提供了 arm 版本的 qte-4.6.3,配合用户手册,可以快速入 门。 本设计的研究内容主要分为以下 2 个步骤: 第一,鉴于 qt 的跨平台特性,可以利用 qt 的相关类库,选择在 pc 机上 完成“俄罗斯方块”游戏程序的设计。本设计使用的是 windows 版本的 qt creator 软件,根据官方描述,qt creator 的设计目标是使开发人员能够利用 qt 这个应用程序框架更加快速及轻易的完成开发任务。游戏程序的设计需要解决 几个关键的问题:方块的数据结构、方块的移动、碰撞和消行等。另外由于开 常州大学本科生毕业设计(论文) 第 3 页 共 31 页 发板屏幕分辨率为 320*240,所以窗口界面的大小和布局要特别注意。游戏统 一使用键盘操作,后续还可以扩展诸如计分,难度设置、颜色调节等等的功能。 第二,由于 pc 机是 x86 结构,mini2440 是 arm 架构,所以设计好的游 戏程序必须通过嵌入式交叉编译以后才能在开发板上运行。因此,嵌入式交叉 编译环境的搭建成为了游戏移植过程的关键。qtembedded 是 nokia 公司 的图形化界面开发工具 qt 的嵌入式版本 ,本设计采用的是 4.5.2 版本,配 置环境需要在 pc 机 linux 环境下,linux 系统可以通过虚拟机安装,方便 快捷。交叉编译工具需要提前安装,选用 的是 mini2440 配套的 arm-linux- gcc-4.3.2,接着下载对应 qt/embedded 源码包,解压以后要配置编译参数, 编译源码的过程非常漫长,大概需要 三个小时,之后设置环境变量 ,再通过 嵌入式交叉编译俄罗斯 方块的游戏程序,将生成的目标文件下载到开发板上 运行即可 8。开发板外接 usb 接口键盘后,可以直接对游戏进行操作。 常州大学本科生毕业设计(论文) 第 4 页 共 31 页 2需求分析需求分析 2.1 硬硬件件需需求求 2.1.1 嵌入式处理器嵌入式处理器 嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。 范围极其广阔,从最初的 4 位处理器,目前仍在大规模应用的 8 位单片机,到 最新的受到广泛青睐的 32 位,64 位嵌入式 cpu。嵌入式处理器典型的特点就 是工作稳定性高,功耗较小,对环境的适应能力强,体积小,且集成的功能 较多。嵌入式处理器可以分成 以下几类: (1)嵌入式微处理器 嵌入式微处理器是由通用计算机中的 cpu 演变而来的。它的特征是具有 32 位以上的处理器,具有较高的性能,当然其价格也相应较高。但与计算机处 理器不同的是,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬 件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的 特殊要求。和工业控制计算机 相比,嵌入式微处理器具有体积小、重量轻、 成本低、可靠性高的优点。 (2)嵌入式微控制器 嵌入式微控制器的典型代表是 单片机,从 70 年代末单片机出现到今天, 虽然已经经过了 20 多年的历史,但这种 8 位的电子器件目前在 嵌入式设备 中仍然有着极其广泛的应用。单片机芯片内部集成rom/eprom、ram、 总线、总线逻辑、定时 /计数器、看门狗、i/o、串行口、脉宽调制输出、 a/d、d/a、flash ram、eeprom 等各种必要功能和外设。和嵌入式微处 理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成 本下降、可靠性提高。 (3)嵌入式 dsp 处理器 dsp 处理器是专门用于信号处理方面的 处理器,其在系统结构和指令算 法方面进行了特殊设计,具有很高的编译效率和指令的执行速度。在数字滤 波、fft、谱分析等各种仪器上 dsp 获得了大规模的应用。 (4)soc 片上系统 soc 追求产品系统最大包容的集成器件,是目前嵌入式应用领域的热门 话题之一。soc 最大的特点是成功实现了软硬件无缝结合,直接在处理器片 内嵌入操作系统的代码模块。而且 soc 具有极高的综合性,在一个硅片内 部运用 vhdl 等硬件描述语言,实现一个复杂的系统。 常州大学本科生毕业设计(论文) 第 5 页 共 31 页 arm 属于嵌入式微处理器的范畴,本文 的研究目标是基于 arm 的程 序开发,所以本设计采用 三星公司推出的 16/32 位 risc 微处理器 s3c2440a, 它为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的 解决方案。 为了降低整体系统成本,s3c2440a 提供了一系列丰富的内部设备。 s3c2440a 采用了 arm920t 的内核,0.13um 的 cmos 的标准宏单元和存储器 单元。其低功耗,简单,优雅,且全静态设计特别适合于对成本和功率敏感型 的应用。它采用了新的总线架构 advanced micro controller bus architecture(amba)。 s3c2440a 的杰出特点是其核心处理器(cpu),是一个由 advanced risc machines 有限公司设计的 16/32 位 arm920t 的 risc 处理器。arm920t 实现 了 mmu,amba bus 和 harvard 高速缓冲体系结构。这一结构具有独立的 16kb 指令 cache 和 16kb 数据 cache。每个都是由具有 8 字长的行组成。通过 提供一套完整的通用系统外设,s3c2440a 减少整体系统成本和无需配置额外 的组建。 2.1.2 开发板的选择开发板的选择 目前 arm 开发板在市场上种类繁多,有多种型号与多家厂商可供选择, 对于 arm 的研究前提就是选择一个好的开发板来做开发和学习。mini2440 是 一款真正低价实用的 arm9 开发板,是目前国内性价比最高的一款学习板; 它采用 samsung s3c2440 为微处理器,并采用专业稳定的 cpu 内核电源芯 片和复位芯片来保证系统运行时的稳定性。 mini2440 的 pcb 采用沉金工艺 的四层板设计,专业等长布线,保证关键信号线 的信号完整性,生产采用 机器贴片,批量生产;出厂时都经过严格的质量控制,配合用户手册,可 以迅速掌握嵌入式 linux 和 wince 开发的流程,只要有 c 语言基础的人 一般 2 周即可入门。目前提供的 linux 和 windowsce 5.0/6.0 系统,在技术 和功能上已经达到国内 2440 开发板中最高水平,它们各自的 bootloader 以 及 bsp 均是 100%开放的。 mini2440 开发板的硬件资源主要包含以下几个部分: (1)cpu 处理器 samsung s3c2440a,主频 400mhz,最高 533mhz 。 (2)sdram 内存 64m sdram 和 32 位数据总线。 (3)flash 存储 均为掉电非易失的 256m nand flash 和 2m nor flash。 (4)lcd 显示 标准配置为统宝 3.5 寸真彩 lcd 屏,型号为 w35,分辨率 240x320,带触 摸屏。 常州大学本科生毕业设计(论文) 第 6 页 共 31 页 (5)接口和资源 主要配备了 1 个 100m 以太网 rj-45 接口(采用 dm9000 网络芯片)、 3 个串行口 、1 个 usb host 、1 个 usb slave b 型接口 、1 个 sd 卡存储接口 、系统时钟源和实时时钟等等。 (6)操作系统支持 支持 linux + qtopia-2.2.0+qte-4.6.1(独创双图形系统共存,无 缝切换) 以及 windowsce.net 6.0(r3)。 2.2 软件需求软件需求 2.2.2 qt 简介简介 qt 拥有直观的的 c+类库,qt c+类库提供一套丰富的应用程序生成块, 包含了构建高级跨平台应用程序所需的全部功能。具有直观,易学、易用,生 成好理解、易维护的代码等特点7。 qt 还具有跨桌面和嵌入式操作系统的移植性,使用 qt,只需一次性开发应 用程序,就可跨不同桌面和嵌入式操作系统进行部署,而无须重新编写源代码, 可以说 qt 无处不在。qt 有如下几个重要的特点: (1)使用单一的源代码库定位多个操作系统; (2)通过重新利用代码可将代码跨设备进行部署; (3)无须考虑平台,可重新分配开发资源; (4)代码不受担忧平台更改影响的长远考虑 ; (5)使开发人员专注于构建软件的核心价值,而不是维护 api 。 qt 作为一种跨平台的图形界面开发平台,可以直接建立在简单的帧缓冲驱 动上,并且有良好的可配置、可裁剪特性,因此也经常用在嵌入式系统上。qt 支持一般图形界面系统的由事件驱动的变成模型,并且支持特有的信号与槽的 变成模型,应用非常灵活。qt 拥有丰富的 api 和大量的开发文档,对于用户开 发来说是非常方便的。经常多年的发展,qt 已经不单纯是一个图形界面开发平 台,它对应用变成的各种领域(如网络、数据库等)都提供了自己的支持,功 能非常强大。 2.2.2 qt creator 开发软件开发软件 qt creator 是跨平台的 qt ide, qt creator 是 qt 被 nokia 收购后推出的 一款新的轻量级集成开发环境(ide)。此 ide 能够跨平台运行,支持的系统 包括 linux(32 位及 64 位)、mac os x 以及 windows。在功能方面, qt creator 包括项目生成向导、高级的 c+ 代码编辑器、浏览文件及类的工 具、集成了 qt designer、qt assistant、qt linguist、图形化的 gdb 调试 前端,集成 qmake 构建工具等。 qt creator 主要是为了帮助新 qt 用户更快速入门并运行项目,还可提 高有经验的 qt 开发人员的工作效率。 它的优势主要有以下三个方面: 常州大学本科生毕业设计(论文) 第 7 页 共 31 页 第一,使用强大的 c+ 代码编辑器可快速编写代码 ,语法标识和代 码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折 叠括号匹配和括号选择模式高级编辑功能 。 第二,使用浏览工具管理源代码 ,集成了领先的版本控制软件,包括 git、perforce 和 subversion 开放式文件,无须知晓确切的名称或位置搜索 类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之 间切换。 第三,为 qt 跨平台开发人员的需求而量身定制 ,集成了特定于 qt 的功 能,如信号与槽 (signals /田字形 unsigned char item24*4= 常州大学本科生毕业设计(论文) 第 14 页 共 31 页 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1 ;/长条形 unsigned char item34*4= 0,0,1,0, 0,1,1,0, 0,1,0,0, 0,0,0,0 ;z 字形 unsigned char item44*4= 0,1,0,0, 0,1,1,0, 0,0,1,0, 0,0,0,0 ;/反 z 形 unsigned char item54*4= 0,0,1,0, 0,0,1,0, 0,1,1,0, 0,0,0,0 ;/反 7 形 unsigned char item64*4= 0,1,0,0, 0,1,0,0, 0,1,1,0, 0,0,0,0 ;/7 字形 unsigned char item74*4= 0,1,0,0, 1,1,1,0, 0,0,0,0, 常州大学本科生毕业设计(论文) 第 15 页 共 31 页 0,0,0,0 ;/t 形 游戏过程中,需要产生随机形状方块,这可以通过调用 qt 库函数 qrand() 来实现,qsrand(time(0)配置随机种子,qrand()%7 产生随机数。 3.3.2 方块的旋转和移动方块的旋转和移动 本设计使用了一维数组 0-15 来表示 4*4 网格中的每个单元格,要求方块逆 时针旋转 90 度,可以很容易得到旋转操作的算法。关键实现代码如下: for(int i=0;i0;i-) /从下向上扫描整张网格 for(int j=0;j0;row-) for(int col = 0;colstart(1000); 然后 update()槽每秒被触发一次。start()函数参数改变可以调节触发速率,以此 改变游戏难度,timer-stop()可以随时停止定时器以实现游戏暂停的功能。 这里运用到了信号与槽的机制。信号(signal)和槽(slot)是 qt 编程的一 个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联 系起来。qt 组件有很多预定义的信号,同时,我们也可以通过继承这些组件, 添加自定义的信号。槽则能够响应特定信号的函数。qt 组件有很多预定义的槽, 但是更常见的是,通过继承组件添加你自己的槽,以便你能够按照自己的方式 处理信号。槽和普通的 c+成员函数很像。不同之处在于一个槽函数能和一个 信号相连接,只要信号发出了,这个槽函数就会自动被调用,这个任务是由 connect 函数来实现的。信号与槽的连接示意图 3.4 如下: 图图 3.6 信号与槽的连接示意图信号与槽的连接示意图 槽能够被用于接收信号,也能够像普通函数一样使用。正如一个对象并不 知道究竟有没有别的对象正在接收它的信号一样,一个槽也不知道有没有信号 与它相连。这保证了使用 qt 可以创建真正相互独立的组件10。 定时器溢出有 2 种情况,一种情况是检测到游戏运行结束了,这时候使用 qmessagebox 类成员函数 warning()来弹出警告对话框,点击对话框”yes”可以重 新开始游戏。关键代码如下: qmessagebox:warning(this,tr(“warning“),tr(“game over!“),qmessagebox:yes); 常州大学本科生毕业设计(论文) 第 19 页 共 31 页 另一种情况是方块已经下移到最底下了,这时候需要进行一下几步操作: this-gamearea-nextitem(); /出现下一个图形 int num = this-gamearea-getfullrownum(); /获得已满的行数 this-doscore(num); /显示分数 this-gamearea-gamestart(); /继续游戏 3.3.5 ui 设计和游戏区域的绘制设计和游戏区域的绘制 1、ui 的设计 本设计最终实现好的 ui 界面如图 3.5 所示,游戏界面上并没有使用按钮的 操作,只是通过标签的形式,说明了各个按键的功能。界面左边是游戏区域, 小边框显示的是下一个要产生的方块,游戏过程中,分数和难度数值的动态改 变只要即时改变标签显示内容即可。如下是改变分数值的函数代码: void widget:doscore(int num) score += num*100; this-ui-label_2-settext(tr(“%1“).arg(score);/改变对应标签内容 num 是应该消除的行数,本设计以 1 行 100 分来计算得分,第 2 个标签显 示的就是得分,在程序代码中改变这个标签内容也就相应改变了得分的显示。 图图 3.7 游戏界面示意图游戏界面示意图 界面使用图形窗口设计,widget.ui 在建立工程以后会自动转换为源码文件 ui_widget.h,而在 widget 类构造函数中,调用函数 ui-setupui(this)使得 ui 界 面和 widget 类建立联系,qwidget 类成员函数 resize()用来定义游戏界面大小, 使用 setwindowtitle(tr(“tetris(zhoujunhao)“)设置窗口标题栏的内容 1。 2、游戏的绘制 在 ui 系统中,不同的 widget 会经常发各种消息,通常 ui 系统都会把这些 消息和消息参数规范化,qt 把消息类型和消息参数都封装到 qevent 及其子类 常州大学本科生毕业设计(论文) 第 20 页 共 31 页 中,同时定义了 qobject:event(qevent *e)函数来处理各种 qevent,这就是 qt 的 event 机制。信号通过事件实现,事件可以过滤,事件更底层,事件是基 础,信号是扩展。 当一个事件产生时,qt 通过实例化一个 qevent 的合适的子类来表示它, 然后通过调用 event() 函数发送给 qobject 的实例(或者它的子类) 。event() 函数本身并不会处理事件,根据事件类型,它将调用相应的事件处理函数,并 且返回事件被接受还是被忽略。一些事件,比如 qmouseevent 和 qkeyevent,来自窗口系统;有的,比如 qtimerevent,来自于其他事件源; 另外一些则来自应用程序本身2。 qpaintevent 是个类,继承于 qevent,包含了绘画的事件。当控件本身更新 的时候,绘画事件会发送到控件,对于实例来讲,这种事情一般是遮住他的控 件移动了,导致其需要重绘。void qwidget:paintevent ( qpaintevent * )是虚函 数,只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现 它。这个事件处理器可以在子类中被重新实现来接收绘制事件。它可以是 repaint() 或 update() 的结果。很多窗口部件在当它们被请求时,它们很简单地 重新绘制整个界面。 qpainter 类是在窗口部件上实现绘制的绘图工具类。qpainter 可以绘制从简 单的直线到像饼图和弦这样的复杂形状。它也可以绘制排列的文本和像素映射。 本设计利用 qpainter 类相关成员函数来实现游戏界面的绘制4。 游戏背景的网格可有可无,并不影响游戏的进行,若需要让方块直接下落 到底,增进游戏操作节奏,添加网格背景就能使得方块的位置更加清晰明目, 便于游戏。网格的绘制首先需要使用函数 painter.setpen(qt:dotline)定义绘笔风 格为点线,dotline 就是指由一些像素分隔的点,然后进行绘图。如下代码是绘 制网格区域横线的关键代码; for(int i=0; igamearea_width,i*step); map_row 指网格行数 10,for 循环中从第一行开始到最后一行绘制点线,这里 使用的函数 void qpainter:drawline ( int x1, int y1, int x2, int y2 );绘制从(x1, y1) 到(x2, y2)的直线并且设置当前画笔位置为(x2, y2),利用这个函数快速绘制直线。 网格竖线的绘制方法与此相似。 绘制方块前,用函数 painter.setpen()设定方块边框颜色,用 painter.setbrush()设定画刷用了填充方块颜色,之后扫描整个游戏网格区域,网 格数组中,只要检测到值为 1 就证明有方块,然后利用 qpainter 成员函数 drawrect()绘制矩形就可以了,关键代码如下: for(int i=0;ikey() case qt:key_s : break; case qt:key_p : break; default: qwidget:keypressevent(event); 本设计除了实现几个基本按键操作外,还有一些扩展功能。所有的功能按 键如图 3.6 所示: 常州大学本科生毕业设计(论文) 第 22 页 共 31 页 按键事件 “s”键:开 始游戏 “p”键:暂 停与恢复游戏 “上”键:逆 时针旋转方块 “下”键:方 块加速下移或 者直接落底 “1”到“6” 键:难度切换 “c”键:游 戏界面颜色变 化 “左”、 “右”键:方 块左移与右移 “d”键: “下”键功能 切换 图图 3.8 键盘事件功能说明键盘事件功能说明 这里 key_down 键定义了两个功能,一个是只让方块加速下移一步,另一 个是使方块直接下落到底,通过 key_d 键盘可以对这两个功能进行切换。 key_down 键每次按下都会进行判断,默认功能是加速下移。key_c 键的功能 是使游戏背景区域、方块边框颜色和方块背景填充颜色随机变化,这里只要改 变画刷、画笔、背景填充色等参数就可以达到变色的效果。qt 的颜色设置都是 在类 qcolor 中实现的,qcolor 一般有四个参数,数值范围都是 0255,前 3 个 参数表示红绿蓝三原色,通过自由组合得到不同的颜色,最后一个参数是设置 颜色透明度。另外 key_p 和 key_1key_6 的数字键实现的是暂停功能和对方块 下落速率的调节。具体都是通过对定时器的操作来完成的。 常州大学本科生毕业设计(论文) 第 23 页 共 31 页 4 移植和测试移植和测试 4.1 交叉编译工具安装交叉编译工具安装 在 linux 平台下,要为开发板编译内核,图形界面 qtopia,bootloader,还 有其他一些应用程序,均需要交叉编译工具链。本文使用 arm-linux-gcc 来建立 arm-linux 交叉编译环境,将 arm-linux-gcc 安装到/usr/local/arm/目录下,首先解 压缩源码包,在命令行下输入: tar xzvf arm-linux-gcc-4.3.2.tar 这个命令会在/usr/local/arm/4.3.2 目录下安装 arm-linux-gcc 交叉编译程序, 然后设置环变量指定编译器的路径,命令如下: export path=/usr/local/arm/4.3.2/bin:$path 设置完成后,使用以下命令可以查看 arm-linux-gcc 是否安装成功: arm-linux-gcc v 如果按照成功会显示如下图 4.1 所示信息: 常州大学本科生毕业设计(论文) 第 24 页 共 31 页 图图 4.1 arm-linux-gcc 版本信息版本信息 4.2 交叉编译交叉编译 qt/embedded 为了在 arm 目标机上运行 qt 应用程序,还必须交叉编译 qt 的嵌入式版 本,即 qt/embedded。qt/embedded 是挪威 trolletch 公司的图形化界面开发工 具 qt 的嵌入式版本,qt/embedded 具有面向对象、跨平台、资源消耗少和可移 植性强等优点,它拥有较高的运行效率,而且整体采用面向对象编程,拥有 良好地体系架构和编程模式 越来越多的第三方软件公司开始采用 qt/embedded 开发嵌入式 linux 下的应用软件。 qt/embedded 源码包可以在诺基亚官网下载,源码在编译本地版本时已经 解压缩,所以直接进入源码目录进行配置,但配置前先要清空旧的配置,用以 下命令: make confclean 然后重新进行配置: ./configure -prefix /usr/local/trolltech/qtembedded-4.5.2-arm -embedded arm no-nis no-largefile no-accessibility no-qt3support no-phonon no-opengl - xplatform qws/linux-arm-g+ 这里包含了安装目录的配置以及交叉编译的配置。 配置完成后开始编译,这里用的编译工具链是 arm-linux-gcc-4.3.2: make 编译完成后安装: make install 这样 qt 就被安装在/usr/local/trolltech/qtembedded-4.5.2-arm 目中下。 最后一步是设置环境变量,在命令行下输入 vim /etc/profile 打开文件, 在文件最后添加如下内容: export path=/usr/local/trolltech/qtembedded-4.5.2-arm/bin/:$path export ld_library_path=/usr/local/trolltech/qtembedded-4.5.2- arm/lib/:$ld_library_path 常州大学本科生毕业设计(论文) 第 25 页 共 31 页 一个是 qmake 路径,一个是 qt 库的路径,保存并退出后,要使设置生效 还要输入如下命令: source /etc/profile 至此,qt/embedded 开发环境搭建完成。 4.3 下载运行下载运行 首先在 linux 命令行下需要 3 步操作: (1)建立工程文件: qmake -project (2)生成 makefile 文件: qmake (3)对整个工程进行编译,生成可执行文件: make。 然后使用 securecrt 软件启动开发板和下载可执行文件。securecrt 是一 个仿真终端连接工具。它可以方便的连接 ssh 服务器,远程管理 linux。同时, 它还能使用多种协议方便的上传下载文件。使用开发板需要安装的 usb 驱动和 usb 转串驱动可以对照开发板手册提前安装好。连接好开发板,打开 securecrt 软件,点击快速连接,在弹出窗口中进行连接设置,协议选择为 serial,端口设置为设备管理器中增加的 com 口,波特率设为 115200,去掉 rts/cts 的勾选,具体的连接设置如下图 4.2 所示。 图图 4.2 securecrt 连接设置连接设置 常州大学本科生毕业设计(论文) 第 26 页 共 31 页 点击连接就完成了配置。然后按照以下几个步骤进行可执行文件的下载与 运行: (1)按下开发板的复位键,在 securecrt 窗口中跳出菜单选项,键入 “b”启动 linux 系统。 (2)在 linux 命令行下键入“rz”,如图 4.3 所示在弹出窗口中添加可执行 文件并下载到开发板上的 linux 系统根目录下。 图图 4.3 可执行文件下载可执行文件下载 (3)在运行可执行文件之前,先要将文件的权限进行修改,否则不能执行。 在命令行下输入 chmod 777 tetrix,把 tetrix 文件修改为可读可写可执行 的权限。 (4)要执行程序,就在命令行下键入./tetrix qws。在嵌入式 qt 版本中, 程序需要服务器或自己作为服务器程序。服务器程序构造的一个方法就是 使用-qws 命令选项启动程序。如果不添加-qws 命令,程序将以客户端形式 启动,这时候启动失会败。 程序启动后,按 s 键开始运行游戏,方块会自动下降,如下图 4.3 所示: 常州大学本科生毕业设计(论文) 第 27 页 共 31 页 图图 4.3 运行效果界面运行效果界面 下图 4.4 所示,按下 p 键,在分数下面显示“pause!”标签表明游戏处于暂 停状态,再次按下 p 键,“pause!”标签会消失,方块继续下降。由于在此之 前已消除 2 行方块,图上 score 显示分数为 200。the current difficulty 显示为 2,这是通过数字键 2 修改后得到难度显示为 2 级,方块下落速率比起 1 级更快。 此外,通过 c 建修改,游戏区域背景、方块及方块边框的颜色有了变化,c 键 反复按下,颜色会继续随机变化。 常州大学本科生毕业设计(论文) 第 28 页 共 31 页 图图 4.4 功能演示效果图功能演示效果图 当方块堆积到顶部时游戏就结束,会弹出如图 4.5 所示的警告窗口,警告 信息为 game over!。只要点击 yes 按钮或者按下键盘的回车键游戏就会重新 开始了。 图图 4.5 游戏结束效果图游戏结束效果图 常州大学本科生毕业设计(论文) 第 29 页 共 31 页 5 总结与展望总结与展望 5.1 总结总结 本设计是基于 arm 的俄罗斯方块游戏设计,首先基于 qt 在 pc 机上完成 游戏代码的编写调试,然后搭建好 qt/embedded 开发环境,嵌入式交叉编译设 计好的游戏程序,就能够实现跨平台的移植,以达成我们最终在 arm 平台运 行俄罗斯方块游戏程序的目标。通过外接键盘的方式,使用“上”、“下”、 “左”、“右”按键来实现游戏方块的旋转、下落、左移、右移的基本操作。 后续暂停、改变难度、色彩变化等等功能的增加使得游戏更富娱乐性。 总的来说,本次毕业设计主要是软件部分的设计与应用,从环境的搭建、 程序的编写、工具软件的使用等等,涉及的范围很广。因此,我不仅从中锻炼 了自己的学习能力,还拓宽了知识面。我也深刻明白到一个好视眼的重要性, 对于一个课题,实现的方案可以有很多,但是选择一个好的方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规划督学面试题及答案
- 道路运输考试题及答案
- 2025年广西南宁职业技术大学招聘教职人员考试笔试试题(含答案)
- 北京电气基础知识培训课件
- 2025机械工程师职称考试题及参考答案
- 2025年汽车修理工(装调工)高级技师理论知识竞赛试题与答案
- 2025食品安全管理员培训考试试题及答案
- 2025康复医学考试试题(含参考答案)
- 2024年急救设备操作试题(附答案)及设备相关应急预案考试题(附答案)
- 2024年湖南省常德市医疗三严三基理论考试题库及答案
- 2025年十八项核心制度考试试题库(含答案)
- 2025年食堂安全培训考试题及答案
- 反诈防骗安全知识培训课件
- 砂石垫资合作协议合同范本
- 北师大版八年级数学上册第一章 勾股定理 单元测试卷(含答案)
- 护工清洁护理培训
- 违法建筑用电管理办法
- 2025年广西中考语文试题卷(含答案及解析)
- 2025年党建知识竞赛题库及答案(完整版)
- 烹饪高级技师论文
- 2025年时事政治考试100题(含参考答案)
评论
0/150
提交评论