贪食蛇游戏设计.docx

上传人:b****2 文档编号:682261 上传时间:2023-04-29 格式:DOCX 页数:14 大小:131.43KB
下载 相关 举报
贪食蛇游戏设计.docx_第1页
第1页 / 共14页
贪食蛇游戏设计.docx_第2页
第2页 / 共14页
贪食蛇游戏设计.docx_第3页
第3页 / 共14页
贪食蛇游戏设计.docx_第4页
第4页 / 共14页
贪食蛇游戏设计.docx_第5页
第5页 / 共14页
贪食蛇游戏设计.docx_第6页
第6页 / 共14页
贪食蛇游戏设计.docx_第7页
第7页 / 共14页
贪食蛇游戏设计.docx_第8页
第8页 / 共14页
贪食蛇游戏设计.docx_第9页
第9页 / 共14页
贪食蛇游戏设计.docx_第10页
第10页 / 共14页
贪食蛇游戏设计.docx_第11页
第11页 / 共14页
贪食蛇游戏设计.docx_第12页
第12页 / 共14页
贪食蛇游戏设计.docx_第13页
第13页 / 共14页
贪食蛇游戏设计.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

贪食蛇游戏设计.docx

《贪食蛇游戏设计.docx》由会员分享,可在线阅读,更多相关《贪食蛇游戏设计.docx(14页珍藏版)》请在冰点文库上搜索。

贪食蛇游戏设计.docx

贪食蛇游戏设计

高级程序设计实践(C++)课程设计

 

姓名:

学号:

班级:

设计内容:

贪食蛇游戏

设计时间:

目录

一、系统描述………………………………………3

二、功能模块结构…………………………………3

三、主要模块的算法说明…………………………5

四、运行结果………………………………………5

五、课程设计总结…………………………………6

六、参考文献………………………………………7

七、附录……………………………………………8

一、系统描述

产生一个固定大小没有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的运动方向,用蛇头去吃随机分布在游戏区域内的食物;

蛇的运动限制在游戏区域内,游戏区域没有边界,所以蛇在区域内作循环运动;

蛇的运动方向为直线运动,只走横和竖的方向,不走斜线;

蛇的运动速度由游戏的难度来控制,难度越高,速度越快,游戏难度分为9个等级;

蛇身体的长度从1开始每吃掉一份食物就增加一个长度;

食物的出现安照随机分布的原则,蛇吃掉一份后随即在游戏区域内放一份新的食物;

每吃掉一份食物得分为10*游戏的难度,游戏结束后统计全部的得分;

游戏结束的条件为:

在控制蛇的过程中蛇头碰到蛇的身体的任何部位;

二、功能模块结构

 

 

 

退出程序

三、主要模块的算法说明

①食物的产生:

贪食蛇的食物要达到随机出现的目的,应采用rand()函数来实现。

②蛇的产生:

利用指针和sizeof函数来实现。

③移动吃食:

利用GetAsyncKeyState来指导蛇该前行的方向。

还有sleep函数,来控制其速度。

④结束控制:

当蛇碰到墙壁或咬到自己时游戏结束。

主要是对其位置进行判断。

四、运行结果

 

 

五、课程设计总结

这设计贪食蛇的过程当中遇到了许多的困难。

比如说食物的随机出现,蛇身该如何增长,速度的控制等等。

经过自己的自习思考,向老师和同学请教,上网查阅资料后,终于一点点的将这些困难解决。

如果用C++中的类来编写这个程序会是的程序更优。

但是由于自己刚开始在设想时,欠缺考虑,没有想到用类来解决这些问题。

所以,在编写程序的过程当中,一定要仔细思考。

要有良好的思维逻辑。

才能编写好的程序来。

在此次课程设计中,仍然存在着许多问题。

原本想用CImg来对贪食蛇及其食物进行处理。

但是发现难度略大。

便没有坚持下去。

编程应该是一个漫长的过程,不应该轻易放弃。

在此次课程设计中,调用到了许多函数。

温习了以前学过的许多知识。

使自己对C++有了更加深入的了解。

六、参考文献

①《C++程序设计》(第二版)谭浩强编著清华大学出版社

.②《VisualC++程序设计学习笔记》刘春辉编著北京电子工业出版社

七、附录

#include

#include//该函数主要可以提供一些函数与符号常量

#include//windows.h里定义了关于创建窗口,消息循环等函数

#include//声明一些"流操作符"

#include

#include

#include

usingnamespacestd;

#defineCOUTcout<<"■"

structBody

{

intx,y;

Body*next;

};

intFood=0,Food_x,Food_y,Direction=4,Grade,Score=0;

Body*body001=newBody[sizeof(Body)];

voidPosition(intx,inty)

{

COORDpos={y-1,x-1};//表示一个字符在控制台屏幕上的坐标

HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE);//标准输出的句柄

SetConsoleCursorPosition(Out,pos);//API中定位光标位置的函数

}

 

voidCreatSnake()//蛇

{

Body*body002=newBody[sizeof(Body)];

Body*body003=newBody[sizeof(Body)];

Body*body004=newBody[sizeof(Body)];

body001->x=11;body001->y=35;

body002->x=11;body002->y=33;

body003->x=11;body003->y=31;

body004->x=11;body004->y=29;

body001->next=body002;

body002->next=body003;

body003->next=body004;

body004->next=NULL;

}

voidPrt_Snake()

{

Body*p;

p=body001;

while(p!

=NULL)

{

Position(p->x,p->y);//返回节点相对与节点列表中所有选定节点的位置

COUT;

p=p->next;

}

Position(Food_x,Food_y);

COUT;

Position(7,63);

cout<<"Score:

"<

Position(10,63);

cout<<"Grade:

"<

}

intJudgeOver()//结束控制

{

Body*p;

p=body001->next;

if(body001->y==1||body001->y==57||body001->x==1||body001->x==24)

return1;

while(!

(p->x==body001->x&&p->y==body001->y))

{

if(p->next==NULL)

return0;

p=p->next;

}

return1;

}

voidCreat_Food()//食物

{

if(Food==0)

{

srand((int)time(0));//随机数发生器的初始化函数

Food_x=rand()%21+2;

inttemp=rand()%52+3;

if(temp%2==0)

Food_y=temp+1;

else

Food_y=temp;

Food=1;

}

}

voidMove()//控制移动

{

Body*p=newBody[sizeof(Body)],*q,*temp=newBody[sizeof(Body)];

if(Direction==1)

{

if(body001->x==(Food_x+1)&&body001->y==Food_y)

{

temp->x=Food_x;temp->y=Food_y;temp->next=body001;body001=temp;Food=0;Score+=5;

}

else

{

temp->x=body001->x-1;temp->y=body001->y;temp->next=body001;body001=temp;

q=body001;

while((q->next)->next!

=NULL)q=q->next;

Position((q->next)->x,(q->next)->y);cout<<"";

delete(q->next);

q->next=NULL;

}

}

if(Direction==2)

{

if(body001->x==Food_x&&body001->y==(Food_y+2))

{

temp->x=Food_x;temp->y=Food_y;temp->next=body001;body001=temp;Food=0;Score+=5;

}

else

{

temp->x=body001->x;temp->y=body001->y-2;temp->next=body001;body001=temp;

q=body001;

while((q->next)->next!

=NULL)q=q->next;

Position((q->next)->x,(q->next)->y);

cout<<"";

delete(q->next);q->next=NULL;

}

}

if(Direction==3)

{

if(body001->x==(Food_x-1)&&body001->y==Food_y)

{

temp->x=Food_x;temp->y=Food_y;temp->next=body001;body001=temp;Food=0;Score+=5;

}

else

{

temp->x=body001->x+1;temp->y=body001->y;temp->next=body001;body001=temp;

q=body001;

while((q->next)->next!

=NULL)q=q->next;

Position((q->next)->x,(q->next)->y);cout<<"";

delete(q->next);q->next=NULL;

}

}

if(Direction==4)

{

if(body001->x==Food_x&&body001->y==(Food_y-2))

{

temp->x=Food_x;temp->y=Food_y;temp->next=body001;body001=temp;Food=0;Score+=5;

}

else

{

temp->x=body001->x;temp->y=body001->y+2;temp->next=body001;body001=temp;

q=body001;

while((q->next)->next!

=NULL)q=q->next;

Position((q->next)->x,(q->next)->y);cout<<"";

delete(q->next);q->next=NULL;

}

}

}

 

voidGame()

{

while

(1)

{

if(JudgeOver()==1)return;

if(GetAsyncKeyState(VK_UP)&&Direction!

=3)Direction=1;

if(GetAsyncKeyState(VK_LEFT)&&Direction!

=4)Direction=2;

if(GetAsyncKeyState(VK_DOWN)&&Direction!

=1)Direction=3;

if(GetAsyncKeyState(VK_RIGHT)&&Direction!

=2)Direction=4;

Creat_Food();

Move();

Prt_Snake();

Sleep(550-Grade*50);//指定暂停时间

}

}

 

voidMenuShow()

{

cout<<""<

cout<<""<

cout<<""<

cout<<""<

cout<<"************************************"<

cout<<"*welcometosnake!

*"<

cout<<"*说明*"<

cout<<"*功能键:

上键控制向上,下键控制向下*"<

cout<<"*左键控制向左,右键控制向右*"<

cout<<"*3秒后自动进入游戏*"<

cout<<"************************************"<

Sleep(2000);

for(intb=3;b>=1;--b)

{

system("cls");

cout<

Sleep(1000);

system("cls");//调用Sleep函数,即每1000毫秒(1秒)输出一次

}

}

 

voidmain()

{

MenuShow();

Position(12,24);

cout<<"PleseSelectGrade:

[1~10]"<

cin>>Grade;if(Grade<1||Grade>10){cout<<"Worry!

"<

system("cls");

CreatSnake();

Prt_Snake();

Game();

system("cls");

Position(12,35);

{

cout<<"(⊙o⊙)很遗憾!

"<

}

Position(13,31);

{

cout<<"最后得分"<

}

Position(24,29);

getchar();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2