贪吃蛇源代码;暑假集训

来源:互联网 发布:汇川plc编程软件安装 编辑:程序博客网 时间:2024/06/05 22:33

自己写的贪吃蛇,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 4structNode{   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;}


原创粉丝点击