嵌入式系统的软硬件设计_俄罗斯方块

合集下载

软件工程课程设计报告俄罗斯方块

软件工程课程设计报告俄罗斯方块

页眉《软件工程》课程设计报告课题:俄罗斯方块学院:计算机与信息学院专业:软件工程姓名(学号):晋烨(2011112360)指导教师:李昭一、任务分析俄罗斯方块是个老少皆宜的小游戏,它实现由四块正方形的色块组成,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,然后程序根据这七种方块堆叠成各种不同的模型。

二、可行性研究报告1、设计背景俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

随着计算机的发展而发展,俄罗斯方块不断推陈出新,深爱广大玩家喜爱。

这个游戏有的简单,有的复杂,但其根本原理是一样的都是对运动的方块进行组合,来训练玩家的反应能力。

因此开发此游戏软件可满足人们的一些娱乐的需求。

此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。

2、设计目的通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯广场游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2SE基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。

3、设计要求本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。

整个开发过程遵循软件工程规范,采用JAVA GUI编程实现界面以及事件的控制。

用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方向、积分以及等级的功能。

4、设计目标通过本游戏的开发,主要实现游戏的可操作性及美观性,同时使自己对JAVA语言的了解更进一层,为将来的实际工作打下坚实的基础。

三、需求分析游戏需求28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便玩家所需要的形态和位置落下。

c51单片机俄罗斯方块设计

c51单片机俄罗斯方块设计
图形的上下移动根据点阵理论可通过图形数据的左右移动和地址变化来实现。
图形的变化图形的变化图形的变化图形的变化:可通过地址变化来得到。即把需要变化的数据送到一固定地址,通过地址变化再送回显示的地址里面。图形的碰边处理图形的碰边处理图形的碰边处理图形的碰边处理:可通过各个边上的数据判断是否到边来实现。与原有图形相遇与原有图形相遇与原有图形相遇与原有图形相遇:可通过与原有图形数据进行比较处理来实现。:图形的旋转图形的旋转图形的旋转图形的旋转:在固定地址里面实现旋转比较容易,但是在行进中的图形旋转就比较费脑筋,我是用一个地址计数下移的次数,再用一个地址计数左移右移的次数。再根据这些次数确定图形的地址,再把这些地址送到图形变化的一个固定的地址中,变化后再送回到显示的地址中去显示。图形的碰边处理图形的碰边处理图形的碰边处理图形的碰边处理:如果不对图形进行边框处理,图形就会一直移动,看不到我们想要的效果。我是用把边框数据与图形数据进行位运算。再判断这些数据就可以得到图形是否到边
unsigned int code game_data[]=
{
0x64DB,0x8AAA,0x8AAA,0x8AAB,0xEEAA,0xAAAA,0xEAAB,0x0000
三.系统方案设计程序整体源自路单片机上的程序设计一般是一个大循环结构,对于俄罗斯方块的程序设计,首先产生一个伪随机数,其范围是0-6,然后程序根据此数值所对应的图形模块装入ram的固定区域内,紧接着将此图像写入led所对应的显示缓冲区中,显示程序将缓冲区内的内容显示在led上,如果没有控制键按下,图形将自动向下移动。如果有键按下,程序将根据按下的键来改变图形存储区的值,同时程序将判断图形是否已到达边界,当图形最上层到达显示区顶部,则游戏结束,此时将清楚显示缓冲的内容,游戏重新开始。

嵌入式实验报告_俄罗斯方块实验报告

嵌入式实验报告_俄罗斯方块实验报告

嵌⼊式实验报告_俄罗斯⽅块实验报告俄罗斯⽅块实验报告班级电⼦班学号******* 姓名**实验名称俄罗斯⽅块⼀、设计⽬标和要求:1、实现多个模块的驱动:液晶、按键、定时器等。

综合多个模块的协调运⾏。

2、设计游戏运⾏的⾏为仲裁引擎,合理设计前景和背景的相对关系。

3、通过ucos2操作系统,合理实现多任务的协调运⾏。

4、完成考核要求:①在液晶上画出欢迎界⾯。

②开启定时器,定时刷新页⾯。

③俄罗斯⽅块满⾏时消⾏,并计数。

④当⽅块叠加到页⾯顶时,结束游戏。

⼆、实验环境:硬件:PC机、嵌⼊式系统实验箱,串⼝线。

软件: windows,编译器三、设计思路和实现步骤、内容:1、设计思路:俄罗斯⽅块游戏软件基于ARM的Windowns CE平台进⾏写操作,利⽤PXA270RP实验箱模拟仿真器,利⽤evc编程来具体实现,在实验箱的触摸屏上进⾏游戏。

⾸先对俄罗斯⽅块的设计和功能需求进⾏详细的了解和分析,如下图1是俄罗斯⽅块总体设计功能图。

开始结束设计消⾏设计转换设计俄罗斯⽅块游戏设计游戏计积分等级设计系统帮助说明操作设计界⾯分布设计⽅块设计游戏帮助系统说明图1 俄罗斯⽅块总体设计功能图(1)游戏界⾯设计:分别是游戏显⽰界⾯,下⼀个⽅块下落界⾯,积分和等级记录界⾯,开始结束暂停按钮,⽅块形态位置变化操作按钮。

(2)操作设计:①游戏开始结束暂停操作设计:在游戏界⾯上有开始、结束、暂停按钮,⽤⿏标操作,选择是否要进⼊游戏。

②⽅块形状转换操作:良好的⽅块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、⽥字形、7字形、反7形、T 字型),各个⽅块要能实现它的变形,统⼀设为逆时针变形。

如下图2所⽰为俄罗斯⽅块定位点设置表。

当⽅块下落时,可通过键盘⽅向键(上、下、左、右键)对该⽅块进⾏向上(变形),向下(加速)、向左、向右移动。

俄罗斯⽅块定位点设置,以⿊⾊点为(0,0)坐标状态类型 1 2 3 44567图2 俄罗斯⽅块⽅块形状图③消⾏操作设计:当⽅块落到游戏界⾯最底部并且铺满最后⼀⾏,就能消去所在这⼀⾏,积分增加100分,⽽积分增加到⼀定数值时,玩家等级增加。

基于ARM的俄罗斯方块游戏的开发

基于ARM的俄罗斯方块游戏的开发

学号:常州大学毕业设计(论文)(2012届)题目学生学院专业班级校内指导教师专业技术职务校外指导老师专业技术职务二○一二年六月基于ARM的俄罗斯方块游戏的开发摘要:随着现代化技术的高速发展,人们的生活已经离不开嵌入式了。

在消费电子领域,嵌入式系统的游戏娱乐功能受到越来越多的关注。

本课题是基于ARM 微处理器S3C2440A硬件平台,设计并实现了俄罗斯方块游戏。

系统的实现主要分为两个部分。

首先,在PC机上安装qt creator开发软件,利用Qt的信号与槽、事件机制等技术,完成俄罗斯方块游戏程序的设计。

程序设计的重点是实现方块的数据存储、移动旋转和消行等功能。

然后搭建Qt/Embedded开发环境,嵌入式交叉编译俄罗斯方块游戏程序生成可执行文件,并下载到ARM开发板mini2440上运行。

经过测试,整个系统性能良好,满足设计要求。

俄罗斯方块游戏通过键盘进行操作,人机交互效率较高。

界面美观大方,功能说明简单完整。

研究方案跟进时代主流,具有重要的现实意义。

关键词:嵌入式Linux、S3C2440A、Qt、俄罗斯方块The Development of Tetris Game Based on the ARM Abstract : 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.Key words: embedded Linux、S3C2440A、Qt、Tetris目录摘要 (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.1QT 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交叉编译Q T/E MBEDDED (23)4.3下载运行 (24)5 总结与展望 (28)5.1总结 (28)5.2展望 (28)参考文献 (29)致谢 (30)1绪论1.1 课题研究背景及国内外研究现状嵌入式系统是当前发展最快最有前途的IT应用领域之一,嵌入式技术的发展正以前所未有的速度影响和改变着我们的生活。

单片机俄罗斯方块设计 单片机俄罗斯方块设计

单片机俄罗斯方块设计 单片机俄罗斯方块设计

题目:[单片机俄罗斯方块设计]摘要随着社会的不断的发展和进步,人们对娱乐产品的关注在不断的增加,特别是电子游戏产品在我们的生活中占据了很重要的地位。

俄罗斯方块游戏是一款风靡全球的经典游戏。

这款游戏之所以叫做俄罗斯方块,是因为发明这款游戏的人是俄罗斯人。

本次为了回顾经典设计了一款基于单片机的俄罗斯方块游戏机。

本次设计了一款基于单片机的俄罗斯方块游戏机,该游戏机可以丰富我们的业余生活。

在硬件设计上该游戏机以STC89C52单片机为基础、使用LCD12864图形液晶可以显示游戏的界面、通过按键实现游戏机的按钮的功能、并具有蜂鸣器可以实现声音提示的功能。

在软件设计上,使用C语言进行了俄罗斯方块游戏的控制程序的编写,并在keil软件上进行了调试。

最后在Proteus仿真软件上对俄罗斯方块游戏的功能进行了仿真,并焊接了实物电路板。

关键词:STC89C52单片机;俄罗斯方块;游戏机;LCD12864液晶AbstractWith the continuous development and progress of society, people pay more and more attention to entertainment products, especially video game products play a very important role in our life. The Tetris game is a classic game that is popular all over the world. The game is called the Tetris, because the people who invented the game were Russian. This time in order to review the classic design of a single chip based Tetris block game machine.The design of a single chip computer based Tetris game machine, which can enrich our amateur life. On the hardware design, the game machine is based on STC89C52 microcontroller, and it can display the interface of the game by using LCD12864 graphic LCD, realize the button function of the game machine by button, and has the function of voice prompt by buzzer. In the software design, the control program of Tetris game is written in C language and debugged on the keil software. Finally, the function of the Tetris game is simulated on the Proteus simulation software, and the physical circuit board is welded.Keywords:STC89C52 singlechip;Tetris block;game machine;LCD12864 liquid crystal目录摘要 (I)Abstract........................................................... I I 第1章绪论.. (1)1.1课题研究背景和意义 (1)1.2俄罗斯方块的发展状况及趋势 (1)1.3课题研究的主要内容 (1)1.4课题研究的主要内容 (2)第2章系统整体方案设计 (4)2.1系统的功能要求 (4)2.2系统总体方案框图设计 (4)2.3单片机模块的选择 (5)2.4液晶显示模块的选择 (6)2.5按键电路的选择 (7)第3章系统整体硬件设计 (9)3.1单片机电路设计 (9)3.1.1STC89C52单片机介绍 (9)3.1.2晶振电路设计 (10)3.1.3复位电路设计 (10)3.1.4单片机最小系统电路设计 (11)3.2 LCD12864液晶显示电路 (11)3.2.1点阵LCD的显示原理 (11)3.2.2LCD12864液晶的硬件连接 (12)3.3按键控制电路 (12)3.4声音提示电路设计 (13)3.5电源电路 (13)第4章系统软件设计 (15)4.1程语言的选择 (15)4.2软件介绍和工程建立 (15)4.3俄罗斯方块流程图设计 (16)4.3.1主程序流程图 (16)4.3.2游戏外观显示流程图 (18)4.3.3俄罗斯方块向左/右移动工作流程图 (19)4.3.4俄罗斯方块中按下键的流程图 (20)第5章系统的调试与制作 (21)5.1 KEIL软件介绍 (21)5.2程序调试 (21)5.3 proteus仿真步骤 (22)5.4实物综合调试 (23)结论 (26)参考文献 (27)附录 (28)致谢.............................................. 错误!未定义书签。

c课程设计俄罗斯方块

c课程设计俄罗斯方块

c 课程设计俄罗斯方块一、课程目标知识目标:1. 学生能理解俄罗斯方块的基本游戏规则和操作方法。

2. 学生能掌握运用方向键控制方块移动、旋转的技巧。

3. 学生了解俄罗斯方块中的不同形状及其特点。

技能目标:1. 学生通过操作俄罗斯方块,提高手眼协调能力和反应速度。

2. 学生能运用策略,合理安排方块的位置,提高游戏成绩。

3. 学生能够运用编程思维,设计简单的俄罗斯方块游戏。

情感态度价值观目标:1. 学生在游戏中培养团队合作精神,学会互相鼓励和支持。

2. 学生体验游戏带来的乐趣,激发对计算机编程的兴趣。

3. 学生认识到游戏背后的科技原理,培养对科学的敬畏之心。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程为信息技术课程,旨在通过游戏教学,让学生掌握计算机基本操作和编程思维。

2. 学生特点:六年级学生具备一定的计算机操作基础,对新奇有趣的游戏充满兴趣,具备团队合作精神。

3. 教学要求:结合学生特点,课程设计应注重实践操作,鼓励学生主动探索,培养创新思维。

二、教学内容1. 俄罗斯方块游戏规则与操作方法- 游戏界面认识- 方块形状及特点- 方块移动、旋转操作技巧2. 计算机编程基础- 编程思维训练- 简单的算法设计- 俄罗斯方块游戏编程实践3. 游戏策略与团队合作- 游戏策略制定与调整- 团队合作与沟通- 互相鼓励,共同提高游戏成绩4. 教学内容的安排与进度- 第一节课:游戏规则与操作方法学习- 第二节课:方块移动、旋转技巧训练- 第三节课:计算机编程基础及编程思维训练- 第四节课:简单算法设计与俄罗斯方块游戏编程实践- 第五节课:游戏策略制定与团队合作5. 教材章节及内容列举- 课本第三章:计算机游戏与编程- 第一节:游戏概述- 第二节:俄罗斯方块游戏介绍- 第三节:编程基础与游戏设计教学内容确保科学性和系统性,结合课程目标,注重实践操作,使学生能够在掌握游戏操作的基础上,进一步学习编程思维和团队合作。

在Linux系统下基于ARM嵌入式的俄罗斯方块

在Linux系统下基于ARM嵌入式的俄罗斯方块

在Linux系统下基于ARM嵌入式的俄罗斯方块目录一、摘要 (3)二、各种问题的具体介绍(1)图形的如何存储问题 (3)(2)图形的染色问题 (3)(3)游戏的屏幕显示问题 (3)(4)方块图形的自动下移问题 (3)(5)方块图形的左右移动问题 (3)(6)方块图形的如何翻转问题 (3)(7)图形移动时的自动消行问题 (3)(8)图形移动翻转时的边界判断问题 (3)(9)如何实现一键到底的问题 (3)(10)各种移动的用键问题 (3)(11)游戏时的自动冒行问题 (3)(12)游戏时的作弊消行问题 (3)(13)游戏时作弊方块出现问题 (3)(14)游戏时的作弊炸弹使用问题 (4)三、流程图流程图 (5)四、实习总结实习总结 (6)五、附件(1)程序源代码 (6)(2)操作截图 (18)六、参考文献 (21)一、摘要在Linux系统下使用vim编辑器实现如手机上的游戏俄罗斯方块,利用所学知识实现以下的各个问题。

二、各种问题的具体介绍(1)图形的存储问题:每个方块采用一个4 * 4的小数组存储,不同的方块给对应的数组赋不同的值,从1~7,以便打印是染不同的颜色,实现每种方块都有不同的颜色。

(2)图形的染色问题:使用VT控制码对不同的图形涂不同的颜色。

(3)游戏屏幕的显示问题:采用一个20 * 12的大数组,数组元素全部赋值为0,在终端打印空格,形成一片矩形区域,每个俄罗斯方块(以下简称方块)占4 * 4个空格的区域,赋值给大数组即可在终端打印出方块。

在大数组的上方再打印一个4 * 4的小数组,以显示下一个将出现的方块,并打印出得分,等级,计时等。

(4)方块图形的自动下移问题:有一个变量记录方块下移的行数,并像左右移动一样打印向下移动的方块,设置一个信号,每一秒发送一个信号,进程每收到一次信号变量加一实现自动下移。

(5)方块图形的左右移动问题:有一个变量记录方块第一行一列的坐标,左移时变量减一,右移时变量加一,把小数组原来在大数组的位置清零,在把小数组赋值到大数组相应坐标的位置即可打印出移动后的方块的位置,实现方块的左右移动。

嵌入式软件开发课程设计俄罗斯方块游戏

嵌入式软件开发课程设计俄罗斯方块游戏

嵌入式软件开发课程设计俄罗斯方块游戏淮海工学院计算机工程学院课程设计报告设计名称:嵌入式软件课程设计姓名:学号:专业班级:系(院):计算机工程学院设计时间:设计地点:硬件综合室5.设计详细说明续1(2)硬件原理图及相关说明 Android 有丰富的功能,因此很容易与桌面操作系统混淆。

Android 是一个分层的环境,构建在 Linux 内核的基础上,它包括丰富的功能。

UI 子系统包括:窗口,视图。

用于显示一些常见组件(例如编辑框、列表和下拉列表)的小部件。

Android 包括一个构建在 WebKit 基础上的可嵌入浏览器,iPhone 的 Mobile Safari 浏览器同样也是以 WebKit 为基础。

Android 提供多种连接选项,包括 WiFi、蓝牙和通过蜂窝(cellular)连接的无线数据传输(例如 GPRS、EDGE 和 3G)。

Android 应用程序中一项流行的技术是链接到 Google 地图,以便在应用程序中显示地址。

Android 软件栈还提供对基于位置的服务(例如 GPS)和加速计的支持,不过并不是所有的 Android 设备都配备了必需的硬件。

另外还有摄像支持。

过去,移动应用程序努力向桌面应用程序看齐的两个领域分别是图形/媒体和数据存储方法。

Android 通过提供对2D 和 3D 图形的内置支持,包括 OpenGL 库,解决了图形方面的挑战。

由于 Android 平台包括流行的开源 SQLite 数据库,因此缓解了数据存储的负担。

应用程序架构。

如前所述,Android 运行在 Linux 内核上。

Android 应用程序是用Java 编程语言编写的,它们在一个虚拟机(VM)中运行。

需要注意的是,这个 VM 并非您想象中的 JVM,而是 Dalvik Virtual Machine,这是一种开源技术。

每个 Android 应用程序都在Dalvik VM 的一个实例中运行,这个实例驻留在一个由 Linux 内核管理的进程中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程论文嵌入式系统的软硬件设计----俄罗斯方块俄罗斯方块(Tetris)是家喻户晓的一款电视游戏机和掌上游戏机的益智游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。

俄罗斯方块的基本规则是移动、旋转和摆放游戏随机产生的各种方块,使之排列成完整的一行或多行并且消除得分。

游戏区域会从顶部不断落下8种下坠物的一种,游戏区域左上角有一个区域可以显示下一个下坠物的形状,玩家可以控制下坠物移动、旋转和一键到底,通过玩家的操作,下坠物在游戏区域以“摆积木”的形式出现。

下坠物在一行或多行堆满后就可以自动消除,消行后会得到相应的分数,如果当前下坠物堆积至窗口顶端,则游戏结束。

2 课程设计目的本课程是通过对嵌入式的课程设计让学生了解嵌入式的基本概念,基本编程指令与操作以及通过交叉编译完成在不同开发环境下的系统移植。

另外,本嵌入式实验的课程设计的更主要目的是通过实际的嵌入式应用系统开发实例掌握嵌入式系统设计和开发的技能和专门知识,积累实践和工程经验。

3 课程设计背景传统的俄罗斯方块只有7种基本形状,其是通过增加下降速度以减少玩家的反应时间来提升的游戏难度的。

为了进一步提高游戏的难度,需要在其他方面提高游戏的难度。

因此,我们小组以此为基础在原有的俄罗斯方块下进一步改进俄罗斯方块提高游戏难度。

其次,传统的游戏是通过物理按键来控制游戏的,为实现在触摸屏上无物理按键的条件下玩俄罗斯方块。

我们采用触摸屏上的虚拟按键代替物理按键以操作游戏以满足现在手机用户无物理按键但仍能游戏的要求。

4实验设计要求开发一个基于QT的俄罗斯方块游戏,并达到以下要求:1、开始游戏随机产生13种方块并自动下落。

左上角2*2预示框显示即将出现的图形;2、按“pause”键可以暂停游戏,按“start”键开始游戏;3、点击屏幕变换方块角度,触屏“left”键、“right”实现左、右移动,向下点击加速下移;“up”键实现同一种方块的变形;“switch”键实现方块之间的切换;4、系统能够正确判断是否满行,并对已满的行实现消行并加分5 开发环境与硬件操作系统:ubuntu12.04LTS;开发工具:gnu编译工具链(gcc等)、QtCreator、Qt4.6。

硬件系统:ARM2440、8寸液晶显示屏5.1 Qt简介Qt是跨平台的应用程序和UI框架。

它包括跨平台类库、集成开发工具和跨平台IDE。

使用Qt,只需一次性开发应用程序,无须重新编写代码,便可跨平台不同桌面和嵌入式操作系统部署这些应用程序。

5.2 Qt开发基础5.2.1 Qt对象与对象树QObject是所有Qt类的基类。

QObject 组织成为对象树。

当创建QObject 时,将另外的对象作为其父对象,这个对象就被加入其父对象的children() 列表,并且当父对象销毁时,这个对象也能够被销毁。

事实证明,这种实现方法非常适合GUI 对象。

例如,一个QShortcut(键盘快捷键)对象是相关窗口的子对象,所以当用户关闭窗口时,这个对象也能够被删除。

QWidget 作为所有能够显示在屏幕上的组件的父类,扩展了这种父子关系。

一个子对象通常也成为一个子组件,就是说,它被显示在父组件的坐标系统中,受到父组件的边界影响可能会有剪切等等。

例如,当应用程序销毁掉已关闭的消息对话框时,对话框上面的按钮和标签一起被销毁,就像我们希望的那样,因为这些按钮和标签都是对话框的子对象。

5.2.2 信号与槽在GUI 编程中,当改变了一个组件,经常需要通知另外的一个组件。

更一般地,我们希望任何类型的对象都能够与另外的对象通讯。

例如,如果用户点击了关闭按钮,我们希望窗口的close() 函数被调用。

早期工具库对这种通讯使用回调实现。

回调是一个指向一个函数的指针,所以如果希望某种事件发生的时候,处理函数获得通知,就需要将指向另外函数的指针(也就是这个回调)传递给处理函数。

这样,处理函数就会在合适的时候调用回调函数。

回调有两个明显的缺点:第一,它们不是类型安全的。

不能保证处理函数传递给回调函数的参数都是正确的。

第二,回调函数和处理函数紧密地耦合在一起,因为处理函数必须知道哪一个函数被回调。

在Qt 中,有回调技术之外的选择:信号槽。

当特定事件发出时,一个信号会被发出。

Qt 组件有很多预定义的信号,同时,也可以通过继承这些组件,添加自定义的信号。

槽则能够响应特定信号的函数。

Qt 组件有很多预定义的槽,但是更常见的是,通过继承组件添加你自己的槽,以便你能够按照自己的方式处理信号。

信号槽机制是类型安全的:信号的签名必须同接受该信号的槽的签名一致(实际上,槽的参数个数可以比信号少,因为槽能够忽略信号定义的多出来的参数)。

既然签名都是兼容的,那么编译器就可以帮助我们找出不匹配的地方。

信号和槽是松耦合的:发出信号的类不知道也不关心哪些槽连接到它的信号。

Qt 的信号槽机制保证了,如果你把一个信号同一个槽连接,那么在正确的时间,槽能够接收到信号的参数并且被调用。

信号和槽都可以有任意类型的任意个数的参数。

它们全部都是类型安全的。

所有继承自QObject 或者它的一个子类(例如QWidget)都可以包含信号槽。

信号在对象改变其状态,并且这个状态可能有别的对象关心时被发出。

这就是这个对象为和别的对象交互所做的所有工作。

它并不知道也不关心有没有别的对象正在接收它发出的信号。

这是真正的信息封装,保证了这个对象能够成为一个组件。

槽能够被用于接收信号,也能够像普通函数一样使用。

正如一个对象并不知道究竟有没有别的对象正在接收它的信号一样,一个槽也不知道有没有信号与它相连。

这保证了使用Qt 可以创建真正相互独立的组件。

可以将任意多个信号连接到同一个槽上,也可能将一个信号连接任意多个槽。

同时,也能够直接将一个信号与另一个信号相连(这会使第一个信号发出时,马上发出第二个信号)。

总之,信号槽建立起一种非常强大的组件编程机制。

5.2.3 事件在Qt中,事件是作为对象处理的,所有事件对象继承自抽象类QEvent。

此类用来表示程序内部发生或者来自于外部但应用程序应该知道的动作。

事件能够能过被QObject 的子类接受或者处理,但是通常用在与组件有关的应用中。

当一个事件产生时,Qt 通过实例化一个QEvent 的合适的子类来表示它,然后通过调用event() 函数发送给QObject 的实例(或者它的子类)。

event() 函数本身并不会处理事件,根据事件类型,它将调用相应的事件处理函数,并且返回事件被接受还是被忽略。

一些事件,比如QMouseEvent 和QKeyEvent,来自窗口系统;有的,比如QTimerEvent,来自于其他事件源;另外一些则来自应用程序本身。

通常事件的处理需要调用一个虚函数。

比如,QPaintEvent 事件的处理需要调用QWidget::paintEvent() 函数。

这个虚函数负责做出适当的响应,通常是用来重绘组件。

如果在自己的函数中并不打算实现所有的处理,可以调用基类的实现。

6 系统设计6.1 框架设计6.1.1 俄罗斯方块基本原则一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位一组由4个小型正方形组成的规则图形,通称为方块共有12种。

随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。

每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。

而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度),则游戏结束。

6.1.2 系统模块图1 系统界面如上图所示,系统可由以下几个模块组成:1)虚拟显示屏:为系统核心模块,负责游戏元素的显示、游戏逻辑的执行、以及游戏状态的维护、接收操作模块的操作信息、为辅助显示模块提供必要的信息2)辅助显示模块:显示下一个方块单元的类型、当前分数、当前等级3)操作区模块:为用户提供操作按键6.2 系统实现系统源文件布局如下:图2系统源文件tetrix.pro:系统工程文件tetriswindow.h:tetriswindow类声明头文件tetrispiece.h:tetrispiece类声明头文件tetrisboard.h:tetrisboard类声明头文件tetris.qrc:系统资源文件,存放了表示方向的图像数据tetrispiece.cpp:tetriswindow 类的实现tetrispiece.cpp:tetrispiece类的实现tetrisboard.cpp:tetrisboard类的实现main.cpp:程序入口main.cpp中初始化一个tetriswindow实例,并使其显示t etriswindow对应程序窗口,用于界面设计。

tetrispiece类表示基本方块单元,总共有13种。

用tetrispiecehape来标识方块类型tetrispiece提供了设置方块形状、设置旋转、获取方块信息的一些公共成员函数。

tetrispiece使用coords[13][4][2]这个三维数组来存储方块的形状信息,第一维的每行表示一个点的坐标。

tetrisboard是整个程序的核心,相对前两个类,这个类要复杂很多。

它提供了如下几个槽:start()、pause()、quit()、right()、left()、down()、up()、switch ()、rotateRight()、rotateLeft()来实现具体功能。

7 系统测试图3 Qt界面图4 ARM2440触摸屏上实物图程序的运行界面如上图3所示,实物如图4所示。

经实验测试,该程序不管是在Qt界面下还是在触摸屏上都能完成俄罗斯方块游戏的基本功能。

8 个人完成的部分我主要负责tetriswindow和tetrisboard两部分。

整个程序的设计是在已有的俄罗斯方块的基础上添加5个按键的功能,然后完成按键功能的实现以及按键与事件的连接,最后对界面进行整体布局。

tetriswindow是负责应程序窗口的,在其界面设计包含游戏显示区(tetrisboard)、游戏等级及分数的辅助显示区和一些按键,在tetriswindow的构造函数中完成对界面元素的初始化及布局工作,同时建立起必要的信号-槽连接。

tetrisboard是整个程序的核心。

在其里面添加了几个槽:start()、pause()、quit()、right()、left()、down()、rotate()、switch()、rotateRight()、rotateLeft()。

同时在tetrisboard.h提供了scoreChanged与levelChanged两个信号。

相关文档
最新文档