收藏 分享(赏)

基于qt的打砖块游戏的设计与实现论文.docx

上传人:dreamzhangning 文档编号:3018591 上传时间:2018-10-01 格式:DOCX 页数:61 大小:589.32KB
下载 相关 举报
基于qt的打砖块游戏的设计与实现论文.docx_第1页
第1页 / 共61页
基于qt的打砖块游戏的设计与实现论文.docx_第2页
第2页 / 共61页
基于qt的打砖块游戏的设计与实现论文.docx_第3页
第3页 / 共61页
基于qt的打砖块游戏的设计与实现论文.docx_第4页
第4页 / 共61页
基于qt的打砖块游戏的设计与实现论文.docx_第5页
第5页 / 共61页
点击查看更多>>
资源描述

1、职场大变样社区():下载毕业设计成品全套资料,全部 50 元以下基于 Qt 的打砖块游戏开发摘 要本程序使用的是面向对象的 QT 库的 C+语言开发,在 ubuntu 系统中的 QT Creator 软件中实现构建和运行。游戏包含三种模式,初级,中级,高级。游戏是小球的弹射,把所有的砖块打完胜利。本论文首先指出了打砖块游戏、Linux 桌面环境、QT 开发环境的发展现状,然后重点介绍了 QT 开发工具的使用、打砖块游戏的玩儿法、打砖块程序的界面设计、规则设计、输赢判断、以及作为一款游戏的其他必须功能,最后介绍了Linux 桌面环境 和 QT 的发展。本设计通过一个休闲类游戏的开发,阐述了休闲类

2、游戏的开发过程,包括软件开发的逻辑分析,程序设计,软件实现和软件测试几个步骤。关键词:打砖块; ubuntu 系统;QT 开发环境Brickbat development based on QtAbstractThis procedure is the use of object-oriented QT library C+ language development, the QT system in the Creator Ubuntu software to achieve construction and operation. The game contains three modes,

3、 primary, intermediate, advanced. The game is the ejection of the ball, all the bricks on the victory.This paper first points out the arkanoid game, Linux desktop environment, Qt development environment development present situation, and then focuses on the Qt development tools used, arkanoid game p

4、laying method, playing bricks program interface design, design rules, to determine the winners and losers, and as a game the other must function. At last, the paper introduces the development of Linux desktop environment and QT.This design through a leisure class game development, elaborated the lei

5、sure class game development process, including the software development logic analysis, the programming, the software realization and the software test several steps.Key words:block breaker;Ubuntu system;QT development environment目 录1 背景 .11. 1 系统开发背景 .11. 2 打砖块简介 .21. 2. 1 打砖块游戏规则 21. 2. 2 打砖块游戏简介

6、.21. 2. 3 娱乐身心 .31. 3 相关实现环境 .31. 4 主要实现内容 .31. 5 系统开发的现实意义 32 开发工具 .52. 1 QT 简介 52. 1. 1 信号与槽 .52. 2 UBUNTU 系统的简介 72. 2. 1 ubuntu 历史和发展 82. 2. 2 ubuntu 系统的特色 92. 3 VMWARE 虚拟机的介绍 .102. 3. 1 vmware 的主要功能 102. 4 开发环境的配置 .102. 4. 1 vmware 虚拟机的安装 112. 4. 2 ubuntu 系统的安装 112. 4. 3 qt creator 软件的安装 .112. 5

7、 小结 .113 打砖块需求分析 .123. 1 打砖块游戏程序界面的需求 .123. 2 打砖块游戏规则的需求 .123. 3 打砖块游戏的对象的需求 .124 打砖块总体设计 .144. 1 主要模块简介 .144. 2 程序功能设计 .145 程序实现 .165. 1 界面实现 .165. 2 功能的实现 .165. 2. 1 小球类 Ball 175. 2. 2 砖块类 Brick195. 2. 3 划桨类 Paddle205. 2. 4 Game 游戏窗格 235. 2. 5 Gamewindow 游戏主窗口 .335. 2. 6 main 函数 .376 程序测试 .396. 1

8、程序启动 .396. 2 游戏运行碰撞 .396. 3 游戏判断输赢 .406. 4 程序测试结果 .417 程序开发的意义和展望 .42结论 .43参考文献 .44致谢 .45外文原文 .46外文翻译 .531 背景1. 1 系统开发背景随着网络技术的日新月异和计算机的普及,当今的计算机技术也走上了平民化和娱乐化的时代,计算机技术再也不是只能由少数人掌握的深不可测的学问;同时个人电脑也由原来单纯的数值计算和工业应用逐渐转变成像电视机一样的家庭娱乐中心,随着科技的飞速发展计算机软件的发展也走向了娱乐化。尤其是游戏产业的发展已经成为信息产业中发展势头最猛烈最具前景的一个分支,而游戏厅也渐渐被网吧

9、挤出了正常的营业市场,游戏除了单纯的个人娱乐功能之外,也逐渐向互动的方向发展。游戏的功能不断按照玩家的需求和爱好扩展延伸进化,如今运行在各种平台上不同名称,不同内容,不同形式的游戏不仅仅为广大游戏爱好者提供了丰富的选择,而且为游戏开发商带来了丰厚的回报,游戏产业吸引着许多程序员去开发更多更新的游戏。基于游戏发展的历史和前景,本文中决定用 C+语言开发一款小游戏,游戏内容来自网络上日渐流行的一种休闲类游戏打砖块。本文中想把这种游戏,变成一种简单的,可以在 linux 系统上玩儿的游戏,以便供广大玩家玩儿。打砖块游戏从儿时开始,也是随着时代的发展而发展,衍生出了很多的各种各样的类似的游戏,还是很受

10、大部分游戏玩家的喜爱。由于游戏简单,容易上手,很多的小孩子都可以玩儿。而且这个游戏主要的是联系玩儿家的反应力。说起游戏软件,大部分的人会觉得很神秘,通过一些代码的操作,就可以实现一款游戏,而且让人们玩儿的很开心。其实游戏开发,已经越来越被人们接受了,越来越多的人们加入到游戏开发的行业中。作为最最古老的游戏之一的打砖块游戏,各类版本是不计其数。但是,复杂的算法和设计难度,让游戏初学者望而却步。本文是在 qt 来实现这个游戏的制作,对于一些初学者是一个很好的例子,而且可以了解这款软件的详细开发过程。1. 2 打砖块简介打砖块游戏是一种动作电子游戏的名称。玩家操作一个可以水平移动的划桨,让一颗不断弹

11、来弹去的“球”在来回撞击砖块途中不会落到游戏界面的外面。球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。始祖是史蒂夫乔布斯与他的好友沃兹(苹果公司的另一位创始人)于 1975年的夏末,花了四天时间设计完成的游戏乒乓。同时,美国英宝格公司(en:Atari Games,ja: ())于 1976 年推出的街机游戏“Breakout”,由该公司在 1972 年发行的“PONG”(en:PONG,ja: (),世界上第一款电子游戏,类似台球)改良而来。相较于其前作,一个人就可以玩与变化丰富这两项特点让 Breakout 相当卖座,使各家公司竞相模仿。因为规则简

12、单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多因特网小游戏版本。打砖块游戏一般不大,甚至用软盘即可容下。1. 2. 1 打砖块游戏规则用一根棒子,把落下的小球反弹回去,把上方所有的长方形砖块全部打落下来,就可以通关。砖块的摆放形状,和坚硬程度,小球的速度快慢,还有短棒的长短都是可以变化的。1. 2. 2 打砖块游戏简介打砖块游戏相必都不回陌生,从小时候的小霸王游戏机上就有的一款很经典的游戏,风靡一时,打砖块游戏容易上手,游戏的变化性,可玩儿性都非常高,而且随着社会的发照,打砖块游戏适应与各个平台,界面做得也是越来越好,所以,现在的打砖块游戏页非常火。那什么是打砖块游戏呢,就是一款游戏

13、界面的下方有一个划桨,用来接球,然后又一个小球可以在游戏界面里碰到阻碍物就反弹,然后不让小球落地,把游戏界面上放的砖块全部打完。游戏就过关了。1. 2. 3 娱乐身心游戏是否能够让玩家娱乐身心,取决于它的可玩儿性,是否有挑战性,这是一款游戏的关键所在。很多人玩儿游戏就是为了过关,特别是单机游戏,过不了关就会一直玩儿下去,直到过关为止。1. 3 相关实现环境本程序采用 QT 库及其开发环境,使用 C+语言开发运行于 Linux 的 ubuntu系统中的 qt creatot 软件的打砖块游戏。 经过实际检测,QT 强大的跨平台性,已经保证了同样的代码在 Windows XP 下、Linux GN

14、OME 下、Linux KDE 下,几乎不用修改就能正常运行。本程序使用的软件是 Qt creator5.4 ,运行在 Vmware 虚拟机上 ubuntu 系统 64位 14.04.1 版本。1. 4 主要实现内容1,可以简便的开始游戏,游戏中的功能与日常我们所熟悉的游戏的功能一致,直到砖块全部打光过关和在砖块打光之前机会用完游戏结束功能。2,当游戏结束时会弹出消息框提示游戏是否胜利等。3,游戏的开发环境是 qt creator 5.4.4,游戏开始的时候,小球会停在挡板中间,而且此时的小球可以随着挡板左右移动,当按下开始键的时候小球弹出,并在程序设定的区域中不停的碰撞反弹。5,当小球碰撞到

15、墙壁,挡板和砖块的时候,均以相同的速度反弹,并且砖块被碰撞后会消失。6,划桨左右移动接住落下的小球,如果没有接住,游戏就结束,是失败者,当砖块全部打光时出现胜利,是一个胜利者。1. 5 系统开发的现实意义根据平时的所学知识,在毕设的时候能够熟悉 C+语言的多变性,锻炼在项目上的实践能力,学会熟练的使用 qt 开发框架,这样既回味了儿时的一款经典游戏,而且做这个游戏,对也是一个挑战,也是能力提升的好机会。 在设计中,本文中先试调查了这个游戏,翻阅相关的文档资料,然后写需求文档,根据文档的步骤一步一步的把这个设计完成。给了很多的启发,对细心,耐心也是一个考验。同时对专业知识也是一个重大的考验,完善

16、了自己很多方面的知识。综上所述,通过打砖块游戏的开发,可以深入了解 c+编程方法、加深了解算法,对逻辑思维和细心耐心是一种锻炼。2 开发工具2. 1 QT 简介 Qt 是一个多功能型的,一种对于 c语言的一种程序设计开发框架,是挪威公司设计开发上线的一款产品,现在的开发平台的很多,比如 windows 系统,unix 系统,和 linux 系统,都可以适用,还有 mac 系统,还有 winntwin2k 和win95/98 平台。由这个公司开发的产品还有 qt designer 快速开发工具,基于framebuffer 的 qt embedded,国际化的 qt linguist 等。Qt 为

17、 c用户提供了可供观察的图形界面,让 c开发人员更佳直观的能看到自己多的项目,同时,增加了,项目的美观性,还可以份文件编程,饰代码的可读性提高,还有 ui,可以不通过编写代码,进行一些简单的操作。这对于c开发人员面对无聊枯燥的代码,是一个很大的帮助。面向对象:Qt 拥有良好的封装性,通过在 qtapp 中进行新建文件,可以进行多文件的封装,可以把一个项目,通过同学合作的方式,一部分一部分实现,把一个繁琐的项目,分成一个一个的小项目,对于发开来说,简单了很多,每个人只需要完成自己的部分,然后把代码拷贝到一起,就可以运行。丰富的 API:Qt 有 200 多个类,可以满足程序开发人员在开发过程中的

18、各种要求,类的重写,重载,方式多种多样,对于程序员是很大的福利。不需要每个类都一个字一个字去敲。2. 1. 1 信号与槽QT 开发框架不同于别的开发框架,最大的特点,就是信号与槽。信号和槽用于对象间的联系,进行通信的手段。信号和槽机制是 Qt 开发框架的最大的特征,并且也是 Qt 开发框架与其它的开发框架最不相同的部分,连接如图 2-1 所示:图 2-1 信号和槽连接的摘要图在有图形界面的代码编程过程中,我们经常非常希望自己所写的一个窗口部件的一个变化,通过一定的方式被另一个自己所写的窗口部件所接受到信息。更加通俗的说,我们希望所有自己定义的对象可以和任何一个对象进行信息传递。例如,如果我们正

19、在解析一个 XML 文件,当我们遇到一个新的标签时,我们也许希望通知列表视图我们正在用来表达 XML 文件的结构。在 Qt 发开框架中有一种可以替代 jsp 中回调函数的技术。我们使用信号和槽的这种机制,进行信息的传递。当一个事件发生的时候,会生成一个信号,这个信号立马被发射。然后还有一个槽进行接受自己发送的信号。qt 开发框架有非常多的自己定义的信号,比如,点击,事件信号等等。但是我们在开发的过程中,总是希望通过继承和多态来加入我们自己定义的信号。槽是一个特别重要的,一个可以被用来接收自己定义,或者是 Qr 自己定义的信号。Qt 也有很多自己定义的槽,比如关闭,打开,点击等,但是通常的习惯是

20、你可以加入自己的槽,这样你就可以处理你所感兴趣的信号。 信号和槽的机制是类型安全的:信号签名必须和自己接收的槽签名进行一一对应,就是保持一致。(实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额外的签名。)因为信号和槽的签名是一致的,所以编译器就可以在我们编写代码的时候帮助我们检测类型到底匹配还是不匹配。信号和槽是宽松地联系在一起的:一个发射信号的类它只管自己在特定的条件去发送这个信号就好了,不用知道也不用注意哪个槽要接收这个信号。Qt 的信号和槽的这种安全机制可以保证如果你把一个信号和一个槽函数连接起来的话,槽函数会在特定的时间,也就是事件发生的时候使用信号的参数而顺利的被调用。

21、信号和槽函数在信息通信的过程中可以使用不同数量、不同任何类型的参数。信号和槽是完全类型绝对安全的,不会出现核心已转储的错误。信号与槽机制是一个函数,原型如图 2-2 所示:图 2-2 信号和槽函数原型图QObject:connect( Ball();void move();QRectF rect() const;void setShape( const QRectF void setColor( const QColor void setDirX( qreal );void setDirY( qreal );void setSpeed( qreal );QRectF getShape() co

22、nst;QColor getColor() const;qreal getDirX() const;qreal getDirY() const;qreal getSpeed() const;private:QRectF *shape;QColor color;qreal dirX;qreal dirY;qreal speed;#endifshape 用来指向包含小球位置和尺寸信息的 QRectF 对象,这里使用 QRectF 而不是 QRect,是因为 QRectF 中使用 qreal 变量来保存矩形的位置和尺寸信息,而 QRect 使用 int 类型变量来保存信息,因此,使用 QRectF

23、能跟精确地保存小球的位置和尺寸信息,尤其是当对程序窗口进行缩放时,这种效果更明显,其中,qreal 类型相当于 double 类型。color 变量用来包含小球的颜色。此外,使用 qreal 类型 dirX 和 dirY 变量来分别表示小球在水平方向和垂直方向的运动方向。setShape 函数用来对 shape 变量进行新的设置,而 getShape 函数用来返回 QRectF 对象,包含 shape 变量的副本。当窗口需要进行绘制时,这时窗口就需要使用 getShape 函数来得知小球的大小和方位,这样才能正确绘制小球。setDirX 和 setDirY 函数用来设置小球的移动方向,特别时当

24、小球与窗口边缘、划浆、砖块进行碰撞时,就需要改变小球的移动方向。ball.cpp#include “ball.h“Ball:Ball( qreal x, qreal y, qreal radius, QColor ballColor )dirX = 1.0;dirY = -1.0;speed = 1.0;shape = new QRectF( x, y, radius, radius );color = ballColor;void Ball:move()shape-setLeft( shape-left() + dirX );shape-setRight( shape-right() + d

25、irX );shape-setTop( shape-top() + dirY );shape-setBottom( shape-bottom() + dirY );void Ball:setSpeed( qreal newSpeed )speed = newSpeed;setDirX( speed );setDirY( -speed );在这儿得注意一点,就是小球坐标的设置,我是按照常规的坐标系进行的设置,所有,我小球的初始化信息是 1,-1 这样子。setSpeed() 函数用来设置小球的移动速度,move ()函数则用来使小球移动,需要注意的是,调用 QRectF 函数的 setLeft

26、()函数设置小球的左边缘时,小球的宽度也会随着改变,为防止小球的尺寸发生改变,需要使用 setRight() 函数进行同样的设置, 这样才能保持小球的宽度不变。5. 2. 2 砖块类 Brickbrick.h#ifndef _BRICK_H_#define _BRICK_H_#include #include class Brickprivate:QRectF *shape;QColor color;#endif这个类主要是进行砖块的属性设置,比如砖块的信息,包括颜色信息和砖块的边界信息。还有定义一些要用的方法,比如初始化砖块颜色和边界,还有拿到砖块颜色和边界。brick.cpp#includ

27、e “brick.h“Brick:Brick( qreal x, qreal y, qreal width, qreal height, QColor brickColor )shape = new QRectF( x, y, width, height );color = brickColor;void Brick:setShape( const QRectF QRectF Brick:getShape() constreturn QRectF( shape-left(), shape-top(),shape-width(), shape-height() );具体的告诉,砖块的颜色是 qc

28、olor 类,图形边界是 Qrectf 类进行实例化。而通过 width()和 height()可以拿到砖块的长和高。5. 2. 3 划桨类 Paddlepaddle.h#ifndef _PADDLE_H_#define _PADDLE_H_#include #include class Paddlepublic:Paddle( qreal, qreal, qreal, qreal, QColor = Qt:blue );Paddle();QRectF getShape() const;QColor getColor() const;qreal getLeft() const;qreal ge

29、tRight() const;qreal getStep() const;void setShape( const QRectF void setColor( const QColor void setLeft( qreal );void setRight( qreal );void setStep( qreal );void moveLeft();void moveRight();private:QRectF *shape;QColor color;qreal step;#endif与 Ball 相同的是他们都有 shape()和 color(),都需要有颜色属性和边界的属性。与 Ball

30、不同的是 ,Paddle 中含有 setStep 函数,用来设置划浆移动的步长 ,特别是当程序的窗口进行缩放时,划浆每次移动的距离也应相应地发生改变.还有向左移,向右移,操作的控制,首先是先进行向左向右移的操作,再得到信息,然后进行图形界面的变动。paddle.cpp#include “paddle.h“#include #include Paddle:Paddle( qreal x, qreal y, qreal width, qreal height, QColor paddleColor )shape = new QRectF( x, y, width, height );color =

31、 paddleColor;step = 10.0;void Paddle:setShape( const QRectF void Paddle:moveLeft()shape-setLeft( shape-left() - step );shape-setRight( shape-right() - step );void Paddle:moveRight()shape-setLeft( shape-left() + step );shape-setRight( shape-right() + step );void Paddle:setStep( qreal newStep )step =

32、newStep;qreal Paddle:getStep() constreturn step;moveLeft 和 moveRight 函数来提供了控制划浆移动的接口,每次移动的距离由移动步长变量 step 来控制。初始化划桨的时候也是通过初始化划桨的坐标,长,宽来设定划桨的边界。5. 2. 4 Game 游戏窗格game.h#ifndef _GAME_H_#define _GAME_H_#include “ball.h“#include “paddle.h“#include “brick.h“#include 把小球,划桨和砖块的定义文件都添加进来供使用,在这个文件中可以用到上面三个类中的

33、各种各样的方法。class QTimer;class Game : public QWidgetQ_OBJECTpublic:Game( QWidget * = 0 );Game();void setBallSpeed( qreal );void setBricksNumbers( int , int );void setPaddleStep( qreal );设置了小球的初始移动速度,砖块的布局,数量,还有划桨的移动时候的快慢。signals:void finished();void scoreChanged( int );public slots:void moveBall();void

34、changeColor();void movePaddleLeft();void movePaddleRight();void startGame();void stopGame();这部分就是一些信号和槽,通过一些自己定义的信号和系统里面自己带的信号,就可以触发对应的槽函数,来做对应的操作。protected:void paintEvent( QPaintEvent * );void resizeEvent( QResizeEvent * );这是两个事件处理函数,意思是只要有事件的满足条件发生,这个函数就会产生作用,开始被使用。这是 qt 中的一个很好的方法。private:void cr

35、eateBricks();void createPaddle();void createBall();QRectF adjustShape( QRectF, qreal, qreal );QColor randomColor();int randomInt( int );Ball *ball;Paddle *paddle;QList bricks;QTimer *timer;int rows;int columns;int score;bool isWin;bool isFailure;double frameWidth;double frameHeight;#endif这一部分就是对小球,划

36、桨和砖块的具体的声明,还有定时器,还有一些在实现文件中要用到的一些变量,比如分数等。当然还有游戏的边框设置等等。game.cpp#include “game.h“#include #include #include QDebug 可以输出一些东西。 QTime 是一个定时器类。#include #include Game:Game( QWidget *parent ):QWidget( parent )isWin = false;isFailure = false;frameWidth = 800;frameHeight = 500;score = 0;rows = 5;columns = 1

37、0;createBricks();createPaddle();createBall();timer = new QTimer( this );timer-setInterval( 10 );connect( timer, SIGNAL( timeout() ), this, SLOT( moveBall() ) );changeColor();bool 类型变量 isWin 和 isFailure 用来记录程序程序结束时的胜利或失败的情况。frameWidth 和 frameHeight 用来保存每一时刻的窗格的大小,注意,初始化值宽度 800 和高度 500 并不代表窗格的实际大小,这里只

38、是提供了一个理想的值,因为小球、划浆、砖块的大小的设定都需要窗格的大小来设定。构造函数中调用 createBrick()、createPaddle()、createBall() 函数,用来对砖块、划浆、和小球进行初始化。之后,设定定时器,每个 10 毫秒将调用一次moveBall 函数。最后,调用 changeColor 函数用来改变小球、砖块、划浆的颜色,函数 random-Color 将返回一个随机颜色。void Game:changeColor()srand( (int) time( NULL ) );foreach( Brick *brick, bricks )brick-setColor( randomColor() );ball-setColor( randomColor() );paddle-setColor( randomColor() );QColor Game:randomColor()return QColor( randomInt( 255 ), randomInt( 255 ), randomInt( 255 ) );

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报