October 21, 2011
0
CREDIT:ARUN
//80*48
#include<fstream.h>
#include<stdlib.h>
#include<process.h>
#include<stdio.h>
#include<time.h>
#include<dos.h>
#include<string.h>
#include<graphics.h>
#include<bios.h>
#include<conio.h>
#include<iomanip.h>

unsigned key;
int len=0,count=0,foodtype=0,d,m,food_flag=0,j=0,i=0,display_count=10,
hscore_pos=0,x_index=0,y_index=0,mx,my,maze=1,speed=100;
long score=0,ti_elap=0,ti_rem=15,tot_ti=15,ti_init;
char *main_menu[]={{"1. Play"},{"2. Options"},{"3. Instruction"},
                   {"4. Hi-Score"},{"5. Exit"}};
char *game_menu[]={{"1. Mazes"},{"2. Level"},{"3. Back to Main menu"}};
char *maze_menu[]={{"1. Open"},{"2. Box"},{"3. Twisted"},
                   {"4. Return to Main menu"}};
char *level_menu[]={{"1. Beginner"},{"2. Intermediate"},{"3. Expert"},
                    {"4. Return to Main menu"}};
char *m_m[]={"P","O","I","H","E"};
char *g_m[]={"M","L","B"};
char *mm[]={"O","B","T","R"};
char *lm[]={"B","I","E","R"};

int maze3_x[][14]={{2,3,4,5,6,7,8,9,10,11,12,13,14,15},
                   {25},
                   {30},
                   {37,38,39,40,41,42,43,44,45,46,47,48,49,50}};
int maze3_y[][14]={{30},
                   {2,3,4,5,6,7,8,9,10,11,12,13,14,15},
                   {27,28,29,30,31,32,33,34,35,36,37,38,39,40},
                   {20}};


  void showfood();
  void end();
  void show_game_menu();
  void show_main_menu();

enum{UP=1,RIGHT=2,DOWN=3,LEFT=4}DIRECTION,Pre_Dir;

struct
{
 unsigned x:7 ;
 unsigned y:7 ;
}coordinate[1000],tail,head,food;

inline void initialise()
{
  d=DETECT;
  initgraph(&d,&m,"e:\tc\bgi");
  cleardevice();
  mx=getmaxx();
  my=getmaxy();
}

void RESET()
{
  len=count=foodtype=food_flag=i=j=hscore_pos=x_index=y_index=0;
  display_count=10,
  speed=100;
  score=ti_elap=0;ti_rem=tot_ti=15;
  head.x=head.y=tail.x=tail.y=food.x=food.y=0;
  for(i=0;i<1000;i++)
   coordinate[i].x=coordinate[i].y=0;
}

 void showoff_food()
  {
   gotoxy(food.x,food.y);
   cout<<" ";
   food.x=food.y=0;
   showfood();
  }


int showfoodtimer(int fo_fl)
{
 if(fo_fl==1)
 {
  if(ti_rem<=0)
   {
     showoff_food();
     ti_rem=15;
     food_flag=0;
   }
  else
  {
   ti_elap=((biostime(0,0L)-ti_init)/(speed/16));
   ti_rem=(tot_ti-(ti_elap));
   gotoxy(7,46);
   if(ti_rem<10)
    cout<<"0"<<ti_rem;
   else
    cout<<ti_rem;
  }
 }
 else
  {
   gotoxy(7,46);
   cout<<"  ";
  }
  return 0;
}

void showfood()
{
 int flag=0;
 re:
 food.x=random(49)+2;
 food.y=random(39)+2;
 for(i=0;i<len;i++)
 {
  if(food.x==coordinate[i].x && food.y==coordinate[i].y)
    goto re;
 }
 if(maze==3)
  {
   for(i=0;i<4;i++)
   {
    for(j=0;j<14;j++)
    {
     if(food.x==maze3_x[i][j])
      flag=1;
    }
    for(j=0;j<14;j++)
    {
     if(food.y==maze3_y[i][j] && flag==1)
        goto re;
    }
   }
  }
 gotoxy(food.x,food.y);
 textcolor(RED);
 cprintf("@");
}

void showbigfood()
{
 re1:
 food.x=random(49)+2;
 food.y=random(39)+2;
 for(int j=0;j<len;j++)
 {
  if(food.x==coordinate[j].x && food.y==coordinate[j].y)
   goto re1;
 }
  textcolor(YELLOW);
  gotoxy(food.x,food.y);
  cprintf("é");
}

void exit()
{
     delay(50);
     textmode(4);
     gotoxy(10,8);
     cout<<"Exiting the program";
     delay(2000);
     exit(0);
}

void border()
{
  setcolor(GREEN);
  rectangle(2,2,mx-2,my-2);
  setcolor(RED);
  rectangle(4,4,mx-4,my-4);
  setcolor(GREEN);
  rectangle(6,6,mx-6,my-6);
  settextstyle(4,0,5);
  outtextxy(180,40,"SNAKEMAN");
  setcolor(YELLOW);
  line(165,88,440,88);
  setcolor(RED);
  line(165,90,440,90);
}


void intro_graphics()
{
  clrscr();
  initialise();

  border();
  settextstyle(3,0,3);
  setcolor(RED);
  outtextxy(130,200,"Programmed By:");
  settextstyle(1,0,3);
  setcolor(WHITE);
  outtextxy(330,200,"Manish Jain");
  outtextxy(150,235,"mkj_manishjain@yahoo.co.in");
  outtextxy(150,275,"         +91 9896455735");
  settextstyle(1,0,4);
  setcolor(RED);
  outtextxy(120,360,"Press any key to play");

  getch();
}

void showtime()
{
  char datebuf[9];
  char timebuf[9];

  _strdate(datebuf);
  _strtime(timebuf);
  gotoxy(30,45);
  cout<<" DATE       TIME";
  gotoxy(30,46);
  cout<<datebuf<<" "<<timebuf;
}

inline void showscore()
{
  gotoxy(15,45);
  cout<<"SCORE";
  gotoxy(16,46);
  cout<<score;
}

char *return_maze()
{
 switch(maze)
 {
  case 1: return ("OPEN");
  case 2: return ("BOX");
  case 3: return ("TWISTED");
 }
 return "OPEN";
}

void init()
{
  DIRECTION=Pre_Dir=RIGHT;

  gotoxy(60,30);
  cout<<"M A Z E";
  gotoxy(60,32);
  cout<<return_maze();
  gotoxy(5,45);
  cout<<"Timer";

  randomize();
  _setcursortype(_NOCURSOR);
  showtime();
  showscore();

  tail.x=10;
  tail.y=10;
  for(int i=10;i<15;i++)
  {
   coordinate[len].x=i;
   coordinate[len].y=10;
   gotoxy(coordinate[len].x,coordinate[len].y);
   cout<<char(223);
   len++;
  }
  head.x=14;
  head.y=10;

  textcolor(BLUE);
  for(i=1;i<=50;i++)
   {
      j=1;
      gotoxy(i,j);
       cprintf(" ");
      gotoxy(i,j+40);
       cprintf(" ");
   }
  for(i=1;i<=41;i++)
   {
      j=1;
      gotoxy(j,i);
       cprintf(" ");
      gotoxy(j+50,i);
       cprintf(" ");
   }

  showfood();
}

void show_snake(int DIRECTION)
{
   gotoxy(head.x,head.y);
   textcolor(GREEN);

   switch(DIRECTION)
   {
    case UP   :
        if(Pre_Dir==LEFT)
          cprintf("Ý");
        else
          cprintf("Þ");
        break;
    case RIGHT:
        if(Pre_Dir==DOWN)
          cprintf("Ü");
        else
          cprintf("ß");
        break;
    case DOWN :
        if(Pre_Dir==RIGHT)
          cprintf("Þ");
        else
          cprintf("Ý");
        break;
    case LEFT :
        if(Pre_Dir==UP)
          cprintf("ß");
        else
          cprintf("Ü");
        break;
   }
}

inline void showoff()
{
 gotoxy(tail.x,tail.y);
 cout<<" ";
}

inline void SOUND()
{
 sound(1500);
 delay(55);
 nosound();
}

void gameover()
{
 sound(1220);
 delay(500);
 nosound();

 initialise();
 border();
 settextstyle(1,0,5);
 setcolor(RED);
 outtextxy(130,180,"GAME  OVER");

 settextstyle(1,0,5);
 setcolor(BLUE);
 outtextxy(140,250,"SCORE");

 gotoxy(48,16);
 char *s;
 ltoa(score,s,10);
 outtextxy(325,250,s);

 settextstyle(4,0,5);
 setcolor(WHITE);
 outtextxy(65,350,"Wish to continue:(Y/N):");
 char ch=getche();

 if(ch=='y'||ch=='Y')
 {
  outtextxy(510,350,"Y");
  getch();
  RESET();
  initialise();
  show_main_menu();
 }
 else if(ch=='n'||ch=='N')
  {
   outtextxy(510,350,"N");
   free(maze_menu);
   free(main_menu);
   free(level_menu);
   free(game_menu);
   free(m_m);
   free(mm);
   free(lm);
   free(g_m);
   exit();
  }
}


void loadmaze()
{
 if(maze==3)
 {
  textcolor(WHITE);
  for(i=1;i<15;i++)
  {
   gotoxy(i+1,30);
   cprintf("²");
   gotoxy(25,i+1);
   cprintf("²");
   gotoxy(36+i,20);
   cprintf("²");
   gotoxy(30,26+i);
   cprintf("²");
  }
 }
}

void game()
{
  init();
  loadmaze();
  sleep(2);
  while(1)
  {
   if(bioskey(1))
   {
     key=bioskey(0);
     int s=key>>8;
     if(s==1)
      exit();
     else
     if(s==72)      //If UP arrow key is pressed
     {
      if(DIRECTION==4 || DIRECTION==2)
       {
         Pre_Dir=DIRECTION;
         DIRECTION=UP;
       }
     }
     else if(s==80)  //If DOWN arrow key is pressed
     {
      if(DIRECTION==4 || DIRECTION==2)
       {
         Pre_Dir=DIRECTION;
         DIRECTION=DOWN;
       }
     }
     else if(s==77)   ////If RIGHT arrow key is pressed
     {
      if(DIRECTION==1 || DIRECTION==3)
       {
         Pre_Dir=DIRECTION;
         DIRECTION=RIGHT;
       }
     }
     else if(s==75)   ////If LEFT arrow key is pressed
     {
      if(DIRECTION==1 || DIRECTION==3)
       {
         Pre_Dir=DIRECTION;
         DIRECTION=LEFT;
       }
     }
   }

   if(DIRECTION==2)         //Right Key
     head.x++;
   else if(DIRECTION==1)    //Up Key
     head.y--;
   else if(DIRECTION==4)    //Left Key
     head.x--;
   else if(DIRECTION==3)    //Down Key
     head.y++;

   if(maze==1)              //OPEN maze
   {
    if(head.x>50)
       head.x=2;
    else if(head.x<=1)
       head.x=50;
    if(tail.x>50)
       tail.x=2;
    else if(tail.x<=1)
       tail.x=50;
    if(head.y>40)
       head.y=2;
    else if(head.y<=1)
       head.y=40;
    if(tail.y>40)
       tail.y=2;
    else if(tail.y<=1)
       tail.y=40;
   }

   else if(maze==2)         //BOX Maze
   {
     if(head.x>50 ||head.y>40 ||head.x<2 ||head.y<2)
      gameover();
   }
   else if(maze==3)        //TWISTED or SPIRAL Maze
   {
    for(i=2;i<16;i++)
    {
     if((head.x==25 && head.y==i)||(head.x==i && head.y==30)
        ||(head.x==35+i && head.y==20)||(head.x==30 && head.y==25+i))
      {
            gameover();
      }
    }
   if(head.x>50)
       head.x=2;
   else if(head.x<=1)
       head.x=50;
   if(tail.x>50)
       tail.x=2;
   else if(tail.x<=1)
       tail.x=50;
   if(head.y>40)
       head.y=2;
   else if(head.y<=1)
       head.y=40;
   if(tail.y>40)
       tail.y=2;
   else if(tail.y<=1)
       tail.y=40;
 }


   for(int i=0;i<len;i++)
     {
      if(head.x==coordinate[i].x && head.y==coordinate[i].y)
        {
          gameover();
        }
     }

    show_snake(DIRECTION);

    if(head.x==food.x && head.y==food.y)
     {
         count++;
         if(ti_rem>5)
           score+=(foodtype*8)+2+(foodtype*((ti_rem*3)/2));
         else
           score+=(foodtype*8)+2;

      ti_rem=15;
      SOUND();
      food.x=food.y=0;

      if(count==5)
       {
         showbigfood();
         food_flag=1;
         ti_init=biostime(0,0);
         showfoodtimer(1);
         foodtype=1;
         count=0;
       }
      else
       {
         showfood();
         food_flag=0;
         foodtype=0;
       }
      len++;
     }
    else
     {
      tail.x=coordinate[0].x;
      tail.y=coordinate[0].y;

      showoff();

        for(int k=0;k<len-1;k++)
         {
            coordinate[k].x=coordinate[k+1].x;
            coordinate[k].y=coordinate[k+1].y;
         }
     }

    coordinate[len-1].x=head.x;
    coordinate[len-1].y=head.y;

    delay(speed);
    showtime();
    showscore();
    showfoodtimer(food_flag);

    gotoxy(64,14);
    cout<<"X-Cor Y-Cor";

    gotoxy(65,15);
    cout<<head.x<<"    "<<head.y;
  }
}

void get_level_choice()
{
 get:
 int cho=bioskey(0);
 cho=cho>>8;
 switch(cho)
 {
  case 2:
  case 48:
  case 28:
  case 79: speed=125;
           show_main_menu();
           break;
  case 3:
  case 23:
  case 80: speed=90;
           show_main_menu();
           break;
  case 4:
  case 18:
  case 81: speed=55;
           show_main_menu();
           break;
  case 5:
  case 19:
  case 75: show_game_menu();
           break;
  default: goto get;
 }
}

void get_maze_choice()
{
 get:
 int cho=bioskey(0);
 cho=cho>>8;
 switch(cho)
 {
  case 2:
  case 28:
  case 24:
  case 79: maze=1;
           show_main_menu();
           break;
  case 3:
  case 48:
  case 80: maze=2;
           show_main_menu();
           break;
  case 4:
  case 20:
  case 81: maze=3;
           show_main_menu();
           break;
  case 5:
  case 19:
  case 75:         show_game_menu();
           break;
  default: goto get;
 }
}

void getlevel()
{
  cleardevice();
  border();

  settextstyle(1,0,5);
  setcolor(RED);
  outtextxy(50,140,"L E V E L");

  settextstyle(3,0,5);
  for(i=0;i<4;i++)
  {
   setcolor(WHITE);
   outtextxy(67,190+(45*i),level_menu[i]);
   setcolor(RED);
   outtextxy(130,190+(45*i),lm[i]);
  }
  get_level_choice();
}


void getmaze()
{
  cleardevice();
  border();

  settextstyle(1,0,5);
  setcolor(RED);
  outtextxy(50,140,"M A Z E S");
  settextstyle(3,0,5);

  for(i=0;i<4;i++)
  {
   setcolor(WHITE);
   outtextxy(67,190+(45*i),maze_menu[i]);
   setcolor(RED);
   outtextxy(130,190+(45*i),mm[i]);
  }
  get_maze_choice();
}

void get_gm_choice()
{
 get:
 int cho=bioskey(0);
 cho=cho>>8;
 switch(cho)
 {
  case 2:
  case 50:
  case 28:
  case 79: getmaze();
           break;
  case 3:
  case 38:
  case 80: getlevel();
           break;
  case 4:
  case 48:
  case 81: show_main_menu();
           break;
  default: goto get;
 }
}

void show_game_menu()
 {
  cleardevice();
  border();
  settextstyle(1,0,5);
  setcolor(RED);
  outtextxy(50,140,"G A M E  M E N U");

  settextstyle(3,0,5);

  for(i=0;i<3;i++)
  {
   setcolor(WHITE);
   outtextxy(67,190+(45*i),game_menu[i]);
   setcolor(RED);
   outtextxy(130,190+(45*i),g_m[i]);
  }
   get_gm_choice();
 }

void play()
{
 cleardevice();
 restorecrtmode();
 textmode(64);
 game();
}

void options()
{
 show_game_menu();
}

void instruction()
{
 cleardevice();
 border();
 setcolor(RED);
 settextstyle(1,0,5);
 outtextxy(50,140,"I N S T R U C T I O N S");
 settextstyle(3,0,3);
 setcolor(WHITE);
 outtextxy(60,190,"1. Move the snake using Arrow Keys -> ");
 outtextxy(60,230,"   UP, DOWN, LEFT, RIGHT");
 outtextxy(60,270,"2. Eat food (@,é) and make snake grow longer.");
 outtextxy(60,300,"3. You will get 2 points for (@) and");
 outtextxy(60,330,"   more points for Bonus food(é)");
 outtextxy(60,365,"4. Don't let it hit the walls or its tail");
 settextstyle(4,0,4);
 setcolor(RED);
 outtextxy(140,425,"Press any key to Continue");
 getch();
 show_main_menu();
}

void hiscore()
{
 cleardevice();
 border();
 setcolor(RED);
 settextstyle(1,0,5);
 outtextxy(50,140,"    H I   S C O R E");
 settextstyle(3,0,3);
 setcolor(WHITE);
 outtextxy(60,220,"Sorry! This feature is not available in this version
");
 outtextxy(60,270,"For further details, Contact  :  ");
 setcolor(GREEN);
 outtextxy(60,310,"        mkj_manishjain@yahoo.co.in");
 outtextxy(60,345,"        Mobile no.: +91 9896455735 ");
 settextstyle(4,0,4);
 setcolor(RED);
 outtextxy(140,425,"Press any key to Continue");
 getch();
 show_main_menu();
}


void get_mm_choice()
{
 get:
 int cho=bioskey(0);
 cho=cho>>8;
 switch(cho)
 {
  case 2:
  case 25:
  case 28:
  case 79: play();
       break;

  case 3:
  case 24:
  case 80: options();
       break;

  case 4:
  case 23:
  case 81: instruction();
       break;

  case 5:
  case 35:
  case 75: hiscore();
       break;

  case 6:
  case 18:
  case 76: exit();
       break;
  default: goto get;
 }
}

void show_main_menu()
{
 cleardevice();
 border();
 settextstyle(1,0,5);
 setcolor(GREEN);
 outtextxy(60,130,"M A I N  M E N U");

 settextstyle(3,0,5);

 for(i=0;i<5;i++)
 {
 setcolor(WHITE);
 outtextxy(67,180+(35*i),main_menu[i]);
 setcolor(RED);
 outtextxy(130,180+(35*i),m_m[i]);
 }

 get_mm_choice();
}

void end()
{
  initialise();

  for(j=0;j<=2;j++)
  {
   setcolor(RED+j);
   circle(mx/2,my/2,150+j*2);
  }
  settextstyle(4,0,5);
  outtextxy(mx/2-65,my/2-20,"The End");
  getch();
  closegraph();
  restorecrtmode();
  exit(0);
}

//MAIN FUNCTION
void main()
{
  intro_graphics();
  show_main_menu();
}


USEFUL LINKS 
1.www.tricksnew.blogspot.com 
2.www.freeminiproject.blogspot.com 
3.www.freeplacementpaper.blogspot.com 
4.www.annaunivquestionbanks.blogspot.com

Labels

INTERNET (141) HACKING TRICKS AND TIPS (129) SYSTEM TRICKS (104) OTHERS (93) HOW TO (88) GPRS TRICKS (84) AIRTEL TRICKS (68) FREE GPRS (61) 4SHARED TRICKS (60) MOBILE TRICKS (56) HOT TRICKS (52) 3G TRICKS (50) TRICKSNEW (50) WINDOWS TRICKS (45) MOBILE HACKS (44) SOFTWARE (41) HACKING TRICKS (40) CALL TRICKS (38) MINI PROJECTS (35) FUN TRICKS (33) IEEE PROJECTS (31) FACEBOOK TRICKS (30) AIRCEL TRICKS (29) Mobile Tips (28) DOWNLOAD (27) COMPUTER TRICKS (26) AIRTEL 3G HACK(100%) WORKING (25) ALL NETWORK TRICKS (25) DOCOMO TRICKS (25) FREE SMS HACKS (23) PASSWORD HAKING (23) LEARN-HACKING TRICKS (22) OTHER PROJECTS (22) FREE CALL TRICKS (20) NOTEPAD (20) gmail (19) HACKERS (18) RELIANCE TRICKS (18) ANTI-VIRUS (16) TATA DOCOMO TRICKS (16) VIRUS (16) AIRCEL 3G HACK(100%) WORKING (15) IDEA TRICKS (15) BROWSING TRICKS (14) SMS TRICKS (14) account (14) FREE SMS WEBSITES (13) VODAFONE TRICKS (13) FREE FAKE MAIL (12) MOBILE SOFTWARE (12) secret code (12) E-MAIL (11) FREE SMS CRICKET ALERT (11) OPERA HACK (11) ACKING TRICKS (10) CRACKING TRICKS (10) INDIA MATCH LIVE STREAMING ONLINE FREE (10) BSNL TRICKS (9) E-MAIL BOMBERS (9) FREE FAKE CALLS (9) SERIALS (9) SMS BOMBERS (9) premium account (9) ALL RESULTS (8) CHEAT CODES (8) GAMES DESIGN PROJECT (8) HOTFILE TRICKS (8) MINI PROJECTS-CSE (8) MINI PROJECTS-MCA (8) MOBILE APPLICATIONS (8) MOBILE TV (8) SEND SMS NOW (8) SOURCE CODES (8) portable application software (8) CHINA MOBILE (7) FREE MOBILE TV (7) PAYPAL ACCOUNT HACK (7) TUTORIAL (7) TV ONLINE (7) BALANCE TRICKS (6) CHATTING TIPS (6) Free SMS Websites (6) GOOGLE+ (6) INTERVIEW (6) PLACEMENT TIPS (6) UNINOR TRICKS (6) WATCH TV FREE (6) YOU TUBE TRICKS (6) avoid hacking (6) MEMORY CARD (5) PAPER PRESENTATION (5) RESULTS (5) VOIP CALLS (5) command prompt (5) BLUETOOTH TIPS (4) EXAM DATES (4) LEARN-HACKING (4) MOST NEEDED TRICKS (4) SOURCECODE (4) TORRENTS (4) WEB PROJECTS (4) Amazon (3) E-BOOKS (3) FIREFOX (3) FREE CRICKET MATCH 2011 LIVE STREAMING (3) JOBS (3) MODEM (3) RECHARGE TRICKS (3) VIDEOCON TRICKS (3) VIRGIN TRICKS (3) ANDROID (2) BOMBERS (2) C#.NET (2) CRICKET LIVE STREAMING (2) FREE MOVIE DOWNLOAD (2) HR ROUND (2) IPHONE TRICKS (2) IPL MATCH FIXING (2) Inspirational Success Stories - Zero to Hero (2) JAVA CODE (2) MTNL (2) MTS TRICKS (2) Mobile Number Portability (2) ONLINE-FREE SHOPPING (2) PROJECTS (2) TATA INDICOM (2) YAHOO (2) Cashback (1) DCE (1) DOWNLOAD MENU (1) DTH TRICKS (1) FREE SUBSCRIPTION ALERTS (1) GRAMMAR (1) IMAGE TRICKS (1) LINUX (1) MATLAB PROJECTS (1) MICROCONTROLLER PROJECTS (1) MOTOROLA (1) Most Common Interview Mistakes to Avoid (1) NANOPARTICLES IN THE DRUG DELIVERY (1) ONLINE EARNING (1) PEN DRIVE (1) PHISHERS (1) RAPIDSHARE TRICKS (1) Swiggy (1) TECHNICAL JOKES (1) TOLL FREE CONTACT NUMBER LIST (1) UBUNTU (1) WHATSAPP HACK (1) Wi-Fi (1) Zomato (1)