Ubuntu平台贪吃蛇游戏的设计与实现.doc_第1页
Ubuntu平台贪吃蛇游戏的设计与实现.doc_第2页
Ubuntu平台贪吃蛇游戏的设计与实现.doc_第3页
Ubuntu平台贪吃蛇游戏的设计与实现.doc_第4页
Ubuntu平台贪吃蛇游戏的设计与实现.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式大作业Ubuntu平台贪吃蛇游戏的设计与实现作 者 姓 名: 学科、专业 : 学 号 : 指 导 教 师: 完 成 日 期: 大连大学Dalian University教师批阅页选 题 分内 容 分格 式 分态 度 分总 计: 分简略给出评语或指出文中问题: 评 阅 人: 完成日期: 大连大学论文设计摘 要随着计算机的普及,电脑游戏也慢慢融入人们的生活中,成为人们放松心情的一种方式。贪食蛇作为一款经典且易于操作的游戏,一直受到人们的青睐,在繁忙的工作之余,玩贪食蛇游戏实在是既省钱又有趣味的休闲方式。本设计遵循C+程序设计的基础原理,制作出一个精美的贪吃蛇小游戏。本设计采用Qt Creater作为主要的开发工具,很好的实现了贪吃蛇游戏的基本功能。关键词:C+; 贪吃蛇;Qt Creator摘 要3前 言1第一章 Qt库的优点21.1可移植性21.2易用性21.3运行速度2第二章 课程设计目的和要求42.1主要研究内容42.2目标(要求)42.3 课程设计任务内容4第三章 详细设计53.1设计思想53.1.1界面设计53.1.2数据结构63.2函数设计83.2.1文件及函数组成83.3.流程图93.3.1系统流程图93.3.2函数流程图11第四章 程序测试20第五章 设计心得与体会25参考文献26附录27前 言 Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。 Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。 在功能方面,Qt Creator 包括项目生成向导、高级的 C+ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等。 Qt Creator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。 使用强大的 C+ 代码编辑器可快速编写代码 语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能 使用浏览工具管理源代码 集成了领先的版本控制软件,包括 Git、Perforce 和 Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换为Qt跨平台开发人员的需求而量身定制 集成了特定于Qt的功能,如信号与槽(Signals & Slots)图示调试器,对Qt 类结构可一目了然集成了Qt Designer可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。 虽然贪吃蛇游戏在我们的日常生活中是很常见的,但是作为普通的一款小游戏,他却有着极强的生命力,它的简单易行使之广泛的存在于电脑,手机等电子产品载体上,加上变化无穷、引人入胜,使它成为了一款受人喜欢的小游戏。第一章 Qt库的优点GUI工具包(或GUI库)是构造图形用户界面(程序)所使用的一套按钮、滚动条、菜单和其他对象的集合。在UNIX系统里,有很多可工使用的GUI库,其中之一就是Qt库,它是一个几乎C+编程语言的工具包。由于Qt是基于C+而不是C,故他的有点是速度快、易于使用,并具有很好的可移植性。所以,当需要开发Unix或MS windows环境下的GUI程序时,Qt是最佳选择。1.1可移植性 Qt不只是适用于Unix,它同样适用于MS Windows。Windows平台下用标准库Microsoft Foudation Classes(MFC,Microsoft 基类),它不适用于其他平台。GTK或Xforms,又不能支持Windows平台。既适合windows平台又适合Linux平台的GUI工具包,那就是Qt。1.2易用性 Qt是一个C+工具包,它由几百个C+类构成,在程序中可以使用这些类。Qt是基于C+构造,所以具有OOP(object_oriented programming)的优点。1.3运行速度 Qt非常容易使用,而且速度也很快。这两方面通常是不可能同时达到。GUI工具包,通常速度都不快,而Qt的这一有点归功于Qt开发者的功劳,他们大大优化了Qt的这一产品。Qt是一个GUI仿真工具包,这意味着它不使用任何本地工具包作调用。28大连大学论文设计第二章 课程设计目的和要求2.1主要研究内容论述基于Qt下的贪吃蛇游戏设计。通过对Qt下的贪吃蛇游戏分析,结合游戏中的逻辑和操作需求,说明Qt下的贪吃蛇游戏设计的开发过程及各种技术细节;结合所要开发的系统的特点,采用Qt Creator开发工具。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.hpublicSnake(QWidget* = 0)容器选取privatechar SnakeBodyMax2 int header_Index,Int tail_Indexint eat_X,eat_Y int level int speed int score,eatNum int map_row,map_col int Dir int step int tempx,tempy bool CanGoThroughWall bool hasMoved 程序所需变量QLCDNumber* levelNumber QLCDNumber* scoreNumber QLabel* label QLabel* levelLabel QLabel* scoreLabel QLabel* setlabel Qtimer* timer QPushButton* button 布局选取void iniWidget() void iniConnect() bool isEating() bool isGameOver() void iniGame() void changeScore() void changeLevel() QColor getColor()功能函数private slotsvoid doMoveSnake()void setEnableGoThroughWall()信号槽函数protectedvoid paintEvent()void keyPressEvent()受保护函数类容器设计:class Snake : public QWidget Q_OBJECTpublic: Snake(QWidget* = 0);private: char SnakeBodyMax2; /存储蛇的身体坐标信息 int header_Index,tail_Index; /蛇头、尾在数组的位置 int eat_X,eat_Y; /出现吃的位置 int level; /等级 int speed; /蛇的速度 int score,eatNum; /得分 int map_row,map_col; /地图太小 int Dir; /当前蛇移动方向 int step; /步距 int tempx,tempy; /蛇头下一位置临时存放 bool CanGoThroughWall; /是否能穿墙 bool hasMoved; /用于避免两次方向键之间间隔太小造成的错误 QLCDNumber* levelNumber; /等级LED QLCDNumber* scoreNumber;/分数LED QLabel* label;/游戏框 QLabel* levelLabel;/等级标签 QLabel* scoreLabel;/分数标签 QLabel* setlabel;/模式标示 Qtimer* timer;/游戏计时器 QPushButton* button;/选择模式按钮 void iniWidget();/初始化容器状态 void iniConnect();/信号连接 bool isEating();/蛇要吃食物 bool isGameOver();/判断游戏结束 void iniGame();/初始化游戏 void changeScore();/更新得分 void changeLevel();/更新等级 QColor getColor();/食物变色private slots: void doMoveSnake();/蛇移动每一步状态 void setEnableGoThroughWall();/设置是否允许穿墙protected: void paintEvent(QPaintEvent *);/绘画蛇身,食物 void keyPressEvent(QKeyEvent *event);/捕获按键信号;3.2函数设计3.2.1文件及函数组成 源文件函数名称功能main.cppmain总控函数,增加了编码格式,窗口标题QtSnake.cppSnake:Snake(QWidget *parent)初始化容器的总体状态void Snake:iniWidget()初始化容器中的各个窗口和标签的位置,字体大小,变量值void Snake:iniConnect()开启模式选择按键,方向键,暂停键的信号捕捉void Snake:iniGame()初始化游戏的速度、级别、食物分数,蛇身坐标,食物坐标,计分器,级别器void Snake:doMoveSnake()每一步做一次游戏结束判断,然后改变蛇的状态,随机出现食物void Snake:setEnableGoThroughWall()判断穿墙变量,为真,设置为模式标示为“可以穿墙”模式为假为“禁止穿墙”模式void Snake:changeScore()蛇吃到食物的分数增加void Snake:changeLevel()改变游戏等级,速度bool Snake:isEating()蛇吃食物的状态实现bool Snake:isGameOver()首先判断游戏是否处于穿墙模式,穿墙模式下,蛇头碰到自己的身体游戏结束,禁止穿墙模式下,蛇头碰到边框或者身体游戏结束,游戏结束返回tureVoid Snake:paintEvent()游戏开始时,在随机坐标画出蛇身和食物,游戏中描绘蛇的运动轨迹,并随机补充食物void Snake:keyPressEvent()捕捉4个方向键和p键(暂停键)的信号QColor Snake:getColor()存放了8种颜色用于随机选取3.3.流程图3.3.1系统流程图开始载入游戏,初始化游戏界面按任意方向键开始游戏,随机出现一个食物,并用方向键控制蛇的游动方向游戏模式判断是否碰到自己的身体是否碰到自己的身体 允许穿墙 禁止穿墙是否碰到墙壁 Y N N Y是否吃到食物 N Y蛇身增加1格,分数加10吃掉食物数*10是否等于分数 Y N保持原状等级加1,速度增加宣布死亡结束图3.1大连大学论文设计3.3.2函数流程图main函数流程图如图3.2所示开始调用游戏主控函数调用编码函数,选择编码UTF-8设置游戏窗口标题贪吃蛇调用显示窗口函数,开始运行游戏结束如图3.2QColor Snake:getColor()函数流程图如图3.3所示开始将8种颜色放入一个8个元素的数组中随机选择一种颜色返回结束图3.3Snake:Snake(QWidget *parent)函数流程图如图3.4所示开始初始化游戏窗口的位置,大小。默认游戏模式为禁止穿墙调用:容器初始化容器,槽函数初始化信号函数,游戏初始化函数结束图3.4void Snake:iniWidget()函数流程图如图3.5所示开始初始化:分数标签,分数LED,等级标签,等级LED,模式标示窗口(位置,大小,字体)初始化模式选择按钮的位置,大小,字体初始化提示窗口的位置,字体,大小初始化游戏框的位置,大小,边框宽度结束图3.5void Snake:iniConnect()函数流程图如图3.6所示开始捕捉信号:游戏控制键(上、下、右、左、暂停),模式改变按钮,其他调用模式改变槽函数调用游戏控制槽函数 游戏控制键 模式改变按钮 结束图3.6void Snake:iniGame()函数流程图如图3.7所示开始初始化游戏:速度,吃食数,分数,等级将分数,等级初始值显示在LED上定义蛇身数组大小,随机获取蛇头和食物坐标时间暂时停止,暂时设定方向变量Dir=-1(没有方向,等待方向键信号)结束图3.7void Snake:doMoveSnake()函数流程图如图3.8所示开始游戏开始变量设为ture(游戏开始)判断游戏是否为结束状态蛇是否吃到食物游戏结束并显示提示信息“game over”,游戏状态设为最初状态吃到食物,蛇身加长1格,分数加10 Y N随机出现食物,并获取食物坐标食物坐标是否与蛇身重合 N Y将处理后的状态更新 结束图3.8void Snake:setEnableGoThroughWall()函数流程图如图3.9所示开始穿墙判断变量取反判断变量时ture/false ture false 禁止穿墙允许穿墙结束图3.9void Snake:changeScore()函数流程图如图3.10所示开始蛇是否吃到食物 Y N分数加10,并且在LED上显示结束如图3.10void Snake:changeLevel()函数流程图如图3.11所示开始吃掉的食物乘以10是否等于分数 Y N不做改变,将原有等级在LED上显示等级加1,速度增加,吃食数量加10,并在LED显示结束图3.11bool Snake:isEating()函数流程图如图3.12所示开始判断蛇头的当前坐标是否等于食物的坐标 Y N没有吃到返回false吃到食物返回ture结束图3.12开始是否能穿墙bool Snake:isGameOver()函数流程图如图3.13所示 能 不能蛇头是否碰到身体蛇头是否碰上身体 N N蛇头是否碰到墙壁 Y Y N Y函数返回ture(游戏结束)结束函数返回false(游戏继续) 图3.13void Snake:paintEvent(QPaintEvent *event)函数流程图如图3.14所示开始i = 蛇头的映射 画蛇的身体i != 蛇尾的映射 画出蛇的一个身体 Y N N游戏处于激活状态 画食物在坐标范围内随机画出一个食物 结束 图3.14void Snake:keyPressEvent(QKeyEvent *event)函数流程图如图3.15所示开始捕捉按键信号:方向键(上、下、右、左),暂停键(p),其他判断输入的方向 方向键 其他 上 下 右 左是否与运动垂直是否与运动垂直是否与运动垂直是否与运动垂直 暂停键 暂停游戏 是 否 是 否 是 否 是 否向上运动向上运动向上运动向上运动向上运动向上运动向上运动向上运动结束 图3.15第四章 程序测试运行程序,默认是“禁止穿墙”模式,分数为0,等级为0。按下任意方向键,游戏开始,游戏窗口出现一个食物。此时蛇向下运动,分数是30吃到一个食物后,分数加10蛇吃掉10个食物,吃食数乘以10,等于分数100,等级加1“禁止穿墙”模式下蛇碰到墙壁游戏结束,消息框弹出“禁止穿墙”模式下蛇碰到自己身体游戏结束,消息框弹出“穿墙模式”下蛇从左边墙壁传入,从右边墙壁传出“穿墙模式”下蛇从下边墙壁传入,从上边墙壁传出“禁止穿墙”模式下蛇碰到自己身体游戏结束,消息框弹出第五章 设计心得与体会 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。这次编程我通过自己的所学知识把它剖析开来,真真正正的了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论