#include <stdio.h>      #include <time.h>      #include <stdlib.h>      #include <conio.h>      #include<time.h>      #include<ctype.h>      #include <time.h>      #include <windows.h>      #include <process.h>      #define UP 72      #define DOWN 80      #define LEFT 75      #define RIGHT 77       int length;      int bend_no;      int len;      char key;      void record();      void load();      int life;      void Delay(long double);      void Move();      void gotoxy(int x, int y);      void GotoXY(int x,int y);      void Bend();      void Boarder();      void Down();      void Left();      void Up();      void Right();      void ExitGame();      int Scoreonly();      struct coordinate{          int x;          int y;          int direction;      };      typedef struct coordinate coordinate;      coordinate head, bend[500],food,body[30];      int main()      {         system(" color 3");         char key;          Print();          system("cls");          load();          length=5;          head.x=25;          head.y=20;          head.direction=RIGHT;          Boarder();          Food(); //to generate food coordinates initially          life=3; //number of extra lives          bend[0]=head;          Move();   //initialing initial bend coordinate          return 0;      }        void Move()      {          int a,i;          do{              Food();              fflush(stdin);              len=0;              for(i=0;i<30;i++)              {                  body[i].x=0;                  body[i].y=0;                  if(i==length)                  break;              }              Delay(length);              Boarder();              if(head.direction==RIGHT)                  Right();              else if(head.direction==LEFT)                  Left();              else if(head.direction==DOWN)                  Down();              else if(head.direction==UP)                  Up();              ExitGame();            }while(!kbhit());          a=getch();          if(a==27)          {              system("cls");              exit(0);          }          key=getch();          if((key==RIGHT&&head.direction!=LEFT&&head.direction!=RIGHT)||(key==LEFT&&head.direction!=RIGHT&&head.direction!=LEFT)||(key==UP&&head.direction!=DOWN&&head.direction!=UP)||(key==DOWN&&head.direction!=UP&&head.direction!=DOWN))          {              bend_no++;              bend[bend_no]=head;              head.direction=key;              if(key==UP)                  head.y--;              if(key==DOWN)                  head.y++;              if(key==RIGHT)                  head.x++;              if(key==LEFT)                  head.x--;              Move();            }          else if(key==27)          {              system("cls");              exit(0);          }          else          {              printf("\a");              Move();          }      }      void gotoxy(int x, int y)      {       COORD coord;       coord.X = x;       coord.Y = y;       SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);      }      void GotoXY(int x, int y)      {          HANDLE a;          COORD b;          fflush(stdout);          b.X = x;          b.Y = y;          a = GetStdHandle(STD_OUTPUT_HANDLE);          SetConsoleCursorPosition(a,b);       }      void load(){          int row,col,r,c,q;          gotoxy(36,14);          printf("loading...");          gotoxy(30,15);          for(r=1;r<=20;r++){          for(q=0;q<=100000000;q++);//to display the character slowly          printf("%c",177);}          getch();      }      void Down()      {          int i;          for(i=0;i<=(head.y-bend[bend_no].y)&&len<length;i++)          {              GotoXY(head.x,head.y-i);              {                  if(len==0)                      printf("v");                  else                      printf("*");              }              body[len].x=head.x;              body[len].y=head.y-i;              len++;          }          Bend();          if(!kbhit())              head.y++;        }      void Delay(long double k)      {          Score();          long double i;          for(i=0;i<=(10000000);i++);      }      void ExitGame()      {          int i,check=0;          for(i=4;i<length;i++)   //starts with 4 because it needs minimum 4 element to touch its own body          {              if(body[0].x==body[i].x&&body[0].y==body[i].y)              {                  check++;    //check's value increases as the coordinates of head is equal to any other body coordinate              }              if(i==length||check!=0)                  break;          }          if(head.x<=10||head.x>=70||head.y<=10||head.y>=30||check!=0)          {              life--;              if(life>=0)              {                  head.x=25;                  head.y=20;                  bend_no=0;                  head.direction=RIGHT;                  Move();              }              else              {                  system("cls");                  printf("All lives completed\nBetter Luck Next Time!!!\nPress any key to quit the game\n");                  record();                  exit(0);              }          }      }      void Food()      {          if(head.x==food.x&&head.y==food.y)          {              length++;              time_t a;              a=time(0);              srand(a);              food.x=rand()%70;              if(food.x<=10)                  food.x+=11;              food.y=rand()%30;              if(food.y<=10)                  food.y+=11;          }          else if(food.x==0)/*to create food for the first time coz global variable are initialized with 0*/          {              food.x=rand()%70;              if(food.x<=10)                  food.x+=11;              food.y=rand()%30;              if(food.y<=10)                  food.y+=11;          }        }      void Left()      {          int i;          for(i=0;i<=(bend[bend_no].x-head.x)&&len<length;i++)          {              GotoXY((head.x+i),head.y);             {                      if(len==0)                          printf("<");                      else                          printf("*");              }              body[len].x=head.x+i;              body[len].y=head.y;              len++;          }          Bend();          if(!kbhit())              head.x--;        }      void Right()      {          int i;          for(i=0;i<=(head.x-bend[bend_no].x)&&len<length;i++)          {              //GotoXY((head.x-i),head.y);              body[len].x=head.x-i;              body[len].y=head.y;              GotoXY(body[len].x,body[len].y);              {                  if(len==0)                      printf(">");                  else                      printf("*");              }              /*body[len].x=head.x-i;              body[len].y=head.y;*/              len++;          }          Bend();          if(!kbhit())              head.x++;        }      void Bend()      {          int i,j,diff;          for(i=bend_no;i>=0&&len<length;i--)          {                  if(bend[i].x==bend[i-1].x)                  {                      diff=bend[i].y-bend[i-1].y;                      if(diff<0)                          for(j=1;j<=(-diff);j++)                          {                                body[len].x=bend[i].x;                              body[len].y=bend[i].y+j;                              GotoXY(body[len].x,body[len].y);                              printf("*");                              len++;                              if(len==length)                                  break;                          }                      else if(diff>0)                          for(j=1;j<=diff;j++)                          {                              /*GotoXY(bend[i].x,(bend[i].y-j));                              printf("*");*/                              body[len].x=bend[i].x;                              body[len].y=bend[i].y-j;                              GotoXY(body[len].x,body[len].y);                              printf("*");                              len++;                              if(len==length)                                  break;                          }                  }              else if(bend[i].y==bend[i-1].y)              {                  diff=bend[i].x-bend[i-1].x;                  if(diff<0)                      for(j=1;j<=(-diff)&&len<length;j++)                      {                          /*GotoXY((bend[i].x+j),bend[i].y);                          printf("*");*/                          body[len].x=bend[i].x+j;                          body[len].y=bend[i].y;                          GotoXY(body[len].x,body[len].y);                              printf("*");                          len++;                          if(len==length)                                  break;                      }                  else if(diff>0)                      for(j=1;j<=diff&&len<length;j++)                      {                          /*GotoXY((bend[i].x-j),bend[i].y);                          printf("*");*/                          body[len].x=bend[i].x-j;                          body[len].y=bend[i].y;                          GotoXY(body[len].x,body[len].y);                              printf("*");                          len++;                          if(len==length)                              break;                      }              }          }      }      void Boarder()      {          system("cls");          int i;          GotoXY(food.x,food.y);   /*displaying food*/              printf("F");          for(i=10;i<71;i++)          {              GotoXY(i,10);                  printf("!");              GotoXY(i,30);                  printf("!");          }          for(i=10;i<31;i++)          {              GotoXY(10,i);                  printf("!");              GotoXY(70,i);              printf("!");          }      }      void Print()      {          //GotoXY(10,12);          printf("\tWelcome to the mini Snake game.(press any key to continue)\n");         getch();          system("cls");          printf("\tGame instructions:\n");          printf("\n-> Use arrow keys to move the snake.\n\n-> You will be provided foods at the several coordinates of the screen which you have to eat. Everytime you eat a food the length of the snake will be increased by 1 element and thus the score.\n\n-> Here you are provided with three lives. Your life will decrease as you hit the wall or snake's body.\n\n-> YOu can pause the game in its middle by pressing any key. To continue the paused game press any other key once again\n\n-> If you want to exit press esc. \n");          printf("\n\nPress any key to play game...");          if(getch()==27)          exit(0);      }      void record(){          char plname[20],nplname[20],cha,c;          int i,j,px;          FILE *info;          info=fopen("record.txt","a+");          getch();          system("cls");          printf("Enter your name\n");          scanf("%[^\n]",plname);          //************************          for(j=0;plname[j]!='\0';j++){ //to convert the first letter after space to capital          nplname[0]=toupper(plname[0]);          if(plname[j-1]==' '){          nplname[j]=toupper(plname[j]);          nplname[j-1]=plname[j-1];}          else nplname[j]=plname[j];          }          nplname[j]='\0';          //*****************************          //sdfprintf(info,"\t\t\tPlayers List\n");          fprintf(info,"Player Name :%s\n",nplname);           //for date and time        time_t mytime;         mytime = time(NULL);         fprintf(info,"Played Date:%s",ctime(&mytime));            //**************************            fprintf(info,"Score:%d\n",px=Scoreonly());//call score to display score            //fprintf(info,"\nLevel:%d\n",10);//call level to display level          for(i=0;i<=50;i++)          fprintf(info,"%c",'_');          fprintf(info,"\n");          fclose(info);          printf("wanna see past records press 'y'\n");          cha=getch();          system("cls");          if(cha=='y'){          info=fopen("record.txt","r");          do{              putchar(c=getc(info));              }while(c!=EOF);}            fclose(info);      }      int Score()      {          int score;          GotoXY(20,8);          score=length-5;          printf("SCORE : %d",(length-5));          score=length-5;          GotoXY(50,8);          printf("Life : %d",life);          return score;      }      int Scoreonly()      {      int score=Score();      system("cls");      return score;      }      void Up()      {          int i;          for(i=0;i<=(bend[bend_no].y-head.y)&&len<length;i++)          {              GotoXY(head.x,head.y+i);              {                  if(len==0)                      printf("^");                  else                      printf("*");              }              body[len].x=head.x;              body[len].y=head.y+i;              len++;          }          Bend();          if(!kbhit())              head.y--;        }