资源描述:
《贪吃蛇课程设计实验报告模板9》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、荆楚理工学院课程设计成果学院:计算机工程学院__班级:计算机科学与技术一班学生姓名:焦润学号:2013404010107设计地点(单位):A5201设计题目:贪吃蛇游戏完成日期:2015年07月05日指导教师评语:_____________________________________________________________________________________________________________________________________________________________________成绩(五级计分制)__
2、__________教师签名____________________目录一、需求分析31.1设计目的31.2设计内容3二、概要设计4三、详细设计5四、测试分析12五、用户使用说明15六、总结156.1、需求分析方面156.2、数据结构156.3、遇到的问题157、附录(程序源代码)16一、需求分析1.1设计目的贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将我们所学的知识加以运用,二是一直以来贪吃蛇这个小游戏就比较吸引人,它的实现对于以前的我们而言都是很神秘的。我们希望通过自己所学的知识把它剖析开来,真真正正地了解它的本质和精髓。同时更进一步地掌握c语言
3、、c++(本实验是用c++进行开发的)以及数据结构的理论知识与实际应用,熟悉基本的游戏软件开发过程。根据分析后的贪吃蛇结构设计出相应的游戏流程,主要内容包括:游戏开始,定义活动范围(Map),随机出现食物,方向控制,游戏结束,分数以及难度的显示。1.2设计内容1.通过输入地图长度、宽度,划出snake活动的区域,同时选择游戏难度,游戏难度通过移动速度来决定。2.食物的随机生成3.用键盘上的WASD键对snake的活动方向进行控制。蛇身方向的处理,控制蛇头的移动,定一个双向链表,用来保管每次移动完以后,每一节蛇身的位置,下一次的时候,每一个蛇身读取前一个蛇身的坐
4、标,就可以实现蛇的整体移动。移动完以后,新的坐标被保管进数组,如此一直循环下去。选择的数据结构:双向链表、队列、广度优先搜索4.撞墙和撞到本身,撞墙判断蛇头坐标是否到边界。撞到本身,做一个循环判断蛇头的坐标是否和其他蛇身相等。流程图如下:二、概要设计功能块各函数列表:boolAuto::bfs(intsx,intsy,intex,intey)//广度优先搜索函数,用于搜索路径voidsnake::add_head(intxx,intyy)//增加蛇头结点voidsnake::del_tail()//删除蛇尾结点voidMap::initMap()//初始化地图
5、voidMap::outputMap()//打印出游戏当前的状态voidmove::get_food()//随机生成食物intmove::movesnake()//移动蛇身boolmove::turn_dir(charop)//snake移动方向控制boolgame()//开始游戏,设置地图,并选择游戏模式voidwelcome()//进入游戏结构体细分功能:structpoint{intx,y,step;//储存搜索状态intpath[900];};structsnake_node{intx;//蛇头结点横坐标inty;//蛇头结点纵坐标intrank;//
6、第几个蛇结点};三、详细设计//广度优先搜索函数boolAuto::bfs(intsx,intsy,intex,intey)//BFS在选择自动后,调用该函数搜索{pointin,out;inti,j,step,x,y,way,len;intd[4][2]={-1,0,1,0,0,-1,0,1};intg[8][4]={0,1,2,3,0,3,1,2,3,2,0,1,1,2,0,3,1,3,0,2,2,1,3,0,2,0,3,1,3,1,0,2};memset(vis,0,sizeof(vis));memset(path,0,sizeof(path));lis
7、t::iteratorit=s.l.begin();for(;it!=s.l.end();it++){x=it->x;y=it->y;vis[x][y]=it->rank;}in.x=sx;in.y=sy;in.step=0;len=s.l.size();while(!q.empty())q.pop();q.push(in);while(!q.empty()){out=q.front();q.pop();if(out.x==ex&&out.y==ey){for(j=0;j8、path[j];returntrue;