贪吃蛇这款经典的游戏,想必大多数人都玩过。想当年我只有诺基亚老年机的时候,只有贪吃蛇这一款游戏可玩,不知道有多少个无聊的夜晚是贪吃蛇陪我度过的。多年以后,作为C语言初学者的我制作了这款贪吃蛇。
这款贪吃蛇除了普通贪吃蛇的功能以外,我还加入了难度选择、地图选择、最高分记录、游戏中途暂停、重新游戏的功能。接下来让我来介绍一下我的C语言贪吃蛇游戏。
游戏所有函数
void gameover()
void newgame()
void output()
void put_money(int ,int)
void turn_up()
void turn_down()
void turn_left()
void turn_right()
用两个数组储存蛇的坐标,[0][0]就是蛇头的坐标。
int snakey[100]={5,4,3,2,1};
int snakex[100]={1,1,1,1,1};
我们要在地图中随机放置食物,但是如果很不幸的随机放置坐标上是蛇的身体,就必须重新随机产生放置坐标,直到放置坐标点为空白。
void put_money(int i,int j)
{
int x=0,y=0;
srand(time(NULL));
while ( (map[y][x]=='*') || (map[y][x]=='#')|| ((x==i)&&(y==j)) )
{
x=rand()%21+1;
y=rand()%10+1;
}
Y=x;
X=y;
map[y][x]='$';
return;
}
每次清屏后,我们都要重新打印一次界面,输出函数如下。
void output() /*输出*/
{
system("cls");
int i,j;
for(i=0; i<12; i++)
{
for(j=0; j<23; j++) printf("%c", map[i][j]);
printf("\n");
}
printf("当前最高分为%d,你一定可以超过它的!\n",record);
printf("你的当前得分%d",lenght-5);
return;
}
记录游戏最高分,读取文件类容。
if((fp=fopen("记录.txt","r+"))==NULL) /*读取并记录游戏最高分*/
{
printf("无法打开文件\n");
getchar();
exit(0);
}
fgets(str,sizeof(str),fp);
for(i=0;str[i];i++)record=record*10+str[i]-48;
游戏结束时,判断是否打破记录,并且将最高分存入文件中。
void gameover() /*游戏结束*/
{
char j=0;
life=0;
if(record5){
printf("\n你的得分是%d分\n",lenght-5);
printf("\n破纪录了!你真强,再接再厉!\n");
record=lenght-5;
for(int i=0;i<4;i++)str[i]=0;
lenght-=5;
for(int i=0;lenght!=0;i++){
str[i]=lenght%10+48;
lenght/=10;
}
rewind(fp);
fprintf(fp,"%s",str);
life=1;
return;
}
printf("\n哈哈 傻了吧\n");
printf("\n你的得分是%d分\n",lenght-5);
life=1;
return;
}
为了让蛇能够自己动起来,使用了以下函数。改变hard变量的值,就可以改变每次循环的时间,从而改变难度。
timeover=1;
start=clock();
while((timeover=(clock()-start<=hard*30))&&!kbhit());
if(timeover)
{
direcation=getch();
}
四个方向的函数都很相似,这里举出向上前进的函数。
void turn_up() /*向上*/
{
system("cls");
int i;
if ( (snakex[0]==1) || (map[snakex[0]-1][snakey[0]]=='*') ) gameover(); else {
if (map[snakex[0]-1][snakey[0]]=='$')
{
put_money( snakey[0], snakex[0]-1 );
lenght++;
map[snakex[lenght-1]][snakey[lenght-1]]='*';
}
for(i=lenght; i>0; i--)
{
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
map[snakex[lenght]][snakey[lenght]]=' ';
snakex[0]--;
for(i=lenght-1; i>0; i--) map[snakex[i]][snakey[i]]='*';
map[snakex[0]][snakey[0]]='#';
output();
}
return;
}
一些主要的函数的代码已经展示出来了,因为我只是个初学者,所以有些写法不太好也请谅解。在下一篇博客中,我会展示出智能(智障)蛇的算法。