贪食蛇引擎设置.docx
- 文档编号:11218860
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:29
- 大小:220.22KB
贪食蛇引擎设置.docx
《贪食蛇引擎设置.docx》由会员分享,可在线阅读,更多相关《贪食蛇引擎设置.docx(29页珍藏版)》请在冰豆网上搜索。
贪食蛇引擎设置
重庆大学本科学生课程设计任务书
课程设计题目
C++课程设计——PC版游戏引擎的设计与实现
学院
计算机学院
专业
网络工程
年级
2009
已知参数和设计要求:
课程设计对游戏内容不做限制,学生需要自行设计游戏的内容和规则,并在课程设计报告中进行描述。
游戏内容可以参考俄罗斯方块、贪吃蛇等游戏。
使用C++语言实现游戏程序。
要求以小组为单位,用C++实现游戏的主要功能模块。
最后需要提供的材料包括课程设计报告1份,程序拷贝1份(包括源代码和可执行程序),报告用PPT电子文档一份(可选)。
学生应完成的工作:
根据C++程序设计的思想和编程技术,设计PC版游戏引擎,并通过输出特定文字信息表示游戏运行的状态信息的变化。
上机调试并能正确运行,并提交完整的设计报告和软件程序拷贝。
目前资料收集情况(含指定参考资料):
《EssentialC++中文版》,StanleyB.Lippman著,侯捷译,华中科技大学出版社,2001.8
《C++程序设计教程实验手册》,H.M.Deitel,P.J.Deitel著,施平安译,清华大学出版社,2004.2
《高级语言C++程序设计编程范例与精解》,周玉龙,刘景编,高等教育出版社,2003.4
课程设计的工作计划:
课程设计时间为一周,从18周星期一开始(2011年6月20日),到18周星期五结束(2010年6月24日)。
课程设计以组为单位进行。
每组2~3个人。
星期一进行贪吃蛇引擎的内容和规则设计。
星期二查找资料解决具体的技术问题。
星期三用C++语言实现程序。
星期四继续完成程序,对程序进行调试,完成课程设计报告。
星期五提交程序和课程设计报告,进行评审。
本组由李欢(20095530)、张驹强(20095544)和杨显川(20095540)组成
李欢负责课程设计的改进程序部分,所进行的工作占总工作量的35%
张驹强负责课程设计的编辑程序部分,所进行的工作占总工作量的35%
杨显川负责课程设计的文档编辑部分,所进行的工作占总工作量的30%
任务下达日期2011年6月20日
完成日期2011年6月23日
指导教师(签名)
学生(签名)
贪吃蛇引擎的设计与实现
摘要
此次贪吃蛇引擎的设计,主要运用了面向对象编程思想。
具体知识有,类的声明与定义,类的包含于重载,操作符的重载,文件流的读写,顺序存储器的运用等。
来达到游戏过程中对蛇身移动及移动方向的控制,及游戏即时数据的导出等。
游戏的规则是:
玩家通过方向键(上,下,左,右)来控制蛇移动,在地图上吃食物。
吃掉食物后蛇身加长,并且会增加相应分数,蛇运动时撞到墙壁(屏幕框)或者蛇身结束游戏,并在屏幕上显示所得分数。
其中,蛇速度三级可调。
本文中具体介绍了,游戏的各种功能与详细设计,软件的具体设计思路,各模块的详细介绍,部分模块的程序流程图,关键部分代码的详细讲解等。
关键字:
贪吃蛇游戏引擎
目录
1.课题介绍........................................................................................................1
1.1选题背景..................................................................................................1
1.2关于编译软件...........................................................................................1
1.3关于兼容性...............................................................................................1
1.4预备知识..................................................................................................1
2.设计概要......................................................................................................2
2.1需求分析..................................................................................................2
2.2程序结构..................................................................................................2
2.3程序流程..................................................................................................3
3.游戏的实现..................................................................................................4
3.1游戏界面控制...........................................................................................4
3.2初始化food..............................................................................................4
3.3游戏的控制..............................................................................................6
3.4游戏设置.................................................................................................11
3.5更新英雄榜..............................................................................................12
4.测试结果与分析.........................................................................................13
4.1程序运行.................................................................................................13
4.2分析讨论.................................................................................................16
5.总结..............................................................................................................18
6.附录:
(本次课程设计所设计的主要的类)..........................................19
6.1Snake.......................................................................................................19
6.2Position....................................................................................................19
6.3Pick_level.................................................................................................19
6.4Move........................................................................................................20
6.5Form.........................................................................................................20
6.6Food........................................................................................................21
6.7Information...............................................................................................21
6.8Rank.........................................................................................................21
7.参考文献...................................................................................................22
第一章课题介绍
1.1选题背景
贪吃蛇一块比较流行的小游戏,选择这个题目主要是为了将我们所学知识加以运用,二是觉得这个题目在所能选择的三个题目中是比较有挑战性的,它的制作对于我们而言还是比较有难度的。
我们希望通过所学知识把它剖析开来,真真正正的了解它的本质。
虽然我们从来没有编过游戏程序,但是我们有信心,在这次实践和实际的项目中提高自己的编程能力。
因此我们选定了这个题目。
1.2关于编译软件
本程序采用MicrosoftVisualC++6.0的英文版本进行编译。
VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
虽然目前MicrosoftVisualStudio2010能够处理的信息更加强大,但是VisualC++6.0其良好的界面和可操作性,加上支持标准C/C++规范,仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
1.3关于兼容性
本程序经过调试,可以在XP系统下编译运行,也可以在Vista以及win7系统下运行。
由于只是引擎设计,所以三者的界面都是相同的,运行结果也是相同的。
1.4预备知识
需要以类的形式来实现,所以需要熟悉所学的C++基础知识,能够熟练运用VisualC++6.0开发工具。
第二章设计概要
思想方法:
主要运用了面向对象编程思想。
具体知识有,类的声明与定义,类的包含于重载,操作符的重载,文件流的读写,顺序存储器的运用等。
2.1需求分析
贪吃蛇引擎的基本功能有:
1.随机产生食物并确保食物不在蛇身上。
2.通过标准输入控制蛇头移动方向。
3.顺利的移动位置并成功的吃到食物。
4.判断是否咬到自己或者碰到边框而结束成功结束。
5.即时导出并储存贪吃蛇的基本信息如:
蛇身位置和食物位置。
为了尽可能不让我们的贪吃蛇游戏显得单调枯燥,我们允许用户选择游戏难度,并为游戏设置了分数统计。
2.2程序结构
根据分析,我们做的贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,选择难度,游游戏得分显示等等。
具体的程序结构如下图所示。
图1.贪吃蛇结构图
2.3程序流程
根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。
贪吃蛇的内容主要包括:
游戏开始,随机出现食物;选择easy/normal/hard难度,按"w","s","a","d"进行上下左右的方向控制;
游戏结束自动统计分数。
图2.贪吃蛇流程图
第三章游戏的实现
3.1游戏界面控制
贪吃蛇游戏的游戏引擎界面包括蛇身体的制作、蛇移动范围的制作等等。
其中贪吃蛇的身体用什么方法制作,并且可以使得其在游戏过程中可以实现“吃”的功能是很重要的。
因此在游戏界面的初始制作时就必须考虑到游戏时可能遇到的问题。
本程序采用队列deque
3.2初始化food
确定用deque存储贪吃蛇以后,贪吃蛇的食物如何达到随机出现,并且能够按照网格式与蛇头无偏差相接就是一个亟待解决的问题。
随机出现应采用rand()函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。
设置两个整型变量food_x,food_y作为食物出现的点的坐标
Positioncreatfood()
{
srand((unsignedint)time(NULL));//随机产生食物的横纵坐标(程序运行时间);
food_x=rand()%18+1;
food_y=rand()%18+1;
Positionf(food_x,food_y);
returnf;
}
这样使随机出现的点能够整除最小网格,也就是使食物与蛇头无偏差相接。
在通过makefood()函数调用creatfood(),判断其随机产生的坐标是否合法(产生的食物是否在蛇身上,当前屏幕上是否已经存在食物)
voidMove:
:
makefood()
{
intd=1;
//判断当前是否存在食物,以此决定是否重新生成食物。
for(introw=0;row<20;row++)
{
for(intcol=0;col<20;col++)
{
if(game.form[row][col]=='0')
d=0;
}
}
if(d)
{
boolr=true;
//确保新生成的食物不在蛇身上。
while(r)
{
p=a.creatfood();
for(inti=0;i<=length-1;i++)
{
r=(p==body[i]);
if(r)
break;
}
}
game.form[p.x][p.y]='0';
}
}
再由食物坐标(food_x,food_y)与蛇头坐标是否相同判断蛇是否“吃”到了食物,当蛇头与食物相撞,则“吃”到食物,并且随机产生下一个食物,反之,如果没吃到,则不出现食物直到“吃”到食物为止。
elseif(game.form[body[0].x-1][body[0].y]=='0')//判断时候迟到食物。
{
Positionf(body[0].x-1,body[0].y);
addlength(f);//食物位置加入队列。
returntrue;
}
3.3游戏的控制
开始游戏后的重点是如何用键盘来控制蛇的移动。
首先说明键盘与蛇的响应,设置一个方向控制变量你n,再添加boolMove:
:
Move_direction(charn)函数来实现键盘消息的传递,按下不同的键盘按键,n会相应的改变,再利用switch语句在函数中对坐标进行相应改变即可。
其次来解释一下如何判断蛇的死亡,由于蛇的身体是由队列构成的,因此判断蛇是否死亡其本质就是判断蛇头的坐标是否与游戏边框相同或者蛇头坐标是否与蛇自己的身体相同。
该过程也在:
Move_direction(charn)函数中写入即可:
boolMove:
:
Move_direction(charn)
{
switch(n)
{
case'w':
if(lastdirect!
='s')
{
lastdirect=n;if(game.form[body[0].x-1][body[0].y]=='*'||game.form[body[0].x-1][body[0].y]=='-'||
game.form[body[0].x-1][body[0].y]=='|')
{//判断是否碰壁或者咬到自己
returnfalse;
}
elseif(game.form[body[0].x-1][body[0].y]=='0')
{//判断时候迟到食物。
Positionf(body[0].x-1,body[0].y);
addlength(f);//食物位置加入队列。
returntrue;
}
//当为空地时。
else
{//把蛇头部位置清空,从蛇尾开始依次向后移位,更新蛇身。
game.form[body[length-1].x][body[length-1].y]='';
for(inti=length-1;i>=1;i--)
{
body[i].x=body[i-1].x;
body[i].y=body[i-1].y;
}
body[0].x--;//用空地更新头部位置。
game.form[body[0].x][body[0].y]='*';
returntrue;
}
}
else
returntrue;
break;
case'a':
if(lastdirect!
='d')
{
lastdirect=n;if(game.form[body[0].x][body[0].y-1]=='*'||game.form[body[0].x][body[0].y-1]=='-'||
game.form[body[0].x][body[0].y-1]=='|')
{
returnfalse;
}
elseif(game.form[body[0].x][body[0].y-1]=='0')
{
Positionf(body[0].x,body[0].y-1);
addlength(f);
returntrue;
}
else
{
game.form[body[length-1].x][body[length-1].y]='';
for(inti=length-1;i>=1;i--)
{
body[i].x=body[i-1].x;
body[i].y=body[i-1].y;
}
body[0].y--;
game.form[body[0].x][body[0].y]='*';
returntrue;
}
}
else
returntrue;
break;
case's':
if(lastdirect!
='w')
{
lastdirect=n;if(game.form[body[0].x+1][body[0].y]=='*'||game.form[body[0].x+1][body[0].y]=='-'||
game.form[body[0].x+1][body[0].y]=='|')
{
returnfalse;
}
elseif(game.form[body[0].x+1][body[0].y]=='0')
{
Positionf(body[0].x+1,body[0].y);
addlength(f);
returntrue;
}
else
{
game.form[body[length-1].x][body[length-1].y]='';
for(inti=length-1;i>=1;i--)
{
body[i].x=body[i-1].x;
body[i].y=body[i-1].y;
}
body[0].x++;
game.form[body[0].x][body[0].y]='*';
returntrue;
}
}
else
returntrue;
break;
case'd':
if(lastdirect!
='a')
{
lastdirect=n;
if(game.form[body[0].x][body[0].y+1]=='*'||game.form[body[0].x][body[0].y+1]=='-'||
game.form[body[0].x][body[0].y+1]=='|')
{
returnfalse;
}
elseif(game.form[body[0].x][body[0].y+1]=='0')
{
Positionf(body[0].x,body[0].y+1);
addlength(f);
returntrue;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪食 引擎 设置