Qt贪吃蛇.docx

上传人:b****6 文档编号:5363184 上传时间:2022-12-15 格式:DOCX 页数:25 大小:186.95KB
下载 相关 举报
Qt贪吃蛇.docx_第1页
第1页 / 共25页
Qt贪吃蛇.docx_第2页
第2页 / 共25页
Qt贪吃蛇.docx_第3页
第3页 / 共25页
Qt贪吃蛇.docx_第4页
第4页 / 共25页
Qt贪吃蛇.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

Qt贪吃蛇.docx

《Qt贪吃蛇.docx》由会员分享,可在线阅读,更多相关《Qt贪吃蛇.docx(25页珍藏版)》请在冰豆网上搜索。

Qt贪吃蛇.docx

Qt贪吃蛇

嵌入式大作业

Ubuntu平台贪吃蛇游戏的设计与实现

作者姓名:

学科、专业:

学号:

指导教师:

完成日期:

 

大连大学

DalianUniversity

 

教师批阅页

 

选题分

内容分

格式分

态度分

总计:

 

简略给出评语或指出文中问题:

 

评阅人:

完成日期:

摘要

随着计算机的普及,电脑游戏也慢慢融入人们的生活中,成为人们放松心情的一种方式。

贪食蛇作为一款经典且易于操作的游戏,一直受到人们的青睐,在繁忙的工作之余,玩贪食蛇游戏实在是既省钱又有趣味的休闲方式。

本设计遵循C++程序设计的基础原理,制作出一个精美的贪吃蛇小游戏。

本设计采用QtCreater作为主要的开发工具,很好的实现了贪吃蛇游戏的基本功能。

关键词:

C++;贪吃蛇;QtCreator

 

摘要3

前言1

第一章Qt库的优点2

1.1可移植性2

1.2易用性2

1.3运行速度2

第二章课程设计目的和要求4

2.1主要研究内容4

2.2目标(要求)4

2.3课程设计任务内容4

第三章详细设计5

3.1设计思想5

3.1.1界面设计5

3.1.2数据结构6

3.2函数设计8

3.2.1文件及函数组成8

3.3.流程图9

3.3.1系统流程图9

3.3.2函数流程图11

第四章程序测试20

第五章设计心得与体会25

参考文献26

附录27

 

 

前言

QtCreator是跨平台的QtIDE,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。

此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。

QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。

在功能方面,QtCreator包括项目生成向导、高级的C++代码编辑器、浏览文件及类的工具、集成了QtDesigner、QtAssistant、QtLinguist、图形化的GDB调试前端,集成qmake构建工具等。

QtCreator主要是为了帮助新Qt用户更快速入门并运行项目,还可提高有经验的Qt开发人员的工作效率。

使用强大的C++代码编辑器可快速编写代码语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能使用浏览工具管理源代码集成了领先的版本控制软件,包括Git、Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换为Qt跨平台开发人员的需求而量身定制集成了特定于Qt的功能,如信号与槽(Signals&Slots)图示调试器,对Qt类结构可一目了然集成了QtDesigner可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。

虽然贪吃蛇游戏在我们的日常生活中是很常见的,但是作为普通的一款小游戏,他却有着极强的生命力,它的简单易行使之广泛的存在于电脑,手机等电子产品载体上,加上变化无穷、引人入胜,使它成为了一款受人喜欢的小游戏。

第一章Qt库的优点

GUI工具包(或GUI库)是构造图形用户界面(程序)所使用的一套按钮、滚动条、菜单和其他对象的集合。

在UNIX系统里,有很多可工使用的GUI库,其中之一就是Qt库,它是一个几乎C++编程语言的工具包。

由于Qt是基于C++而不是C,故他的有点是速度快、易于使用,并具有很好的可移植性。

所以,当需要开发Unix或MSwindows环境下的GUI程序时,Qt是最佳选择。

1.1可移植性

Qt不只是适用于Unix,它同样适用于MSWindows。

Windows平台下用标准库MicrosoftFoudationClasses(MFC,Microsoft基类),它不适用于其他平台。

GTK或Xforms,又不能支持Windows平台。

既适合windows平台又适合Linux平台的GUI工具包,那就是Qt。

1.2易用性

Qt是一个C++工具包,它由几百个C++类构成,在程序中可以使用这些类。

Qt是基于C++构造,所以具有OOP(object_orientedprogramming)的优点。

1.3运行速度

Qt非常容易使用,而且速度也很快。

这两方面通常是不可能同时达到。

GUI工具包,通常速度都不快,而Qt的这一有点归功于Qt开发者的功劳,他们大大优化了Qt的这一产品。

Qt是一个GUI仿真工具包,这意味着它不使用任何本地工具包作调用。

第二章课程设计目的和要求

2.1主要研究内容

论述基于Qt下的贪吃蛇游戏设计。

通过对Qt下的贪吃蛇游戏分析,结合游戏中的逻辑和操作需求,说明Qt下的贪吃蛇游戏设计的开发过程及各种技术细节;结合所要开发的系统的特点,采用QtCreator开发工具。

2.2目标(要求)

对基于Qt下的贪吃蛇游戏设计逻辑级操作分析。

设计一个简单,漂亮的贪吃蛇游戏用以玩耍

2.3课程设计任务内容

程序要求游戏时,分为两种模式,允许穿墙模式和禁止穿墙模式,可以随意选择切换。

禁止穿墙模式:

一条蛇在的围墙内,围墙内会随机出现一个食物通过键盘上的4个方向键控制蛇向上下左右4个方向移动,蛇头接到食物,则表示食物被蛇吃掉,这时蛇的身体加长一节,同时计10分。

接着又出现食物等待被蛇吃掉。

如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体),则游戏结束。

分数每增加100分,游戏等级升1级即速度加快1级。

允许穿墙模式:

如果蛇在移动过程中,撞到墙壁会穿过从该墙的对面传出,游戏不会结束,身体交叉(蛇头撞到自己的身体),则游戏结束。

其他记分、等级规则与禁止穿墙模式相同。

第三章详细设计

3.1设计思想

3.1.1界面设计

这个游戏程序的关键是表示蛇的图形以及蛇的移动。

用一个小小方格来表示蛇的一节身体,身体每长一节,增加一个小方格。

移动时必须从蛇头开始,如果不按任何键,蛇自行在当前方向上向前移动,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,首先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇的整个身体,在界面的游戏框中随机出现一个静止静止不动的食物,用户通过键盘来控制蛇的走向,当蛇吃到食物时,分数增加十分,界面开始更新,蛇的身体增加一节,游戏框中又会随机出现一个静止不动的食物

在禁止穿墙模式下,当蛇头碰到游戏框边框的时候或者蛇头碰到自己的身体的时候,游戏自动结束。

在可以穿墙的模式下,蛇头碰到游戏框边框的时候,蛇会从该边框的对面穿出,游戏不会结束,当蛇头碰到自己的身体的时候,游戏结束。

两种模式下,蛇每吃到一个食物,增加10分,分数每累积够百分,游戏等级增加1级,游戏速度加快1级,在游戏界面的上会有同步分数和等级的数码显示。

在游戏中,还增加了游戏暂停功能,当游戏需要暂停时,按下暂停功能键p键,游戏在停,如果按下任意方向键,游戏继续。

 

3.1.2数据结构

QtSnake.h文件及类的设计如表3-1所示。

表3-1

文件名

成员类型

成员

功能

QtSnake.h

public

Snake(QWidget*=0)

容器选取

private

charSnakeBody[Max][2]

intheader_Index,

Inttail_Index

inteat_X,eat_Y

intlevel

intspeed

intscore,eatNum

intmap_row,map_col

intDir

intstep

inttempx,tempy

boolCanGoThroughWall

boolhasMoved

程序所需变量

QLCDNumber*levelNumber

QLCDNumber*scoreNumber

QLabel*label

QLabel*levelLabel

QLabel*scoreLabel

QLabel*setlabel

Qtimer*timer

QPushButton*button

布局选取

voidiniWidget()

voidiniConnect()

boolisEating()

boolisGameOver()

voidiniGame()

voidchangeScore()

voidchangeLevel()

QColorgetColor()

功能函数

privateslots

voiddoMoveSnake()

voidsetEnableGoThroughWall()

信号槽函数

protected

voidpaintEvent()

voidkeyPressEvent()

受保护函数

 

类容器设计:

classSnake:

publicQWidget

{

Q_OBJECT

public:

Snake(QWidget*=0);

private:

charSnakeBody[Max][2];//存储蛇的身体坐标信息

intheader_Index,tail_Index;//蛇头、尾在数组的位置

inteat_X,eat_Y;//出现吃的位置

intlevel;//等级

intspeed;//蛇的速度

intscore,eatNum;//得分

intmap_row,map_col;//地图太小

intDir;//当前蛇移动方向

intstep;//步距

inttempx,tempy;//蛇头下一位置临时存放

boolCanGoThroughWall;//是否能穿墙

boolhasMoved;//用于避免两次方向键之间间隔太小造成的错误

QLCDNumber*levelNumber;//等级LED

QLCDNumber*scoreNumber;//分数LED

QLabel*label;//游戏框

QLabel*levelLabel;//等级标签

QLabel*scoreLabel;//分数标签

QLabel*setlabel;//模式标示

Qtimer*timer;//游戏计时器

QPushButton*button;//选择模式按钮

voidiniWidget();//初始化容器状态

voidiniConnect();//信号连接

boolisEating();//蛇要吃食物

boolisGameOver();//判断游戏结束

voidiniGame();//初始化游戏

voidchangeScore();//更新得分

voidchangeLevel();//更新等级

QColorgetColor();//食物变色

privateslots:

voiddoMoveSnake();//蛇移动每一步状态

voidsetEnableGoThroughWall();//设置是否允许穿墙

protected:

voidpaintEvent(QPaintEvent*);//绘画蛇身,食物

voidkeyPressEvent(QKeyEvent*event);//捕获按键信号

};

3.2函数设计

3.2.1文件及函数组成

源文件

函数名称

功能

main.cpp

main

总控函数,增加了编码格式,窗口标题

QtSnake.cpp

Snake:

:

Snake(QWidget*parent)

初始化容器的总体状态

voidSnake:

:

iniWidget()

初始化容器中的各个窗口和标签的位置,字体大小,变量值

voidSnake:

:

iniConnect()

开启模式选择按键,方向键,暂停键的信号捕捉

voidSnake:

:

iniGame()

初始化游戏的速度、级别、食物分数,蛇身坐标,食物坐标,计分器,级别器

voidSnake:

:

doMoveSnake()

每一步做一次游戏结束判断,然后改变蛇的状态,随机出现食物

voidSnake:

:

setEnableGoThroughWall()

判断穿墙变量,为真,设置为模式标示为“可以穿墙”模式为假为“禁止穿墙”模式

voidSnake:

:

changeScore()

蛇吃到食物的分数增加

voidSnake:

:

changeLevel()

改变游戏等级,速度

boolSnake:

:

isEating()

蛇吃食物的状态实现

boolSnake:

:

isGameOver()

首先判断游戏是否处于穿墙模式,穿墙模式下,蛇头碰到自己的身体游戏结束,禁止穿墙模式下,蛇头碰到边框或者身体游戏结束,游戏结束返回ture

VoidSnake:

:

paintEvent()

游戏开始时,在随机坐标画出蛇身和食物,游戏中描绘蛇的运动轨迹,并随机补充食物

voidSnake:

:

keyPressEvent()

捕捉4个方向键和p键(暂停键)的信号

QColorSnake:

:

getColor()

存放了8种颜色用于随机选取

3.3.流程图

3.3.1系统流程图

开始

载入游戏,初始化游戏界面

按任意方向键开始游戏,随机出现一个食物,并用方向键控制蛇的游动方向

游戏模式判断

是否碰到自己的身体

是否碰到自己的身体

允许穿墙禁止穿墙

 

是否碰到墙壁

YNNY

是否吃到食物

N

Y

蛇身增加1格,分数加10

吃掉食物数*10是否等于分数

YN

保持原状

等级加1,速度增加

 

宣布死亡

结束

 

图3.1

3.3.2函数流程图

main函数流程图如图3.2所示

开始

调用游戏主控函数

调用编码函数,选择编码"UTF-8"

设置游戏窗口标题"贪吃蛇"

调用显示窗口函数,开始运行游戏

结束

 

如图3.2

QColorSnake:

:

getColor()函数流程图如图3.3所示

开始

将8种颜色放入一个8

个元素的数组中

 

随机选择一种颜色返回

 

结束

 

图3.3

 

Snake:

:

Snake(QWidget*parent)函数流程图如图3.4所示

开始

初始化游戏窗口的位置,大小。

默认游戏模式为禁止穿墙

调用:

容器初始化容器,槽函数初始化信号函数,游戏初始化函数

 

结束

图3.4

voidSnake:

:

iniWidget()函数流程图如图3.5所示

开始

初始化:

分数标签,分数LED,等级标签,等级LED,模式标示窗口(位置,大小,字体)

 

初始化模式选择按钮的位置,大小,字体

初始化提示窗口的位置,字体,大小

初始化游戏框的位置,大小,边框宽度

结束

 

图3.5

voidSnake:

:

iniConnect()函数流程图如图3.6所示

开始

捕捉信号:

游戏控制键(上、下、右、左、暂停),模式改变按钮,其他

调用模式改变槽函数

调用游戏控制槽函数

游戏控制键模式改变按钮

 

结束

图3.6

voidSnake:

:

iniGame()函数流程图如图3.7所示

开始

初始化游戏:

速度,吃食数,分数,等级

 

将分数,等级初始值显示在

LED上

定义蛇身数组大小,随机获取蛇头和食物坐标

时间暂时停止,暂时设定方向变量Dir=-1(没有方向,等待方向键信号)

 

结束

图3.7

 

voidSnake:

:

doMoveSnake()函数流程图如图3.8所示

开始

 

游戏开始变量设为ture

(游戏开始)

判断游戏是否为结束状态

 

蛇是否吃到食物

游戏结束并显示提示信息“gameover”,游戏状态设为最初状态

吃到食物,蛇身加长1

格,分数加10

Y

N

随机出现食物,并获取食物坐标

食物坐标是否与蛇身重合

N

Y

将处理后的状态更新

结束

 

图3.8

voidSnake:

:

setEnableGoThroughWall()函数流程图如图3.9所示

开始

穿墙判断变量取反

判断变量时ture/false

turefalse

禁止穿墙

允许穿墙

结束

图3.9

voidSnake:

:

changeScore()函数流程图如图3.10所示

开始

 

蛇是否吃到食物

 

YN

分数加10,并且在

LED上显示

结束

 

如图3.10

voidSnake:

:

changeLevel()函数流程图如图3.11所示

开始

吃掉的食物乘以10是否等于分数

 

YN

不做改变,将原有等级在

LED上显示

等级加1,速度增加,吃食数量加10,并在LED显示

 

结束

 

图3.11

boolSnake:

:

isEating()函数流程图如图3.12所示

开始

判断蛇头的当前坐标是否等于食物的坐标

 

YN

没有吃到返回false

吃到食物返回ture

 

结束

图3.12

 

开始

是否能穿墙

boolSnake:

:

isGameOver()函数流程图如图3.13所示

 

能不能

蛇头是否碰到身体

蛇头是否碰上身体

NN

蛇头是否碰到墙壁

Y

YN

Y

函数返回ture(游戏结束)

结束

函数返回false(游戏继续)

 

图3.13

 

voidSnake:

:

paintEvent(QPaintEvent*event)函数流程图如图3.14所示

 

开始

 

i=蛇头的映射

画蛇的身体

i!

=蛇尾的映射

画出蛇的一个身体

Y

N

N

游戏处于激活状态

画食物

在坐标范围内随机画出一个食物

 

结束

 

图3.14

 

voidSnake:

:

keyPressEvent(QKeyEvent*event)函数流程图如图3.15所示

开始

捕捉按键信号:

方向键(上、下、右、左),暂停键(p),其他

判断输入的方向

方向键

其他

上下右左

是否与运动垂直

是否与运动垂直

是否与运动垂直

是否与运动垂直

暂停键

暂停游戏

 

是否是否是否是否

向上运动

向上运动

向上运动

向上运动

向上运动

向上运动

向上运动

向上运动

 

结束

图3.15

第四章程序测试

 

运行程序,默认是“禁止穿墙”模式,分数为0,等级为0。

 

按下任意方向键,游戏开始,游戏窗口出现一个食物。

 

此时蛇向下运动,分数是30

吃到一个食物后,分数加10

 

蛇吃掉10个食物,吃食数乘以10,等于分数100,等级加1

“禁止穿墙”模式下蛇碰到墙壁游戏结束,消息框弹出

 

“禁止穿墙”模式下蛇碰到自己身体游戏结束,消息框弹出

“穿墙模式”下蛇从左边墙壁传入,从右边墙壁传出

 

“穿墙模式”下蛇从下边墙壁传入,从上边墙壁传出

“禁止穿墙”模式下蛇碰到自己身体游戏结束,消息框弹出

第五章设计心得与体会

贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。

这次编程我通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。

虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。

这个题目的选定是来源我学习生活的一个例子,从程序的选定到程序的构思,再到程序的编写都花了我很长的时间,几乎每天都熬夜,真得很辛苦,但完成后又有一种很踏实的感觉。

编写程序很辛苦,尤其是基础不好的。

不过三人行,必有我师:

编程比较好的同学、编写其他程序的同学、老师都是我们相互学习的对象。

感谢他们给了我很多意见,帮助了我很多,真正体会到合作的愉快。

通过这次的C++程序课程设计,熟练地掌握C++语言的知识点,熟悉当前常用的软件开发环境,解决实际问题的能力的强化训练,正确理解掌握C++面向对象程序设计的基本特性:

类、对象、继承与派生、多态、虚函数、模板、流类库等。

但因为时间关系,只能把这次作为基点,有待改进,以后编程的话就不会产生恐惧心理,平时编程太少了。

尤其是更熟悉文件的操作了,对C++语言也更熟悉了,也能够自己改程序中的错误,真的让我体会到编程是痛并快乐着。

参考文献

[1](美)BjarneStroustrup著。

裘宗燕译。

C++程序设计语言(特别版)[M].机械工业出版社。

[2]孙鑫余安萍编著,《VC++深入详解》[M].电子工业出版社。

[3]王树伟著,《VisualC++游戏编程基础》[M].北京:

电子工业出版社。

[4]谭浩强,张基温,C语言程序设计教程(第3版)[M].高等教育出版社,1991年08月。

[5]成洁,卢紫毅,Linux窗口设计——Qt4精彩实例设计分析[M],清华大学出版社,2008.11。

[6](加)布兰切特(Blanchette,J)(英)萨默菲尔德(Summerfield,M)著,闫锋欣译,C++GUIQt4编程(第二版)[M].2008年08月。

[7] 谭浩强著.C++程序设计(第二版)[M].北京:

清华大学出版社,2004。

[8] 刘燕君,刘振安,张一叶著.C++程序设计综合课程设计(第二版)[M].北京:

机械工业出版社,2009。

 

 

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

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1