Ads

snake game in c++ graphics programing

 


Download source code

/***********  WELCOME ALL OF YOU ON ROHIT TECH STUDY CHANNEL **************/

/************        C++ PROGRAME TO CREATE SNAKE GAME      ***************/


#include<iostream.h>

#include<conio.h>

#include<graphics.h>

#include<dos.h>

#include<stdlib.h>

#include<stdio.h>

#include<time.h>

#include<string.h>

class Snake

{

 int p1,p2,v1,v2,v3,e1,e2,prev,now,n,colr,dsp,cnt,dly,m;

 int stp,egGen;

 int xr,yr;

 void caught();

 public:

  long scr;

 int strtX,strtY,endX,endY;

 int pos[100][2];

 void show();

 void init();

 void egg();

 void transpose();

 void gnrtCond();

 void gnrtUnCond();

 void check();

 void checkEgg();

 void move();

 void chngDir();

 void sndEt();

 void sndCgt();

 int test();

 void score();

 Snake();

 Snake(Snake*);

 ~Snake();

 };

Snake::Snake()

 {

 }

Snake::~Snake()

{


}

void Snake::checkEgg()

{

 if((e1 == p1) && (e2 == p2))

 {sndEt();

  egg();

  dly--;

  score();

  n++;

  }

}

void Snake::sndEt()

{nosound();

 sound(2500);

 delay(2);

 nosound();

}

void Snake::sndCgt()

{nosound();

 for(int x=1000;x>0;x--)

 {sound(x);

  delay(1);

  }

 nosound();

}

void Snake::score()

{ char *p;


  ltoa(scr,p,10);

  settextstyle(8,0,1);

  setcolor(0);

  outtextxy(585,40,p);

  if(egGen != 1){

  scr = scr + dly / 10;

  }

  ltoa(scr,p,10);

  setcolor(10);

  outtextxy(585,40,p);


}

void Snake::gnrtCond()

{if(n < 367)

 {if(now == 8 && (prev != 8 && prev != 2))

  {pos[0][0] = p1;

   pos[0][1] = p2 - dsp;

   prev = now;

   }

  if(now == 4 && (prev != 4 && prev != 1))

  {pos[0][0] = p1 + dsp;

   pos[0][1] = p2;

   prev = now;

   }

  if(now == 2 && (prev != 8 && prev != 2))

  {pos[0][0] = p1;

   pos[0][1] = p2 + dsp;

   prev = now;

   }

  if(now == 1 && (prev != 1 && prev != 4))

  {pos[0][0] = p1 - dsp;

   pos[0][1] = p2;

   prev = now;

   }

}

}

void Snake::gnrtUnCond()

{

  if( prev == 8 )

  {pos[0][0] = p1;

   pos[0][1] = p2 - dsp;

   }

 if( prev == 4 )

  {pos[0][0] = p1 + dsp;

   pos[0][1] = p2;

   }

 if( prev == 2 )

  {pos[0][0] = p1;

   pos[0][1] = p2 + dsp;

   }

 if( prev == 1 )

  {pos[0][0] = p1 - dsp;

   pos[0][1] = p2;

   }

 p1 = pos[0][0];

 p2 = pos[0][1];

}

void Snake::check()

{

 if(p1 > endX)

  {p1 = strtX;}

 else if(p1 < strtX)

  {p1 = endX;}


 if(p2 > endY)

  {p2 = strtY;}

 else if(p2 < strtY)

  {p2 = endY;}


 pos[0][0] = p1;

 pos[0][1] = p2;

for(int i = 1;i < n;i++)

  { if(p1 == pos[i][0] && p2 == pos[i][1])

  {caught();

   break;

  }

 }

}

void Snake::show()

{

  int x = getcolor();

  if(egGen != 1)

  {

  setcolor(getbkcolor());

  setfillstyle(1,getbkcolor());

  fillellipse(v1,v2,yr,yr);

   }

  else

   egGen = 0;

  if(egGen == 2)

   egGen--;

  setcolor(colr);

  setfillstyle(1,9);

  if(now == 8 || now == 2)

   fillellipse(pos[0][0],pos[0][1],xr,yr);

  else if(now == 4 || now == 1)

   fillellipse(pos[0][0],pos[0][1],yr,xr);

  setcolor(x);

}

void Snake::transpose()

{ int i,j,x,y;

   p1 = pos[0][0];

   p2 = pos[0][1];

   if(!egGen){

   v1 = pos[n-1][0];

   v2 = pos[n-1][1];

   }

   else

    egGen = 0;

   for(i = n-1;i >= 1;i--)

   {pos[i][0] = pos[i-1][0];

    pos[i][1] = pos[i-1][1];

   }

}

void Snake::move()

{ int st = 0;

  do{

   if(!kbhit())

   {checkEgg();

    if(!st)

     show();

    else

     st = 0;

    delay(dly/4);

    transpose();

    delay(dly/4);

    gnrtUnCond();

    delay(dly/4);

    check();

   delay(dly/4);

    }

   else if(stp){

   chngDir();

   gnrtCond();

   check();

   show();

   st = 1;

   }

   }while(stp);

}

void Snake::init()

{time_t tm;

 srand(time(&tm));

 dsp = 20;

 n = 5;

 prev = 4;

 for(int i = 4;i >= 0;i--)

 {pos[i][0] = 201 + (n - i - 1) * dsp;

  pos[i][1] = 301;

  }

  strtX = 21;

  strtY = 21;

  endX = 481;

  endY = 361;

  colr = 14;

  now = prev;

  dsp = 20;

  stp = 111;

  cnt = -1;

  scr = 0;

  dly = 150;

   xr = 3;

   yr = 9;

  egg();

  egGen = 1;

  score();

  int x = getcolor();

  setlinestyle(0,1,3);

  setcolor(15);

  rectangle(strtX-15,strtY-15,endX+15,endY+15);

  rectangle(endX+25,strtY-15,getmaxx()-15,endY+15);

  rectangle(strtX-15,endY+25,getmaxx()-15,getmaxy()-5);

  line(endX+25,strtY+75,getmaxx()-15,strtY+75);

  line(endX+25,strtY+200,getmaxx()-15,strtY+200);

  line(endX+25,strtY+275,getmaxx()-15,strtY+275);

  setlinestyle(0,1,1);

  settextstyle(8,0,1);

  setcolor(11);

  outtextxy(514,40,"SCORE");

  setcolor(14);

  settextstyle(11,0,5);

  outtextxy(524,110," CONTROLS ");

  outtextxy(522,135,"p = PAUSE");

  outtextxy(522,155,"g = RESUME");

  outtextxy(522,175,"e = EXIT");

  setcolor(10);

  outtextxy(513,195,"   ROHIT  ");

  setcolor(10);

  outtextxy(512,205," TECH STUDY ");

  setcolor(CYAN);

  settextstyle(4,0,9);

  outtextxy(getmaxx()-500,getmaxy()-110,"SNAKE");

  settextstyle(8,0,1);

  setcolor(x);

}

void Snake::caught()

{

 stp = 0;

 sndCgt();

for(int i=0;i<=7;i++)

 {

 if(i%2)

  {

  setcolor(10);

   outtextxy(512,250,"GAME OVER");

   delay(900);

   }

  else

  {

  setcolor(0);

   outtextxy(512,250,"GAME OVER");

   delay(500);

  }

  }

sleep(1);

}

void Snake::chngDir()

{int clr;

 fillsettingstype *p;

 char x = getch();

 if(x == 72)

  now = 8;

 else if(x == 77)

  now = 4;

 else if(x == 80)

  now = 2;

 else if(x == 75)

  now = 1;

 else if(x == 'e')

  caught();

 else if(x == 'p')

 {

  int twnkl = 1;

  settextstyle(11,0,9);

  while(1)

  {if(kbhit())

   {int c = getch();

    if(c == 'g')

    {

    clr = getcolor();

     setcolor(0);

     rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);

     outtextxy(endX+60,endY-29,"PAUSE");

     break;

     }

    }

   else

   {if(twnkl%2)

    {

    clr = getcolor();

     setcolor(10);

     rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);

     outtextxy(endX+60,endY-29,"PAUSE");

     setcolor(clr);

      delay(1000);

     }

    else

    {

     clr = getcolor();

     setcolor(0);

     rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);

     outtextxy(endX+60,endY-29,"PAUSE");

     delay(1000);

    }

   }

   twnkl++;

  }

    settextstyle(8,0,1);

 }

}

Snake::Snake(Snake *p)

{

 *p=NULL;

}

void Snake::egg()

{ do

  {e1 = (rand() % 100) * dsp + strtX;

   e2 = (rand() % 100) * dsp + strtY;

   }while(test());

  int x = getcolor();

  setcolor(7);

  setfillstyle(1,random(15)+1);

  fillellipse(e1,e2,xr+2,xr+2);

  setcolor(x);

  egGen = 2;

}

int Snake::test()

{ for(int i=0;i<n;i++)

  {if(e1 == pos[i][0] && e2 == pos[i][1])

    break;

   if(v1 == e1 && v2 == e2)

    break;

   if((e1 >= endX+1) || (e2 >= endY+1))

    break;

   }

 if(i != n)

  return 1;

 else

  return 0;

}


void main()

{Snake snk;

 int gd=DETECT,gm,i,j,k,x,y;

 clrscr();

 initgraph(&gd,&gm,"c:\\tc\\bgi");

 snk.init();

 snk.move();


 closegraph();

 restorecrtmode();

 }

Post a Comment

0 Comments