为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > qt贪吃蛇

qt贪吃蛇

2017-11-06 28页 doc 182KB 62阅读

用户头像

is_079973

暂无简介

举报
qt贪吃蛇qt贪吃蛇 嵌入式大作业 Ubuntu平台贪吃蛇游戏的设计与实现 作 者 姓 名: 学科、专业 : 学 号 : 指 导 教 师: 完 成 日 期: 大连大学 Dalian University 教师批阅页 选 题 分 内 容 分 格 式 分 态 度 分 总 计: 分 简略给出评语或指出文中问题: 评 阅 人: 完成日期: 大连大学论文设计 摘 要 随着计算机的普及,电脑游戏也慢慢融入人们的生活中,成为人们放松心情的一种方式。贪食蛇作为一款经典且易于操作的游戏,一直受到人们的青睐,在繁忙...
qt贪吃蛇
qt贪吃蛇 嵌入式大作业 Ubuntu平台贪吃蛇游戏的设计与实现 作 者 姓 名: 学科、专业 : 学 号 : 指 导 教 师: 完 成 日 期: 大连大学 Dalian University 教师批阅页 选 题 分 内 容 分 格 式 分 态 度 分 总 计: 分 简略给出评语或指出文中问题: 评 阅 人: 完成日期: 大连大学设计 摘 要 随着计算机的普及,电脑游戏也慢慢融入人们的生活中,成为人们放松心情的一种方式。贪食蛇作为一款经典且易于操作的游戏,一直受到人们的青睐,在繁忙的工作之余,玩贪食蛇游戏实在是既省钱又有趣味的休闲方式。本设计遵循C++程序设计的基础原理,制作出一个精美的贪吃蛇小游戏。本设计采用Qt Creater作为主要的开发工具,很好的实现了贪吃蛇游戏的基本功能。 关键词:C++; 贪吃蛇;Qt Creator 大连大学论文设计 摘 要 ........................................................................................................................... 3 前 言 ........................................................................................................................... 1 第一章 Qt库的优点 ......................................................................................................... 2 1.1可移植性 ............................................................................................................. 3 1.2易用性 ................................................................................................................. 3 1.3运行速度 ............................................................................................................. 3 第二章 课程设计目的和要求 ............................................................................................ 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 大连大学论文设计 大连大学论文设计 前 言 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项目。 虽然贪吃蛇游戏在我们的日常生活中是很常见的,但是作为普通的一款小游 1 大连大学论文设计 戏,他却有着极强的生命力,它的简单易行使之广泛的存在于电脑,手机等电子产品载体上,加上变化无穷、引人入胜,使它成为了一款受人喜欢的小游戏。 第一章 Qt库的优点 GUI工具包(或GUI库)是构造图形用户界面(程序)所使用的一套按钮、滚动条、菜单和其他对象的集合。在UNIX系统里,有很多可工使用的GUI库, 2 大连大学论文设计 其中之一就是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仿真工具包,这意味着它不使用任何本地工具包作调用。 3 大连大学论文设计 第二章 课程设计目的和要求 2.1主要研究内容 论述基于Qt下的贪吃蛇游戏设计。通过对Qt下的贪吃蛇游戏分析,结合游戏中的逻辑和操作需求,说明Qt下的贪吃蛇游戏设计的开发过程及各种技术细节;结合所要开发的系统的特点,采用Qt Creator开发工具。 2.2目标(要求) 对基于Qt下的贪吃蛇游戏设计逻辑级操作分析。 设计一个简单,漂亮的贪吃蛇游戏用以玩耍 2.3 课程设计任务内容 程序要求游戏时,分为两种模式,允许穿墙模式和禁止穿墙模式,可以随意选择切换。 禁止穿墙模式: 一条蛇在的围墙内, 围墙内会随机出现一个食物通过键盘上的4个方向键控制蛇向上下左右4个方向移动,蛇头接到食物,则表示食物被蛇吃掉,这时蛇的身体加长一节,同时计10分。接着又出现食物等待被蛇吃掉。如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体),则游戏结束。分数每增加100分,游戏等级升1级即速度加快1级。 4 大连大学论文设计 允许穿墙模式:如果蛇在移动过程中,撞到墙壁会穿过从该墙的对面传出,游戏不会结束,身体交叉(蛇头撞到自己的身体) ,则游戏结束。其他记分、等级规则与禁止穿墙模式相同。 第三章 详细设计 3.1设计思想 3.1.1界面设计 这个游戏程序的关键是表示蛇的图形以及蛇的移动。用一个小小方格来表示蛇的一节身体,身体每长一节,增加一个小方格。移动时必须从蛇头开始,如果不按任何键,蛇自行在当前方向上向前移动,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,首先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇的整个身体,在界面的游戏框中随机出现一个静止静止不动的食物,用户通过键盘来控制蛇的走向,当蛇吃到食物时,分数增加十分,界面开始更新,蛇的身体增加一节,游戏框中又会随机出现一个静止不动的食物 在禁止穿墙模式下,当蛇头碰到游戏框边框的时候或者蛇头碰到自己的身体的时候,游戏自动结束。 在可以穿墙的模式下,蛇头碰到游戏框边框的时候,蛇会从该边框的对面穿出,游戏不会结束,当蛇头碰到自己的身体的时候,游戏结束。 两种模式下,蛇每吃到一个食物,增加10分,分数每累积够百分,游戏等 5 大连大学论文设计 级增加1级,游戏速度加快1级,在游戏界面的上会有同步分数和等级的数码显示。 在游戏中,还增加了游戏暂停功能,当游戏需要暂停时,按下暂停功能键p键,游戏在停,如果按下任意方向键,游戏继续。 3.1.2数据结构 QtSnake.h文件及类的设计如表3-1所示。 表3-1 文件名 成员类型 成员 功能 QtSnake.h public Snake(QWidget* = 0) 容器选取 private char SnakeBody[Max][2] 程序所需变量 int header_Index, Int 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 6 大连大学论文设计 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 slots void doMoveSnake() 信号槽函数 void setEnableGoThroughWall() protected void paintEvent() 受保护函数 void keyPressEvent() 类容器设计: class Snake : public QWidget { Q_OBJECT public: Snake(QWidget* = 0); private: char SnakeBody[Max][2]; //存储蛇的身体坐标信息 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; //用于避免两次方向键之间间隔太小造成的错误 7 大连大学论文设计 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.cpp main 总控函数,增加了编码 格式,窗口标题 QtSnake.cpp Snake::Snake(QWidget *parent) 初始化容器的总体状态 void Snake::iniWidget() 初始化容器中的各个窗 口和标签的位置,字体 大小,变量值 void Snake::iniConnect() 开启模式选择按键,方 向键,暂停键的信号捕 捉 void Snake::iniGame() 初始化游戏的速度、级 别、食物分数,蛇身坐 8 大连大学论文设计 标,食物坐标,计分器, 级别器 void Snake::doMoveSnake() 每一步做一次游戏结束 判断,然后改变蛇的状 态,随机出现食物 void Snake::setEnableGoThroughWall() 判断穿墙变量,为真, 设置为模式标示为“可 以穿墙”模式为假为“禁 止穿墙”模式 void Snake::changeScore() 蛇吃到食物的分数增加 void Snake::changeLevel() 改变游戏等级,速度 bool Snake::isEating() 蛇吃食物的状态实现 bool Snake::isGameOver() 首先判断游戏是否处于 穿墙模式,穿墙模式下, 蛇头碰到自己的身体游 戏结束,禁止穿墙模式 下,蛇头碰到边框或者 身体游戏结束,游戏结 束返回ture Void Snake::paintEvent() 游戏开始时,在随机坐 标画出蛇身和食物,游 戏中描绘蛇的运动轨 迹,并随机补充食物 void Snake::keyPressEvent() 捕捉4个方向键和p键 (暂停键)的信号 QColor Snake::getColor() 存放了8种颜色用于随 机选取 3.3.流程图 3.3.1系统流程图 开始 载入游戏,初始化游戏界面 按任意方向键开始游戏,随机出现一个食物,并用方向键控制蛇的游动方向 游戏模式判断 允许穿墙 禁止穿墙 是否碰到自己的是否碰到自己的 身体 身体 9 大连大学论文设计 Y N N Y 是否碰到墙壁 N 是否吃到食物 Y 蛇身增加1格,分数加10 Y N 吃掉食物数*10是 否等于分数 保持原状 等级加1,速度增加 宣布死亡 结束 图3.1 10 大连大学论文设计 3.3.2函数流程图 main函数流程图如图3.2所示 开始 调用游戏主控函数 调用编码函数,选择编码"UTF-8" 设置游戏窗口标题"贪吃蛇" 调用显示窗口函数,开始运行游戏 结束 如图3.2 QColor Snake::getColor()函数流程图如图3.3所示 开始 将8种颜色放入一个8 个元素的数组中 随机选择一种颜色返回 结束 图3.3 11 大连大学论文设计 Snake::Snake(QWidget *parent)函数流程图如图3.4所示 开始 初始化游戏窗口的位置,大小。默认游戏模 式为禁止穿墙 调用:容器初始化容器,槽函数初始化信号 函数,游戏初始化函数 结束 图3.4 void Snake::iniWidget()函数流程图如图3.5所示 开始 初始化:分数标签,分数LED,等级标签,等级LED, 模式标示窗口(位置,大小,字体) 初始化模式选择按钮的位置,大小,字体 初始化提示窗口的位置,字体,大小 初始化游戏框的位置,大小,边框宽度 结束 图3.5 12 大连大学论文设计 void Snake::iniConnect()函数流程图如图3.6所示 开始 捕捉信号:游戏控制键(上、下、右、 左、暂停),模式改变按钮,其他 游戏控制键 模式改变按钮 调用游戏控制槽函数 调用模式改变槽函数 结束 图3.6 void Snake::iniGame()函数流程图如图3.7所示 开始 初始化游戏:速度,吃食数, 分数,等级 将分数,等级初始值显示在 LED上 定义蛇身数组大小,随机获 取蛇头和食物坐标 时间暂时停止,暂时设定方 向变量Dir=-1(没有方向,等 待方向键信号) 结束 图3.7 13 大连大学论文设计 void Snake::doMoveSnake()函数流程图如图3.8所示 开始 游戏开始变量设为ture (游戏开始) 判断游戏是否为结束状态 蛇是否吃到食物 游戏结束并显示提示信息“game over”,游戏状态设为最初状态 Y 吃到食物,蛇身加长1 格,分数加10 N 随机出现食物,并获取 食物坐标 N 食物坐标是否与 蛇身重合 Y 将处理后的状态更新 结束 14 大连大学论文设计 图3.8 void Snake::setEnableGoThroughWall()函数流程图如图3.9所示 开始 穿墙判断变量取反 判断变量时ture/false ture false 禁止穿墙 允许穿墙 结束 图3.9 void Snake::changeScore()函数流程图如图3.10所示 开始 蛇是否吃到食物 Y N 分数加10,并且在 LED上显示 结束 如图3.10 15 大连大学论文设计 void Snake::changeLevel()函数流程图如图3.11所示 开始 吃掉的食物乘以10 是否等于分数 Y N 不做改变,将原有等级在 等级加1,速度增加,吃食 LED上显示 数量加10,并在LED显示 结束 图3.11 bool Snake::isEating()函数流程图如图3.12所示 开始 判断蛇头的当前坐标是否 等于食物的坐标 Y N 没有吃到返回false 吃到食物返回ture 结束 图3.12 16 大连大学论文设计 bool Snake::isGameOver()函数流程图如图3.13所示 开始 是否能穿墙 能 不能 蛇头是否碰到身体 蛇头是否碰上身体 N N Y Y N 蛇头是否碰到墙壁 Y 函数返回false(游戏继续) 函数返回ture(游戏结束) 结束 图3.13 17 大连大学论文设计 void Snake::paintEvent(QPaintEvent *event)函数流程图如图3.14所示 开始 i = 蛇头的映射 画蛇的身体 Y i ~= 蛇尾的映射 画出蛇的一个身体 N N 游戏处于激活状态 画食物 在坐标范围内随机画出一个食物 结束 图3.14 18 大连大学论文设计 void Snake::keyPressEvent(QKeyEvent *event)函数流程图如图3.15所示 开始 捕捉按键信号:方向键(上、下、右、左),暂停键(p),其他 方向键 判断输入的方向 其他 上 下 右 左 暂停键 是是是是 否否否否 与与与与暂停游戏 运运运运 动动动动 垂垂垂垂 直 直 直 直 是 否 是 否 是 否 是 否 向向向向向向向向 上上上上上上上上 运运运运运运运运 动 动 动 动 动 动 动 动 结束 图3.15 19 大连大学论文设计 第四章 程序测试 运行程序,默认是“禁止穿墙”模式,分数为0,等级为0。 20 大连大学论文设计 按下任意方向键,游戏开始,游戏窗口出现一个食物。 此时蛇向下运动,分数是30 21 大连大学论文设计 吃到一个食物后,分数加10 蛇吃掉10个食物,吃食数乘以10,等于分数100,等级加1 22 大连大学论文设计 “禁止穿墙”模式下蛇碰到墙壁游戏结束,消息框弹出 “禁止穿墙”模式下蛇碰到自己身体游戏结束,消息框弹出 23 大连大学论文设计 “穿墙模式”下蛇从左边墙壁传入,从右边墙壁传出 “穿墙模式”下蛇从下边墙壁传入,从上边墙壁传出 24 大连大学论文设计 “禁止穿墙”模式下蛇碰到自己身体游戏结束,消息框弹出 第五章 设计心得与体会 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。这次编程我通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。 这个题目的选定是来源我学习生活的一个例子,从程序的选定到程序的构思,再到程序的编写都花了我很长的时间,几乎每天都熬夜,真得很辛苦,但完成后又有一种很踏实的感觉。编写程序很辛苦,尤其是基础不好的。不过三人行,必有我师:编程比较好的同学、编写其他程序的同学、老师都是我们相互学习的对象。感谢他们给了我很多意见,帮助了我很多,真正体会到合作的愉快。 25 大连大学论文设计 通过这次的C++程序课程设计,熟练地掌握C++语言的,熟悉当前常用的软件开发环境,解决实际问题的能力的强化训练,正确理解掌握C++面向对象程序设计的基本特性:类、对象、继承与派生、多态、虚函数、、流类库等。但因为时间关系,只能把这次作为基点,有待改进,以后编程的话就不会产生恐惧心理,平时编程太少了。尤其是更熟悉文件的操作了,对C++语言也更熟悉了,也能够自己改程序中的错误,真的让我体会到编程是痛并快乐着。 参考文献 [1] (美)Bjarne Stroustrup 著。裘宗燕 译。C++程序设计语言(特别版)[M].机械工业出版社。 [2] 孙鑫 余安萍 编著,《VC++深入详解》[M].电子工业出版社。 [3] 王树伟 著, 《Visual C++游戏编程基础》[M].北京:电子工业出版社。 [4] 谭浩强,张基温,C 语言程序设计(第 3 版)[M](高等教育出版社,1991 年 08 月。 [5] 成洁,卢紫毅,Linux 窗口设计——Qt4 精彩实例设计分析[M],清华大学出版社,2008.11。 [6] (加)布兰切特(Blanchette,J) (英)萨默菲尔德(Summerfield,M)著,闫锋欣译,C++GUI Qt4 编程(第二版)[M].2008 年 08 月。 [7] 谭浩强著.C++程序设计(第二版)[M].北京:清华大学出版社,2004。 [8] 刘燕君,刘振安,张一叶著.C++程序设计综合课程设计(第二版)[M].北京:机械工业出版社,2009。 26 大连大学论文设计 27 大连大学论文设计 28
/
本文档为【qt贪吃蛇】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索