VC贪蛇吃游戏c语言程序设计报告方案.docx

上传人:b****7 文档编号:25556620 上传时间:2023-06-09 格式:DOCX 页数:29 大小:279.67KB
下载 相关 举报
VC贪蛇吃游戏c语言程序设计报告方案.docx_第1页
第1页 / 共29页
VC贪蛇吃游戏c语言程序设计报告方案.docx_第2页
第2页 / 共29页
VC贪蛇吃游戏c语言程序设计报告方案.docx_第3页
第3页 / 共29页
VC贪蛇吃游戏c语言程序设计报告方案.docx_第4页
第4页 / 共29页
VC贪蛇吃游戏c语言程序设计报告方案.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

VC贪蛇吃游戏c语言程序设计报告方案.docx

《VC贪蛇吃游戏c语言程序设计报告方案.docx》由会员分享,可在线阅读,更多相关《VC贪蛇吃游戏c语言程序设计报告方案.docx(29页珍藏版)》请在冰豆网上搜索。

VC贪蛇吃游戏c语言程序设计报告方案.docx

VC贪蛇吃游戏c语言程序设计报告方案

 

C语言课程设计报告

 

1、设计任务书

1.1题目与要求

本人计划编写一个贪吃蛇游戏,让同学们在无聊之际可以玩一会游戏放松一下-.-此游戏不会像英雄联盟那样容易上瘾,是学习紧张,生活紧张时的良好选择。

具体要求如下:

1.开始动画;

2.游戏规则的说明;

3.游戏开始与结束的选择;

4.游戏难度的选择;

5.游戏得分的实时显示;

6.游戏失败时的提示与显示分数;

1.2本系统涉及的知识点

for循环,while循环,一维,二维数组,if-else,if语句,结构体,函数调用,windows.h库,conio.h的一些使用等;

2、功能设计

2.1算法设计

本游戏需要实现的功能和要求:

1.在最开始选择游戏开始的时候:

gui();规则函数会在屏幕的右侧显示游戏的规则和一些说明提示。

dong();动画函数会运行,屏幕的左侧会出现一个游戏开始的动画。

即main()函数的运行过程如图1所示:

 

gui()函数

dong()函数

 

kai()函数

 

图1.main函数

2.Kai()(游戏开始与结束)函数利用if-else语句设计如图2所示的主菜单

请输入选择编号(1-2)

1----开始游戏

 

2----结束游戏

 

图2.游戏开始

3.选择1后,调用游戏难度选择函数,进入函数后是一个if-else-if语句实现的一个如图3所示的

请选择游戏困难程度:

 

1.简单模式

 

2.一般模式

 

3.困难模式

图3.难度选择

根据你所选的123游戏难度函数会返回相应的数,设置的有一个难度数组,里面有每个难度对应的反应时间。

4.选择完难度系数后,会自动的进入到youxi(intxx,intbei)函数,此函数是游戏的主要核心。

在youxi函数中,游戏已准备就绪,前几个蛇身和一个食物已经出现,

我们可以进行入下功能:

操作游戏

 

游戏暂停

 

游戏退出

 

2.2部分模块流程图

开始

游戏

3、程序代码设计

3.1规则模块与动画模块

1)函数原型:

voidgui();voiddong();

2)功能:

利用for循环语句和printf,COORD,Sleep()函数完成光标的移动和游戏规则的输出。

3)变量及类型:

COORDcoord;定义坐标结构体,通过它来移动光标的坐标。

intx,y,R,i;定义x,y两个变量,用来传递坐标的位置。

R为游戏高度。

i为光标与边界距离。

4)说明:

gui();通过for循环与光标的移动输出分割线,然后再通过光标的移动输出游戏规则;dong();通过for循环和i,x,y的变化和Sleep()的停顿效果,改变光标的位置,从外围到内部逐次输出,达到动画的效果。

3.2游戏开始与结束选择模块和游戏难度选择模块

1)函数原型:

intkai();intxuan();

2)功能:

利用for循环语句和printf,COORD函数完成对游戏屏幕左侧的清空,然后利用printf,scanf函数输出游戏的选择类型和输入玩家的选择。

3)变量及类型:

COORDcoord;定义坐标结构体,通过它来移动光标的坐标。

intx,y,lp,xx;定义x,y两个变量,用来传递坐标的位置;lp里存入玩家的选择,是kai()函数的返回值;xx是xuan()函数的返回值。

4)说明:

通过for循环和光标的移动,输出空格使屏幕为空,然后printf函数输出提示语,scanf函数让玩家输入他的选择,最后返回玩家的选择。

3.3游戏主体模块

1)函数原型:

intyouxi(intxx,intbei);

2)功能:

利用for循环语句,while循环语句,if-else,if语句,break语句,结构体,一维,二维数组,printf,rand,kbhit,getch,COORD函数,完成整个游戏运行的功能。

3)变量及类型:

structnode{

intx,y;}shen[1000];定义贪吃蛇的每个身体坐标。

COORDcoord;定义坐标结构体,通过它来移动光标的坐标。

charmap[60][30];定义游戏地图。

charxiang[4]={'w','a','s','d'};存放贪吃蛇的方向。

intx,y,i,R=50,D=24,ll=0,fen=0,p,wu=0,wux,wuy,fafe=0;定义多个变量,x,y用来传递坐标的位置;i为变量;R,D用来代表游戏右边界和下边界;ll表示贪吃蛇的长度;fen记录贪吃蛇所吃的食物;p记录贪吃蛇的方向;wux,wuy通过rand函数随机得到食物的位置;wu表示食物的状态,fafe表示游戏的状态。

4)说明:

先通过for循环和光标的移动和printf清空游戏界面和设置边界,然后通过rand()函数得到第一个贪吃蛇身体和它的方向;for循环,增加贪吃蛇的3个身体;然后rand()使随机出现一个食物,一个while循环+Sleep的停顿效果使游戏暂停,printf输出提示语,kbhit和getch判断是否有键盘输入和得到键盘输入值,跳出while进入游戏操作while循环中,通过printf输出没时刻的分数,通过Sleep,结构体,for,printf使贪吃蛇每隔一段时间向前移动一下。

kbhit和getch判断是否有游戏玩家的方向操作并得到方向值,如果输入空格游戏会暂停,然后可以选择游戏继续或退出。

食物被贪吃蛇所吃会再次随机出现一个食物,while循环一直循环直至游戏失败或游戏退出返回游戏得分。

3.4游戏失败提示模块

1)函数原型:

voidjiesu();

2)功能:

利用for循环语句和printf,COORD函数完成对游戏屏幕左侧中间位置的清空,然后利用printf,scanf函数输出游戏失败提示语。

3)变量及类型:

COORDcoord;定义坐标结构体,通过它来移动光标的坐标。

intx,y,i,j;定义x,y两个变量,用来传递坐标的位置;i,j为循环变量。

4)说明:

通过for循环和光标的移动,输出空格使屏幕为空,然后printf函数输出提示语。

3.5游戏代码及其相应注释

#include

#include

#include

#include

#include

#include

#include

#defineCXcoord.X=x

#defineCYcoord.Y=y

#defineSCPSetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord)//宏定义-.-

structnode{

intx,y;

}shen[1000];

voiddong();

voidgui();

intkai();

intyouxi();

intxuan();

voidjiesu();

intmain()

{

COORDcoord;

intx,y,xx,lp,kp,nan[4]={300,400,200,100};

system("color74");/*设置颜色*/

gui();/*显示规则*/

dong();/*显示动画*/

while

(1)

{

lp=kai();/*选择是否开始游戏*/

if(lp==2)

{

printf("\n\n\n谢谢来玩贪吃蛇!

!

\n欢迎下次再玩-.-\n");

return0;

}

xx=xuan();/*选择游戏难度*/

kp=youxi(nan[xx],xx);/*进入游戏,得到分数*/

x=51;y=14;

CX;CY;SCP;

printf("");/*消游戏中显示的得分...*/

if(kp==-1)

{

x=51;y=12;

CX;CY;SCP;

printf("游戏中退出-.-请重新选择...");

}

else

{

x=51;y=12;

CX;CY;SCP;

printf("本次游戏得分为:

%d",kp*10*xx);

}

}

Sleep(100000);/*暂停一段时间*/

return0;

}

intxuan()/*游戏难度选择模块*/

{

COORDcoord;

intx,y,xx;

for(x=0;x<50;x++)

for(y=0;y<24;y++)

{

CX;CY;SCP;

printf("");/*消去左边屏幕*/

}

x=0;y=0;CX;CY;SCP;

printf("请选择游戏困难程度:

\n");

printf("1.简单模式\n");

printf("2.一般模式\n");

printf("3.困难模式\n");

scanf("%d",&xx);

returnxx;

}

voiddong()/*动画模块*/

{

COORDcoord;

intx=20,y=11,i,R=24;

CX;CY;SCP;/*改变光标位置。

*/

printf("贪吃蛇!

");

for(i=0;i<10;i++)

{

x=i;

for(y=x;y

{

coord.X=x*2;

coord.Y=y;

SCP;

printf("0");

}

x=(23-i);

for(y=i;y<=x;y++)

{

coord.X=x*2;

coord.Y=y;

SCP;

printf("0");

}

x=i;

for(y=x;y

{

coord.Y=x;

coord.X=y*2;

SCP;

printf("0");

}

x=(23-i);

for(y=i;y<=x;y++)

{

coord.Y=x;

coord.X=y*2;

SCP;

printf("0");

}

Sleep(100);

}

return;

}

voidgui()/*规则模块*/

{

COORDcoord;

intx=50,y;

for(y=0;y<26;y++)

{

CX;CY;SCP;

printf("|");

}

x=52;y=0;

CX;CY;

SCP;

printf("游戏规则:

");

x=52;y=2;

CX;CY;SCP;

printf("1.wasd键控制贪吃蛇的方");

y=3;CX;CY;SCP;

printf("向.");

x=52;y=4;

CX;CY;SCP;

printf("2.当贪吃蛇碰到结界或自身会");

y=5;CX;CY;SCP;

printf("死亡.");

x=52;y=6;

CX;CY;SCP;

printf("3.游戏中间按空格键会暂停.");

x=52;y=8;

CX;CY;SCP;

printf("4.游戏暂停后,按'1'键游戏继");

y=9;CX;CY;SCP;

printf("续,按'0'键会回到刚开始游戏");

y=10;CX;CY;SCP;

printf("时的选择界面.");

}

intkai()/*游戏开始与结束选择模块*/

{

COORDcoord;

intx,y,lp;

for(x=0;x<50;x++)

for(y=0;y<24;y++)

{

CX;CY;SCP;

printf("");

}

x=0;y=0;CX;CY;SCP;

printf("1.游戏开始\n");

printf("2.游戏结束\n");

printf("请选择:

");

scanf("%d",&lp);

returnlp;

}

intyouxi(intxx,intbei)/*游戏主体模块*/

{

COORDcoord;charmap[60][30];/*地图*/

charxiang[4]={'w','a','s','d'};/*方向*/

intx,y,i,R=50,D=24,ll=0,fen=0,p,wu=0,wux,wuy,fafe=0;

/*fafe用1和0模拟bool类型,,,R是右边界D是下边界..*/

charzhiling,kp;

for(x=0;x<60;x++)

for(y=0;y<30;y++)

map[x][y]='';/*地图初始化*/

for(x=0;x<50;x++)

for(y=0;y<25;y++)

{

CX;CY;SCP;

printf("");

}

y=24;/*蛇x为0-49,,y为0-23;*/

for(x=0;x<50;x++)

{

CX;CY;SCP;

printf("=");/*下边界*/

}

shen[ll].x=rand()%8+20;

shen[ll++].y=rand()%6+10;

x=shen[ll-1].x;y=shen[ll-1].y;

CX;CY;SCP;

map[x][y]='+';

printf("+");/*蛇头*/

p=rand()%4;/*初始方向*/

if(xiang[p]=='w')

{

for(i=0;i<3;i++)/*增加三个蛇身*/

{

shen[ll].x=shen[ll-1].x;

shen[ll].y=shen[ll-1].y-1;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

CX;CY;SCP;map[x][y]='+';

printf("+");

}

}

elseif(xiang[p]=='a')

{

for(i=0;i<3;i++)

{

shen[ll].x=shen[ll-1].x-1;

shen[ll].y=shen[ll-1].y;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

CX;CY;SCP;map[x][y]='+';

printf("+");

}

}

elseif(xiang[p]=='s')

{

for(i=0;i<3;i++)

{

shen[ll].x=shen[ll-1].x;

shen[ll].y=shen[ll-1].y+1;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

CX;CY;SCP;map[x][y]='+';

printf("+");

}

}

elseif(xiang[p]=='d')

{

for(i=0;i<3;i++)

{

shen[ll].x=shen[ll-1].x+1;

shen[ll].y=shen[ll-1].y;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

CX;CY;SCP;map[x][y]='+';

printf("+");

}

}

while

(1)

{

wux=rand()%R;

wuy=rand()%D;

if(map[wux][wuy]!

='+')

{

x=wux;y=wuy;

CX;CY;SCP;map[x][y]='#';

printf("#");

break;

}

}

while

(1)

{

x=51;y=12;

CX;CY;SCP;

printf("按任意方向键开始游戏...");

if(kbhit())/*kbhit函数判断是否有键盘输入*/

{

kp=getch();/*得到键盘输入*/

if(kp=='w'||kp=='a'||kp=='s'||kp=='d')

{

x=51;y=12;

CX;CY;SCP;

printf("");/*消提示语*/

break;

}

}

Sleep(100);

}

while

(1)

{

x=51;y=14;

CX;CY;SCP;

printf("得分:

%d",fen*10*bei);

if(kbhit())/*判断是否有键盘输入*/

zhiling=getch();/*得到键盘输入*/

if(zhiling!

=xiang[p])

{

if(p<2&&zhiling!

=xiang[p+2]||p>1&&zhiling!

=xiang[p-2])/*判断方向不反向,不然会直接死亡。

*/

{

if(zhiling=='w')

p=0;

elseif(zhiling=='a')

p=1;

elseif(zhiling=='s')

p=2;

elseif(zhiling=='d')

p=3;

elseif(zhiling=='')/*暂停*/

{

zhiling='1';/*改变一下-.-不然一直暂停...*/

while

(1)

{

if(kbhit())/*判断是否有键盘输入*/

{

kp=getch();/*得到键盘输入*/

if(kp=='1')

break;

elseif(kp=='0')

{

return-1;

}

}

Sleep(100);

}

}

}

}

if(xiang[p]=='w')

{

shen[ll].x=shen[ll-1].x;

shen[ll].y=shen[ll-1].y-1;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

if(x==-1||x==R||y==-1||y==D||map[x][y]=='+')/*贪吃蛇死亡,游戏失败*/

{

fafe=1;

break;

}

if(map[x][y]=='#')/*食物被吃,增加分数,食物状态改变*/

{

fen++;

wu=1;

}

CX;CY;SCP;map[x][y]='+';

printf("+");

if(!

wu)/*蛇身向前一位-.-并消去最后一个*/

{

x=shen[0].x;y=shen[0].y;

CX;CY;SCP;map[x][y]='';

printf("");

for(i=0;i

shen[i]=shen[i+1];

ll--;

}

}

elseif(xiang[p]=='a')

{

shen[ll].x=shen[ll-1].x-1;

shen[ll].y=shen[ll-1].y;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

if(x==-1||x==R||y==-1||y==D||map[x][y]=='+')

{

fafe=1;

break;

}

if(map[x][y]=='#')

{

fen++;

wu=1;

}

CX;CY;SCP;map[x][y]='+';

printf("+");

if(!

wu)

{

x=shen[0].x;y=shen[0].y;

CX;CY;SCP;map[x][y]='';

printf("");

for(i=0;i

shen[i]=shen[i+1];

ll--;

}

}

elseif(xiang[p]=='s')

{

shen[ll].x=shen[ll-1].x;

shen[ll].y=shen[ll-1].y+1;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

if(x==-1||x==R||y==-1||y==D||map[x][y]=='+')

{

fafe=1;

break;

}

if(map[x][y]=='#')

{

fen++;

wu=1;

}

CX;CY;SCP;map[x][y]='+';

printf("+");

if(!

wu)

{

x=shen[0].x;y=shen[0].y;

CX;CY;SCP;map[x][y]='';

printf("");

for(i=0;i

shen[i]=shen[i+1];

ll--;

}

}

elseif(xiang[p]=='d')

{

shen[ll].x=shen[ll-1].x+1;

shen[ll].y=shen[ll-1].y;

ll++;x=shen[ll-1].x;y=shen[ll-1].y;

if(x==-1||x==R||y==-1||y==D||map[x][y]=='+')

{

fafe=1;

break;

}

if(map[x][y]=='#')

{

fen++;

wu=1;

}

CX;CY;SCP;map[x][y]='+';

printf("+");

if(!

wu)

{

x=shen[0].x;y=shen[0]

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1