




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档 I欢迎下载 学号 学号 常常 州州 大大 学学 毕毕业业设设计计 论论文文 20122012 届 届 题题 目目 学学 生生 学学 院院 专业班级专业班级 校内指导教师校内指导教师 专业技术职务专业技术职务 校外指导老师校外指导老师 专业技术职务专业技术职务 二二 一二年六月一二年六月 精品文档 I欢迎下载 基于基于 ARMARM 的俄罗斯方块游戏的开发的俄罗斯方块游戏的开发 摘摘 要 要 随着现代化技术的高速发展 人们的生活已经离不开嵌入式了 在消 费电子领域 嵌入式系统的游戏娱乐功能受到越来越多的关注 本课题是基于 ARM 微处理器 S3C2440A 硬件平台 设计并实现了俄罗斯方块游戏 系统的实现主要分为两个部分 首先 在 PC 机上安装 qt creator 开发软 件 利用 Qt 的信号与槽 事件机制等技术 完成俄罗斯方块游戏程序的设计 程序设计的重点是实现方块的数据存储 移动旋转和消行等功能 然后搭建 Qt Embedded 开发环境 嵌入式交叉编译俄罗斯方块游戏程序生成可执行文 件 并下载到 ARM 开发板 mini2440 上运行 经过测试 整个系统性能良好 满足设计要求 俄罗斯方块游戏通过键盘 进行操作 人机交互效率较高 界面美观大方 功能说明简单完整 研究方案 跟进时代主流 具有重要的现实意义 关键词 关键词 嵌入式 Linux S3C2440A Qt 俄罗斯方块 精品文档 II欢迎下载 TheThe DevelopmentDevelopment ofof TetrisTetris GameGame BasedBased onon thethe ARMARM AbstractAbstract With the rapid development of modern technology people s 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 Qt s 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 KeyKey words words embedded Linux S3C2440A Qt Tetris 精品文档 III欢迎下载 目录目录 摘 要 I ABSTRACT II 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 键盘处理 2121 4 移植和测试 23 4 1 交叉编译工具安装 23 4 2 交叉编译 QT EMBEDDED 23 精品文档 IV欢迎下载 4 3 下载运行 24 5 总结与展望 28 5 1 总结 28 5 2 展望 28 参 考 文 献 29 致 谢 30 精品文档 1欢迎下载 1 1绪论绪论 1 11 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 世纪之后 由于手机制造行业的快速发展 出货量呈现爆炸式增长 ARM 处理器占领了全球手机市场 由此可见 ARM 处理器还具有广阔的发展 空间 将会不断影响和改变我们的生活 精品文档 2欢迎下载 1 21 2 课题的提出与意义课题的提出与意义 当前 ARM 正在与包括 Android 在内的所有 Linux 联盟合作 致力于从芯 片级至操作系统级两方面统一 降低产品的开发门槛 ARM Linux 代表了 未来的趋势 标准化的硬件 软件的组合 可以令更多 OEM 厂商愿意去做差异化 设计 Linux 是开放源代码的操作系统 直接带来的就是开发成本的降低 另外 Linux 不仅在系统资源上占用率较低 在高性能运算上又能媲美 Windows 而良 好的可扩展性和可维护性也是其优势所在 所以 ARM Linux 毫无疑问成为 了嵌入式开发的主流组合 6 Qt 是跨平台的应用程序和 UI 框架 它包括跨平台类库 集成开发工具和 跨平台 IDE 使用 Qt 只需一次性开发应用程序 无须重新编写源代码 便可 跨不同桌面和嵌入式操作系统部署这些应用程序 所以本设计采用先在 PC 机上 实现应用程序的编写 再跨平台移植到 ARM 硬件平台上的方法来实现嵌入式应 用程序的开发 俄罗斯方块 Tetris 是一款风靡全球的电视游戏机和掌上游戏机游戏 它由俄罗斯人阿列克谢 帕基特诺夫发明 故得此名 俄罗斯方块的基本规则是 移动 旋转和摆放游戏自动输出的各种方块 使之排列成完整的一行或多行并 且消除得分 由于上手简单 老少皆宜 从而家喻户晓 风靡世界 俄罗斯方 块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事 它看似 简单但却变化无穷 令人上瘾 相信大多数用户都还记得为它痴迷得茶不思 饭不想的那个俄罗斯方块时代 由于俄罗斯方块具有的数学性 动态性与知 名度 也经常拿来作为游戏 程序设计的练习题材 本设计选择开发 俄罗 斯方块 游戏不仅具有技术上的可行性 而且开发成果也具有相当的现实意 义 1 31 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 这个应用程序框架更加快速及轻易的完成开发任务 游戏程序的设计需要解 决几个关键的问题 方块的数据结构 方块的移动 碰撞和消行等 另外由于 开发板屏幕分辨率为 320 240 所以窗口界面的大小和布局要特别注意 游戏 精品文档 3欢迎下载 统一使用键盘操作 后续还可以扩展诸如计分 难度设置 颜色调节等等的功 能 第二 由于 PC 机是 X86 结构 Mini2440 是 ARM 架构 所以设计好的游戏 程序必须通过嵌入式交叉编译以后才能在开发板上运行 因此 嵌入式交叉编 译环境的搭建成为了游戏移植过程的关键 QT Embedded 是 NOKIA 公司的图形 化界面开发工具 Qt 的嵌入式版本 本设计采用的是 4 5 2 版本 配置环境 需要在 PC 机 Linux 环境下 Linux 系统可以通过虚拟机安装 方便快捷 交叉编译工具需要提前安装 选用的是Mini2440 配套的 arm linux gcc 4 3 2 接着下载对应 Qt Embedded 源码包 解压以后要配置编译参数 编 译源码的过程非常漫长 大概需要三个小时 之后设置环境变量 再通过嵌 入式交叉编译俄罗斯方块的游戏程序 将生成的目标文件下载到开发板上运 行即可 8 开发板外接 USB 接口键盘后 可以直接对游戏进行操作 精品文档 4欢迎下载 2 2需求分析需求分析 2 2 1 1 硬硬件件需需求求 2 2 1 1 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欢迎下载 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 2 1 1 2 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 分辨率 240 x320 带触 摸屏 5 接口和资源 精品文档 6欢迎下载 主要配备了 1 个 100M 以太网 RJ 45 接口 采用 DM9000 网络芯片 3 个串行口 1 个 USB Host 1 个 USB Slave B 型接口 1 个 SD 卡 存储接口 系统时钟源和实时时钟等等 6 操作系统支持 支持 Linux2 6 32 2 Qtopia 2 2 0 QtE 4 6 1 独创双图形系统共 存 无缝切换 以及 WindowsCE NET 6 0 R3 2 22 2 软件需求软件需求 2 2 22 2 2 QtQt 简介简介 Qt 拥有直观的的 C 类库 Qt C 类库提供一套丰富的应用程序生成块 包含了构建高级跨平台应用程序所需的全部功能 具有直观 易学 易用 生 成好理解 易维护的代码等特点 7 Qt 还具有跨桌面和嵌入式操作系统的移植性 使用 Qt 只需一次性开发应 用程序 就可跨不同桌面和嵌入式操作系统进行部署 而无须重新编写源代码 可以说 Qt 无处不在 Qt 有如下几个重要的特点 1 使用单一的源代码库定位多个操作系统 2 通过重新利用代码可将代码跨设备进行部署 3 无须考虑平台 可重新分配开发资源 4 代码不受担忧平台更改影响的长远考虑 5 使开发人员专注于构建软件的核心价值 而不是维护 API Qt 作为一种跨平台的图形界面开发平台 可以直接建立在简单的帧缓冲驱 动上 并且有良好的可配置 可裁剪特性 因此也经常用在嵌入式系统上 Qt 支持一般图形界面系统的由事件驱动的变成模型 并且支持特有的信号与槽的 变成模型 应用非常灵活 Qt 拥有丰富的 API 和大量的开发文档 对于用户开 发来说是非常方便的 经常多年的发展 Qt 已经不单纯是一个图形界面开发平 台 它对应用变成的各种领域 如网络 数据库等 都提供了自己的支持 功 能非常强大 2 2 22 2 2 QtQt CreatorCreator 开发软件开发软件 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欢迎下载 第一 使用强大的 C 代码编辑器可快速编写代码 语法标识和代码 完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠 括号匹配和括号选择模式高级编辑功能 第二 使用浏览工具管理源代码 集成了领先的版本控制软件 包括 Git Perforce 和 Subversion 开放式文件 无须知晓确切的名称或位置搜 索类和文件跨不同位置或文件沿用符号在头文件和源文件 或在声明和定义 之间切换 第三 为 Qt 跨平台开发人员的需求而量身定制 集成了特定于 Qt 的功 能 如信号与槽 Signals 田字形 unsigned char item2 4 4 精品文档 14欢迎下载 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 长条形 unsigned char item3 4 4 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 Z 字形 unsigned char item4 4 4 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 反 Z 形 unsigned char item5 4 4 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 反 7 形 unsigned char item6 4 4 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 7 字形 unsigned char item7 4 4 0 1 0 0 1 1 1 0 精品文档 15欢迎下载 0 0 0 0 0 0 0 0 T 形 游戏过程中 需要产生随机形状方块 这可以通过调用 QT 库函数 qrand 来实现 qsrand time 0 配置随机种子 qrand 7 产生随机数 3 3 23 3 2 方块的旋转和移动方块的旋转和移动 本设计使用了一维数组 0 15 来表示 4 4 网格中的每个单元格 要求方块逆 时针旋转 90 度 可以很容易得到旋转操作的算法 关键实现代码如下 for int i 0 i 4 i for int j 0 j 4 j tempItem 3 j 4 i currentItem i 4 j 坐标转换 i 为行 j 为列 由当前数组 currentItem 保存到临时数组 tempItem 中 方块 在进行选择以后还要进行检测是否越界 左超界让其靠左 右操作让其靠右 此外 下边超界意味着不能进行旋转操作 所以在进行旋转操作之前需要备份 数组 然后恢复原图形 如图 3 4 是左侧越界调整示意图 假设逆时针 旋转90度 靠左调整 旋转前图形 旋转后图形 左超界 图图 3 43 4 旋转方块左侧越界调整旋转方块左侧越界调整 精品文档 16欢迎下载 方块的移动有向下 向左和向右三个操作 重点就是检测方块是否与下 左 右边界或者其他图形重合 这里拿方块与左边界或者左边图形是否重合来 说 首要解决的问题就是要得到当前方块在其所在的 4 4 网格中的位置信息 其中实现方块从左边向右数占用 4 4 网格第几列的关键代码如下所示 for int col 0 col 4 col for int row 0 row 4 row if currentItem row 4 col 数组中有方块填充就返回 列数 return col col 为列 row 为行 扫描整个 4 4 网格得到当前方块在最左边的位置 item endLeft item Col 为 4 4 网格左边缘在整个 100 200 游戏区域中的位置 只要满足 item Col item endLeft0 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 63 6 信号与槽的连接示意图信号与槽的连接示意图 精品文档 19欢迎下载 槽能够被用于接收信号 也能够像普通函数一样使用 正如一个对象并不 知道究竟有没有别的对象正在接收它的信号一样 一个槽也不知道有没有信号 与它相连 这保证了使用 Qt 可以创建真正相互独立的组件 10 定时器溢出有 2 种情况 一种情况是检测到游戏运行结束了 这时候使用 QMessageBox 类成员函数 warning 来弹出警告对话框 点击对话框 yes 可以 重新开始游戏 关键代码如下 QMessageBox warning this tr warning tr Game Over QMessageBox Yes 另一种情况是方块已经下移到最底下了 这时候需要进行一下几步操作 this gameArea nextItem 出现下一个图形 int num this gameArea getFullRowNum 获得已满的行数 this doScore num 显示分数 this gameArea gameStart 继续游戏 3 3 53 3 5 UIUI 设计和游戏区域的绘制设计和游戏区域的绘制 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 个标签显 示的就是得分 在程序代码中改变这个标签内容也就相应改变了得分的显示 精品文档 20欢迎下载 图图 3 73 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 及其子类 中 同时定义了 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 可以绘制从 简单的直线到像饼图和弦这样的复杂形状 它也可以绘制排列的文本和像素映 精品文档 21欢迎下载 射 本设计利用 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 i map row i for int j 0 jkey case Qt Key S break case Qt Key P break default QWidget keyPressEvent event 本设计除了实现几个基本按键操作外 还有一些扩展功能 所有的功能按 键如图 3 6 所示 按键事件 S 键 开 始游戏 P 键 暂 停与恢复游戏 上 键 逆 时针旋转方块 下 键 方 块加速下移或 者直接落底 1 到 6 键 难度切换 C 键 游 戏界面颜色变 化 左 右 键 方 块左移与右移 D 键 下 键功能 切换 图图 3 83 8 键盘事件功能说明键盘事件功能说明 这里 Key Down 键定义了两个功能 一个是只让方块加速下移一步 另一个 是使方块直接下落到底 通过 Key D 键盘可以对这两个功能进行切换 Key Down 键每次按下都会进行判断 默认功能是加速下移 Key C 键的功能是 使游戏背景区域 方块边框颜色和方块背景填充颜色随机变化 这里只要改变 精品文档 23欢迎下载 画刷 画笔 背景填充色等参数就可以达到变色的效果 Qt 的颜色设置都是在 类 QColor 中实现的 QColor 一般有四个参数 数值范围都是 0 255 前 3 个参 数表示红绿蓝三原色 通过自由组合得到不同的颜色 最后一个参数是设置颜 色透明度 另外 Key P 和 Key 1 Key 6 的数字键实现的是暂停功能和对方块下 落速率的调节 具体都是通过对定时器的操作来完成的 4 4 移植和测试移植和测试 4 14 1 交叉编译工具安装交叉编译工具安装 精品文档 24欢迎下载 在 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 所示信息 图图 4 14 1 arm linux gccarm linux gcc 版本信息版本信息 4 24 2 交叉编译交叉编译 Qt EmbeddedQt 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 这里包含了安装目录的配置以及交叉编译的配置 精品文档 25欢迎下载 配置完成后开始编译 这里用的编译工具链是 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 一个是 qmake 路径 一个是 Qt 库的路径 保存并退出后 要使设置生效还 要输入如下命令 source etc profile 至此 Qt Embedded 开发环境搭建完成 4 34 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 所示 精品文档 26欢迎下载 图图 4 24 2 SecureCRTSecureCRT 连接设置连接设置 点击连接就完成了配置 然后按照以下几个步骤进行可执行文件的下载与 运行 1 按下开发板的复位键 在 SecureCRT 窗口中跳出菜单选项 键入 b 启动 linux 系统 2 在 linux 命令行下键入 rz 如图 4 3 所示在弹出窗口中添加可执 行文件并下载到开发板上的 linux 系统根目录下 图图 4 34 3 可执行文件下载可执行文件下载 精品文档 27欢迎下载 3 在运行可执行文件之前 先要将文件的权限进行修改 否则不能执行 在命令行下输入 chmod 777 Tetrix 把 Tetrix 文件修改为可读可写可执 行的权限 4 要执行程序 就在命令行下键入 Tetrix qws 在嵌入式 QT 版本中 程序需要服务器或自己作为服务器程序 服务器程序构造的一个方法就是 使用 qws 命令选项启动程序 如果不添加 qws 命令 程序将以客户端形式 启动 这时候启动失会败 程序启动后 按 S 键开始运行游戏 方块会自动下降 如下图 4 3 所示 图图 4 34 3 运行效果界面运行效果界面 下图 4 4 所示 按下 P 键 在分数下面显示 pause 标签表明游戏处于 暂停状态 再次按下 P 键 pause 标签会消失 方块继续下降 由于在此 之前已消除 2 行方块 图上 score 显示分数为 200 The current difficulty 显示为 2 这是通过数字键 2 修改后得到难度显示为 2 级 方块下落速率比起 1 级更快 此外 通过 C 建修改 游戏区域背景 方块及方块边框的颜色有了 变化 C 键反复按下 颜色会继续随机变化 精品文档 28欢迎下载 图图 4 44 4 功能演示效果图功能演示效果图 当方块堆积到顶部时游戏就结束 会弹出如图 4 5 所示的警告窗口 警告 信息为 Game Over 只要点击 Yes 按钮或者按下键盘的回车键游戏就会重新 开始了 图图 4 54 5 游戏结束效果图游戏结束效果图 精品文档 29欢迎下载 5 5 总结与展望总结与展望 5 15 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年CNJ202型低压甲醇催化剂合作协议书
- 营运车辆养护管理办法
- 2024年县特殊教育学校德育工作计划样本(2篇)
- 肛肠科个案护理
- 《无人机飞行操控技术(微课版)》全套教学课件
- 4第四节决策树与集成算法
- 汽车零部件质量培训
- 车辆gps管理制度
- 住宅小区园林景观绿化工程施工组织设计方案
- 事业单位考试职业能力倾向测验(医疗卫生类E类)试题与参考答案
- 人教版5年级上册数学全册课件(2022年9月新版)
- 中国艾滋病诊疗指南(2024版)解读
- 1.1.1 地球的宇宙环境(第1课时 地球在宇宙中)(原卷版)
评论
0/150
提交评论