贪吃蛇 -- 暑假集训

来源:互联网 发布:古代服装图案知乎 编辑:程序博客网 时间:2024/06/07 06:29
原文地址:-- 暑假集训">贪吃蛇 -- 暑假集训作者:奔跑的乌龟

自己写的贪吃蛇,a s w d控制移动方向, [ ] 控制速度加减,有Bug的话欢迎指出

 


#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define SNAKE_R21//行
#define SNAKE_L20//列
#define MOD 4

structNode{
   int x,y;
}snake[SNAKE_R*SNAKE_L];
charmap[SNAKE_R+10][SNAKE_L+10];
intdir,cur_x,cur_y,lenth;
intans[4][2]={0,-1,-1,0,0,1,1,0};
intSPEED=50,score;

voidgotoxy(int x,int y)
{
   COORD c;
   c.X=x-1;c.Y=y-1;
   SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}

voidinit()
{
   int i,j;
   lenth=0;
   score=0;
   memset(map,0,sizeof(map));
   snake[lenth].x=SNAKE_R/2;
   snake[lenth++].y=SNAKE_L/2;
   for(i=0;i<=SNAKE_R;i++)
   {
      for(j=0;j<=SNAKE_L;j++)
      {
         if(i==0&&j==0)printf("╔");
         elseif(i==0 &&j==SNAKE_L)printf("╗");
         elseif(i==SNAKE_R &&j==0)printf("╚");
         elseif(i==SNAKE_R &&j== SNAKE_L)printf("╝");
         elseif(i==0 || i==SNAKE_R)printf("==");
         elseif(j==0 || j==SNAKE_L)printf("‖");
         elseprintf("  ");
      }
      printf("n");
   }
   gotoxy(snake[0].y*2+1,snake[0].x+1);
   map[snake[0].x][snake[0].y]=1;
   printf("■");
   gotoxy(cur_y*2+1,cur_x+1);
   printf("●");
   gotoxy(SNAKE_L*2+14,SNAKE_R/2+1);
   printf("Score: %d",score);
}

intJudge()
{
   int x,y,t,i,j;
   x=snake[0].x+ans[dir][0];
   y=snake[0].y+ans[dir][1];
   if(x<=0 || y<=0 || x>=SNAKE_R || y>=SNAKE_L || map[x][y])
   {
      if(map[x][y])
      {
         for(t=1;t<=5;t++)
         {
             gotoxy(y*2+1,x+1);
             Sleep(400);
             if(t%2)printf("■");
             else printf("  ");
         }
      }
      for(t=1;t<=5;t++)
      {
         Sleep(200);
         for(i=0;i<lenth;i++)
         {
             x=snake[i].x;y=snake[i].y;
             gotoxy(y*2+1,x+1);
             if(!(t%2))printf("  ");
             else printf("■");
         }
      }

      for(t=1;t<=5;t++)
      {
         Sleep(200);
         for(i=1;i<SNAKE_R;i++)
             for(j=1;j<SNAKE_L;j++)
             {
                gotoxy(j*2+1,i+1);
                if(t%2)printf("■");
                else printf("  ");
             }
      }
      gotoxy(SNAKE_L-3,SNAKE_R/2+1);
      printf(" GAME OVER! ");
      gotoxy(1,SNAKE_R+2);
      return -1;
   }
   if(x==cur_x &&y==cur_y)
   {
      score++;
      gotoxy(SNAKE_L*2+14,SNAKE_R/2+1);
      printf("Score: %d",score);
      snake[lenth].x=snake[lenth-1].x-ans[dir][0];
      snake[lenth].y=snake[lenth-1].y-ans[dir][1];
      lenth++;
      do{
         srand(time(NULL));
         cur_x=(rand()%(SNAKE_R-1)+1);
         cur_y=(rand()%(SNAKE_L-1)+1);
      }while(map[cur_x][cur_y]);
      gotoxy(cur_y*2+1,cur_x+1);
      printf("●");
      return 1;
   }
   return 0;
}

voidMove(int state)
{
   int i;
   if(!state)
   {
      gotoxy(snake[lenth-1].y*2+1,snake[lenth-1].x+1);
      map[snake[lenth-1].x][snake[lenth-1].y]=0;
      printf("  ");
   }
   gotoxy((snake[0].y+ans[dir][1])*2+1,snake[0].x+ans[dir][0]+1);
   printf("■");
   map[snake[0].x+ans[dir][0]][snake[0].y+ans[dir][1]]=1;
   for(i=lenth-1;i>0;i--)
   {
      snake[i].x=snake[i-1].x;
      snake[i].y=snake[i-1].y;
   }
   snake[0].x+=ans[dir][0];
   snake[0].y+=ans[dir][1];
}

intmain()
{
   char key;
   int finish=0,flag;
   srand(time(NULL));
   do{
      cur_x=(rand()%(SNAKE_R-1)+1);
      cur_y=(rand()%(SNAKE_L-1)+1);
   }while(cur_x==SNAKE_R/2 || cur_y==SNAKE_L);
   dir=rand()%MOD;
   
   init();
   
   while(1)
   {
      while(!kbhit())
      {
         Sleep(1);
         finish++;
         if(finish>=SPEED)
             finish=0;
         elsecontinue;
         flag=Judge();
         if(flag==-1)return0;
         Move(flag);
         gotoxy(cur_y*2+1,cur_x+1);
         printf("●");
      }
      key=getch();
      
      if(key=='a' &&dir!=2)dir=0;
      else if(key=='w' &&dir!=3)dir=1;
      else if(key=='d' &&dir!=0)dir=2;
      else if(key=='s' &&dir!=1)dir=3;
      else if(key=='[' &&SPEED>10)SPEED-=10;
      else if(key==']')SPEED+=10;
   }
   return 0;
}
原创粉丝点击