本科毕业设计论文--贪吃蛇游戏的实现.doc
《本科毕业设计论文--贪吃蛇游戏的实现.doc》由会员分享,可在线阅读,更多相关《本科毕业设计论文--贪吃蛇游戏的实现.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象程序设计课程设计设计名称 贪吃蛇游戏的实现 姓 名 蒋 欢 指导教师 张 静 班 级 15级信息管理与信息系统 2016年06月18日目 录第一章 引言11.1研究背景11.1.1背景内容11.2研究方案1第二章 概述12.1程序流程图1第三章 设计的具体实现23.1 InitInstance函数23.2UpdataGame函数33.3 main函数33.4 Csnake函数33.5 getSymbol函数43.6 isDead函数4第四章 调试及解决方法4第五章 测试结果5第六章 设计新的体会7致 谢8参考文献8附 录9第一章 引言1.1研究背景贪吃蛇是家喻户晓的益智类小游戏,选择这
2、个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的 C+语言程序设计。我希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力,因此我选定了这个题目。1.1.1背景内容贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体
3、游戏结束 C语言附 录 main.cpp #include #include snake.h #include using namespace std; int main() Csnake s(20); s.InitInstance(); /s.ShowGame(); int noDead; do s.ShowGame(); noDead=s.UpdataGame(); while (noDead); system(pause); return 0; snack.cpp #include #include #include #include snake.h using namespace st
4、d; /测试成功 void Csnake:InitInstance() snakeMap.resize(line); / snakeMap竖坐标横坐标 for(int i=0;iline;i+) snakeMapi.resize(row); for(int j=0;jrow;j+) snakeMapij= ; 1; for(int m=1;mmaxSize+1;m+) /初始蛇身 snakeMapline/2m=;/将蛇身坐标压入队列snakeBody.push(Cmp(m,(line/2); /snakeBody横坐标竖坐标 /链表头尾firstSign=snakeBody.back();
5、secondSign.setPoint(maxSize-1,line/2); /测试成功int Csnake:GetDirections()const if(GetKeyState(VK_UP)0) return 1; /1表示按下上键if(GetKeyState(VK_DOWN)0) return 2; /2表示按下下键if(GetKeyState(VK_LEFT)0) return 3; /3表示按下左键if(GetKeyState(VK_RIGHT)0)return 4; /4表示按下右键return 0; bool Csnake:UpdataGame() /初始化得分0 static
6、int score=0; /获取用户按键信息int choice; choice=GetDirections(); coutTotal score: scoreendl; /随机产生食物所在坐标int r,l; /开始初始已经吃食,产生一个食物static bool eatFood=true; /如果吃了一个,才再出现第2个食物if(eatFood) do /坐标范围限制在(1,1)到(line-2,row-2)对点矩型之间 srand(time(0); r=(rand()%(row-2)+1; /横坐标 l=(rand()%(line-2)+1;/竖坐标 /如果随机产生的坐标不是蛇身,则可行
7、 /否则重新产生坐标 if(snakeMaplr!=)snakeMaplr=*; while (snakeMaplr=); switch (choice) case 1:/向上 /如果蛇头和社颈的横坐标不相同,执行下面操作 if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign-1); /否则,如下在原本方向上继续移动 else nextSign=firstSign+(firstSign-secondSign); break; case 2:/向下 if(firstSign.r
8、Sign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign+1); else nextSign=firstSign+(firstSign-secondSign); break; case 3:/向左 if(firstSign.lSign!=secondSign.lSign)nextSign=firstSign+(firstSign-secondSign); else nextSign=firstSign+(firstSign-secondSign); break; case 4:/向右 if(firstSig
9、n.lSign!=secondSign.lSign)nextSign.setPoint(firstSign.rSign+1,firstSign.lSign); else nextSign=firstSign+(firstSign-secondSign); break; default: nextSign=firstSign+(firstSign-secondSign); if(getSymbol(nextSign)!=* & !isDead(nextSign) /如果没有碰到食物(且没有死亡的情况下),删除蛇尾,压入新的蛇头 /删除蛇尾 lastSign=snakeBody.front();
10、snakeMaplastSign.lSignlastSign.rSign= ; snakeBody.pop(); /更新蛇头 secondSign=firstSign; /压入蛇头 snakeBody.push(nextSign); firstSign=snakeBody.back(); snakeMapfirstSign.lSignfirstSign.rSign=;/没有吃食 eatFood=false; return true; /-吃食- else if(getSymbol(nextSign)=* & !isDead(nextSign) secondSign=firstSign; sna
11、keMapnextSign.lSignnextSign.rSign=; /只压入蛇头 snakeBody.push(nextSign); firstSign=snakeBody.back(); eatFood=true; /加分 score+=10; return true; /-死亡- else coutDeadendl;coutYour last total score is scoreendl; return false; void Csnake:ShowGame() for(int i=0;iline;i+) for(int j=0;jrow;j+) coutsnakeMapij; c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本科 毕业设计 论文 贪吃 游戏 实现
限制150内