C语言贪吃蛇实验报告Word文件下载.docx
- 文档编号:21600383
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:19
- 大小:21.85KB
C语言贪吃蛇实验报告Word文件下载.docx
《C语言贪吃蛇实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言贪吃蛇实验报告Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
2.4设计程序中的调试过程
在调试过程中,遇到了很多的问题,比如.因为使用的刷屏函数,所以屏幕经常出现闪烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们也得到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了很大的收获。
可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。
2.5设计的流程图
总程序设计图如图1所示:
方向键控制的设计流程图如图2所示:
其中upmove函数控制蛇向上运动,downmove
蛇吃食物蛇身变长的设计流程图如图3所示:
2.6程序的总体设计思想
•利用人工绘图法,制作美观的游戏界面.
•通过随机函数产生随机数,控制游戏过程食物的出现.
•定义键盘操作,控制游戏过程蛇的移动方向.
•画出边界,并判断游戏是否结束.
统计游戏过程蛇吃的食物数量,计算并输出游戏成绩.
3软件的使用说明
3.1建立游戏的过程说明
先打开MicrossftVisualC++程序,进入MicrossftVisualC++程序后打开文件菜单,点机新键命令按钮,先建立一个Win32ConsoleApplicationT程.建立工程时可填写工程名称和你所建工成要存放的位置,点机确定按钮,再点机一个空工程类型的控制台程序,再点机完成,然后点机确定按钮,此时一个所要建立的工程就已经建立好,然后再点机文件中的新建按钮,然后再建立一个C++SourceFile文件,并填写文件名称,然后点机确定按钮,此时所要建立的工程和文件都已建立完毕,此时您就可以把贪吃蛇游戏的代码复制粘贴到你刚刚建立的工程和文件里面了,然后点机组建命令中的编译和组建命令,最后点机执行命令就可进入贪吃蛇游戏中了。
执行游戏的过程说明
进入贪吃蛇游行中后,首先弹出一个界面,上面出现的是欢迎词和游戏的简单说明,可点机任意键开始游戏,此游戏是由键盘的四个方向键进行控制的,吃一个点,蛇身就长长一端,总分数就加10分,如果碰壁或结尾游戏则结束,最后出先一个界面.上面显示你此次游戏的总分数°
希望我这个小游戏能让你玩的开心。
收获及体会
在设计这个程序中我主要学会了如何运用以下有关C语言和C++的知识:
1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序
十分重要’在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。
2)分析函数先从mainO函数入手。
Main。
函数是C++源程序编译时的开始,
从mam()函数开始读函数可将其他函数的功能理解得更透彻。
3)在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。
4)我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行处理的函数,起功能我都有所了解。
5)学会了有关头文件的使用方法,及系统调配问题的解决方法等。
6)在调试过程中,遇到了很多的问题,比如,因为使用的刷屏函数,所以屏幕经常出现闪烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们也得到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了很大的收获。
可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。
附录部分程序代码清单
#include<
stdio.h>
stdlib.h>
conio.h>
time.h>
windows.h>
#defineHEAD300
#defineFOOD400
^definev_sleep100/*改变sleep的大小可改变蛇的运动速度,此数值越小蛇的运动速度越快*/intscore=0;
/*定义了一个全局变量来在整个程序中统计总成绩*/
/*欢迎词*/
voidwelc()
(
printf(”\n\n\n\n\n\n\t\t\t欢迎来到【贪吃蛇】小游戏\n\nu);
printf("
\t\t\t蛇身加长一段就加10分\n\n"
);
\t\t此游戏用键盘的方向键控制即可。
若想退出请按Esc建。
\n"
\n\t\t\t相反的方向的话是暂停。
\n\t\t\t请接任意键进入游戏。
"
getch();
}
/**/
/*人工画图程序*/
voiddrawpt(inta,intx,inty)/•利用人工绘图程序来画出蛇运动的范围•/
if(x==O)
return;
if(y==O)
(printf("
\t\t\f);
if(x=16)
\n”);
if(y==16)
printfCV);
if(x>
0&
&
x〈16&
y>
y<
16)
if(a==O)
O"
);
/*用空心圆来表蛇改运动的总范围•/
elseprint"
•“);
/*用实心圆来蛇的长度和食物的出现地点*/return;
voiddraw(int(*sna)[17])
inti,j;
system(MclsM);
/♦刷屏工具•/
for(i=0;
i<
17;
i++)/•区域范围的大小•/
for(j=0;
j<
j++)
drawpt(sna[i][j],jj);
printf(M\t\t\t总成绩为%d分u,score);
/*取随机数,出现食物用*/
intrandnoQ/*利用这个随机函数来控制食物的随机出现*/
srand(time(NULL));
returnrand0%15+l;
/*随机函数出现食物时的范围,防止食物出现在范围之外*/}
/•*/
/*判断游戏是否结束*/
booljudgeGO(int(*sna)[17])
intx,y,i=0,max=0,count=0;
for(x=0,y=0;
y++)
if(sna[x][y]二二HEAD)/*判断头部是否在最外层的,/returnfalse;
for(x=16,y=0;
if(sna[x][y]==HEAD)returnfalse;
for(y=0,x=0;
x<
x++)
for(y=16,x=0;
for(x=0;
16;
for(y=0;
if(max<
sna[x][y])
if(sna[x][y]!
=HEAD&
sna[x][y]!
=FOOD)
max=sna[x][y];
/*这个也是求头部之后的*/}
max;
i++)
for(x=l;
for(y=l;
if(sna[x]|y]==i+l)
count++;
/*这个判断想了好久的★/score=(count-3)*10;
/*计算蛇的总成绩•/}
if(count!
二max)/*判断身体部分是否连续•/returnfalse;
returntrue;
/*•/
/*游戏结束显示V
voidgameover()
{
printf(”\n\n\n\n\n\n\n\n)
printf(,,\t\t\t\tM);
printf(u游戏结束\n\nM);
printf(”\t\t\t\t)
printf("
此次总成绩为Hd分\n\n"
score);
printf(M\t\t\t\tM);
请您再接再厉\n\n"
printf(”\t\t\t“);
printf(“按Esc键退出,按任意键重新开始。
/•全程标记法,从尾巴开始123456....HEAD,食物是FOOD。
•/
voidmarksn()
{_
voiddownmove(int(*sna)[17]);
/*用键盘的方向键的下键来控制蛇向下运动•/
voidupmove(int(*sna)[17]);
/*用键盘的方向键的上键来控制蛇向上运动*/
voidleftmove(int(*sna)[17]);
/*用键盘的方向键的左键来控制蛇向左运动*/
voidrightmove(int(*sna)[17]);
/*用键盘的方向键的右键来控制蛇向右运动*/
intjudgeF(int(*sna)[17],intkeym);
intsnake[17][17]={0};
/*各种东西初始化*/
intx=l,y=7,key,keyl;
snake[l][l]=l;
snake[l][2]=2;
snake[l][3]=3;
snake[2][3]=HEAD;
while(snake[x][y]!
=0)
x=randno();
y=randno();
snake[x]M=FOOD:
draw(snake);
/•控制的部分*/
while(judgeGO(snake))
key=getchQ;
switch(keyX
case72:
while(!
kbhit()&
keyl!
=80&
judgeGO(snake))/・这个函数kbhit()自己查一下吧〜控制输入很好*/
if(judgeF(snaketkey))
Sleep(v_sleep);
/*Sleep函数在着是个延迟函数,也可在呈现头改变v.sleep的大小来控制
蛇的运动速度•/continue;
upmove(snake);
/*用键盘的方向键的上键来控制蛇向上运动•/
keyl二key;
/*这里的keyl是就来标记上一步的方向,这样相反的方向就暂停了*/
/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep的大小来控制蛇的运动速度•/
break;
case80:
kbhitO&
=72&
judgeGO(snake))
if(judgeF(snake,key))
/*Sleep函数在着是个延迟函数,也可在呈现头改变v.sleep的大小来控制蛇的运动速度*/
continue;
}_
downmove(snake);
/*用键盘的方向键的下键来控制蛇向下运动•/draw(snake);
keyl二key;
/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep的大小来控制蛇的运动速度,/
case75:
=77&
/*Sleep函数在着是个延迟函数,也可在呈现头改变v_sleep的大小来控制蛇的运动速度•/
leftmove(snake);
/*用键盘的方向键的左键来控制蛇向左运动•/
keyl=key:
)break;
case77:
=75&
rightmove(snake);
/*用键盘的方向键的右键来控制蛇向右运动•/
key1=key;
)
case27:
exit(O);
default:
switch(keyl){
(_upmove(snake);
/*±
键函数控制蛇向上运动会/draw(snake);
(_downmove(snake);
/*下键函数控制蛇向下运动•/draw(snake);
break
/*左键函数控制蛇向左运动•/draw(snake);
judgeGO(snake))
(_rightmove(snake);
/*右键函数控制蛇蛇向右运动*/draw(snake);
/*是否继续游戏*/
gameoverQ;
/*判断游戏是否继续的函数*/
if(getch()==27)
else
marksn();
/*上下左右移动神马的*/
voiddownmove(int(*sna)[17])/*控制蛇向下运动的函数★/
intx=0,y二O,mark二0;
=0&
sna[x]M=sna[x][y]-l;
//®
面已经说了,12345....标记法,减去1的话,除了头部以外其他的就移动了。
if(mark<
mark=sna[x][y];
〃这个是求头部之后的值=
if(sna[x][y]二二HEAD)
(++x:
9l>
x:
o=x)JO|
:
O=>
|Jeiu4o=Alo=x5ui
/,噩史历理迅立回3$伸世,/(kl](8US,)WgAOLU伊IpiOA
:
ujnjsj
X+>
|jeuj=[^[x]eus
!
QV3H=[A][l-x]eus
(OV3H==[A][x]eus)|!
(++X:
9i>
X:
o=X)JO|
0=x)JO|
[X][x]eus=>
|jeiu
(aOOd=i[<
][x]eusTOaV3H=i[A][x]eus)|!
([X][x]eus>
>
|jeiu)}i
9T>
9[>
o=x)」oj
•T■[A][x]eus=[X][x]eus
(aOOd=iM[x]eusTOaV3H=i[<
][x]eus^o=iW[x]eus)|i
(++A:
o=A)jo|
0二>
|」8心0顼0=x[U!
/乎德—理呈T回幽翻爵♦/(亿l](eusQjuiJsAoiudnpiOA
ujn^sj
°
MM^®
Wl+>
ljeuj=W[x]eus
单会用腥长〃:
QV3H二囚[1+xRus
91>
o=x)jo|
[A][x]eus=[X][x]eus
(QOOd=iM[x]eus^av3H=i[0[x]eus^o=iW冈pus)』
A:
o=X)jo|
|爬心0顼0=x}iu
/¥
潺史闵理以早回莎隗爵./([ZtRgSj5UI)9AOCU^6upiOA
ujn^gj
1+>
;
QV3H=[l-^[x]eus
(QV3H==[A]冈BUS加
9I>
(OOOzl=iM[x]eusTOQV3H=iM[x]eus加
|jeuj)j.i
9r>
T-[X][x]eus=[X][x]eus
(OOOd=iM冈eus冷冷C]V3H二iMRxRus湿冷0二ipq[xRus)!
)for(y=0;
sna[x][y]!
=FOOD)mark=sna[x][y];
sna[x]^+l]=HEAD;
sna[x][y]=mark+1;
intjudgeF(int(*sna)[17]jntkeym)
intrandno();
intx,y,mark=0,i=randno(),j=randno();
if(sna[x-l][y]二二FOOD&
keym=二72)
sna[x-l][y]=HEAD:
sna[x][y]=mark+l;
while(sna[i]fl]!
=O)
i=randno();
j=randno();
sna[i][j]=FOOD;
return1;
if(sna[x+l][y]==FOOD&
keym==80){
sna[x+l][y]=HEAD;
sna[i]|j]=FOOD;
if(sna[x]|y+1]==FOOD&
keym==77)
sna[x][y+l]=HEAD:
while(snap]0]!
if(sna[x][y-l]==FOOD&
keym==75)
sna[x][y-l]=HEAD;
return0;
/•主函数没什么内容*/
intmain(void)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 贪吃 实验 报告