snake game in c++

 Snake game in c++.

  • program:

#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 strX,strY,endXendY;

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][1]=p2;

pos[0][0]=p1+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]=p+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=strX;}

else if(p1<strX)

{p1=endX;}

if(p2>endY)

{p2=strY;}

else if(p2<strY)

{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);

setcolor(x);

};  

 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”);  
  outtextxy(513,195,“ARROWS”);  
  outtextxy(512,205,”    -MOVEMENT”);  
  setcolor(14);  
  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 y = getcolor();  
  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:\\Turboc3\\bgi”);  
 snk.init();  
 snk.move();  
 closegraph();  
 restorecrtmode();  
 }

  • output:



Leave a comment

Design a site like this with WordPress.com
Get started