字符游戏-贪吃蛇

贪吃蛇这款经典的游戏,想必大多数人都玩过。想当年我只有诺基亚老年机的时候,只有贪吃蛇这一款游戏可玩,不知道有多少个无聊的夜晚是贪吃蛇陪我度过的。多年以后,作为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;
}

一些主要的函数的代码已经展示出来了,因为我只是个初学者,所以有些写法不太好也请谅解。在下一篇博客中,我会展示出智能(智障)蛇的算法。

你可能感兴趣的:(游戏,游戏开发)