Ads

Snake game in C++ Programming


Download source code




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

//__________C++ GRAPHICS PROGRAM TO MAKE RATTLE SNAKE GAME_________________//


#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <iostream.h>

#include <fstream.h>

#include <string.h>



void main(void)

{

   int gdriver = DETECT, gmode, errorcode;

   void

*body,*food,*tail1,*tail2,*tail3,*tail4,*head1,*head2,*head3,*head4;

   int x, y,X[5000],Y[5000],i=3,

maxx,maxy,speed=100,bo=10,t[10],score=0,hscore=20;

   unsigned int size;

   char a='6',b,scor[4],hs[4];

   int k=2,l,r1,r2,f=0,z=100,first=0,second=1;;

   r1=300;

   r2=350;


   ifstream infile("c:\tc\bin\rattle.txt");

   infile.getline(hs,4);

   infile.close();

   hscore = atoi(hs);


   /* initialize graphics and local variables */

   initgraph(&gdriver, &gmode, "c:\\tc\\bgi");


   /* read result of initialization */

   errorcode = graphresult();


   if (errorcode != grOk)

   {

      printf("Graphics error: %s", grapherrormsg(errorcode));

      printf("Press any key to halt:");

      getch();

      exit(1);

   }

   maxx = getmaxx();

   maxy = getmaxy();

   y = 160;

   x = 80;

   for(int j=0; j<=3; j++)

   {

X[i-j]=x-bo*(j+1);

Y[i-j]=y;


   }


   //body


   setfillstyle(1,2);

   bar(10,10,20,20);

   setcolor(0);

   setlinestyle(0,1,3);

   line(9,9,21,21);

   line(9,21,21,9);

   size = imagesize(10,10,20,20);

   body = malloc(size);

   getimage(10,10,20,20,body);

   cleardevice();


   setcolor(0);

   //tail1-right

   t[0]=20; t[1]=10;

   t[2]=10; t[3]=10;

   t[4]=20; t[5]=15;

   t[6]=10; t[7]=20;

   t[8]=20; t[9]=21;

   fillpoly(5, t);

   size = imagesize(10,10,20,21);

   tail1 = malloc(size);

   getimage(10,10,20,21,tail1);

   cleardevice();


   //tail2-left

   t[0]=10; t[1]=10;

   t[2]=20; t[3]=10;

   t[4]=10; t[5]=15;

   t[6]=20; t[7]=20;

   t[8]=10; t[9]=21;

   fillpoly(5, t);

   size = imagesize(10,10,20,21);

   tail2 = malloc(size);

   getimage(10,10,20,21,tail2);

   cleardevice();


   //tail3-up

   t[0]=10; t[1]=20;

   t[2]=10; t[3]=10;

   t[4]=15; t[5]=20;

   t[6]=20; t[7]=10;

   t[8]=20; t[9]=21;

   fillpoly(5, t);

   size = imagesize(10,10,20,21);

   tail3 = malloc(size);

   getimage(10,10,20,21,tail3);

   cleardevice();


   //tail4-down

   t[0]=10; t[1]=10;

   t[2]=10; t[3]=21;

   t[4]=15; t[5]=10;

   t[6]=20; t[7]=21;

   t[8]=20; t[9]=10;

   fillpoly(5, t);

   size = imagesize(10,10,20,21);

   tail4 = malloc(size);

   getimage(10,10,20,21,tail4);

   cleardevice();


   //head1-right

   setlinestyle(1,1,1);

   setcolor(2);

   fillellipse(10,10,10,5);

   setcolor(4);

   //eyes

   fillellipse(15,7,1,1);

   fillellipse(15,13,1,1);

   size = imagesize(10,5,20,15);

   head1 = malloc(size);

   getimage(10,5,20,15,head1);


   //head2-left

   //eyes

   fillellipse(5,7,1,1);

   fillellipse(5,13,1,1);

   size = imagesize(0,5,10,15);

   head2 = malloc(size);

   getimage(0,5,10,15,head2);

   cleardevice();


   //head3-up

   //eyes

   setcolor(2);

   fillellipse(12,12,5,10);

   setcolor(4);

   fillellipse(9,6,1,1);

   fillellipse(15,6,1,1);

   size = imagesize(7,2,18,12);

   head3 = malloc(size);

   getimage(7,2,18,12,head3);


   //head4-down

   //eyes

   fillellipse(9,17,1,1);

   fillellipse(15,17,1,1);

   size = imagesize(7,12,18,22);

   head4 = malloc(size);

   getimage(7,12,18,22,head4);

   cleardevice();


   //food

   setcolor(15);

   setfillstyle(1,15);

   fillellipse(10,10,3,5);

   size = imagesize(5,3,15,17);

   food = malloc(size);

   getimage(5,3,15,17,food);

   cleardevice();


    /* repeat until a key is pressed */

   maxx=getmaxx();

   maxy=getmaxy();

   setlinestyle(0,1,3);

   setcolor(9);

   rectangle(0,0,maxx,maxy);

   setlinestyle(0,1,2);

   line(maxx-150,0,maxx-150,maxy);

   setcolor(8);

   setfillstyle(1,8);

   bar(maxx-147,3,maxx-3,63);

   setcolor(12);

   int maze=1;

   if(maze==1)

   {

   setfillstyle(1,6);

   bar(4,4,maxx-154,14);

   bar(4,4,14,maxy-4);

   bar(4,maxy-4,maxx-154,maxy-14);

   bar(maxx-154-10,4,maxx-154,maxy-4);

   }


   settextstyle(0,0,1);

   delay(300);

   outtextxy(maxx-125,45,"RATTLE SNAKE");

    outtextxy(maxx-115,10,"MODIFY BY");

   outtextxy(maxx-135,30,"ROHIT TECH STUDY");

   delay(300);

   setcolor(11);

   setlinestyle(0,1,2);

   rectangle(maxx-145,65,maxx-5,205);

   outtextxy(maxx-128,70,"INSTRUCTIONS");

   delay(200);

   setcolor(6);

   outtextxy(maxx-140,90,"Commands      Key");

   delay(300);

   setcolor(8);

   outtextxy(maxx-140,110," Move Up      8");

   delay(50);

   outtextxy(maxx-140,130," Move Down    5");

    delay(50);

   outtextxy(maxx-140,150," Move Right   6");

    delay(50);

   outtextxy(maxx-140,170," Move Left    4");

    delay(50);

   outtextxy(maxx-140,190," Exit         0");

   delay(200);

   setcolor(12);

   setlinestyle(0,1,2);

   rectangle(maxx-145,210,maxx-5,350);

   setcolor(1);

   outtextxy(maxx-130,220,"Player's Name");

   setcolor(15);

   outtextxy(maxx-100,230,"ROHIT");

   setcolor(4);

   delay(200);

   itoa(score,scor,10);

   outtextxy(maxx-140,250,"Score");

   outtextxy(maxx-50,250,scor);

   delay(200);

   setcolor(10);

   outtextxy(maxx-140,280,"Level");

   delay(200);

   setcolor(13);

   outtextxy(maxx-140,310,"Maze        1");

   delay(200);

   setcolor(14);

   outtextxy(maxx-140,340,"High Score  ");

   outtextxy(maxx-50,340,hs);


   for(j=0; j<=1000; j++)

   {

putpixel(random(maxx-150),random(maxy),6);

delay(1);

   }


   while (a!='0')

   {


       // plot new image

      if(a=='6')

    putimage(x, y, head1, XOR_PUT);

      if(a=='4')

    putimage(x, y, head2, XOR_PUT);

      if(a=='8')

    putimage(x, y, head3, XOR_PUT);

      if(a=='5')

    putimage(x, y, head4, XOR_PUT);


      for(j=0; j<k; j++)

      {

   putimage(X[i-j], Y[i-j], body, XOR_PUT);

      }


      if((X[i-j-1]-X[i-j])<0  && (Y[i-j-1]-Y[i-j])==0)

    putimage(X[i-j], Y[i-j], tail1, XOR_PUT);


      if((X[i-j-1]-X[i-j])>0  && (Y[i-j-1]-Y[i-j])==0)

    putimage(X[i-j], Y[i-j], tail2, XOR_PUT);


      if((X[i-j-1]-X[i-j])==0  && (Y[i-j-1]-Y[i-j])<0)

    putimage(X[i-j], Y[i-j], tail3, XOR_PUT);


      if((X[i-j-1]-X[i-j])==0  && (Y[i-j-1]-Y[i-j])>0)

    putimage(X[i-j], Y[i-j], tail4, XOR_PUT);


      delay(speed);


      if(second==1)

      {

setcolor(15);

outtextxy(maxx-140,360,"Press Any Key...");

getch();

setcolor(0);

outtextxy(maxx-140,360,"Press Any Key...");

a='6';


second=2;

      }



      if(first==1)

      {

setcolor(15);

outtextxy(maxx-140,360,"Congratulations  ");

sound(100);

delay(300);

nosound();

getch();

setcolor(0);

outtextxy(maxx-140,360,"Congratulations  ");

second++;

first=2;


      }


// erase old image

      if(a=='6')

    putimage(x, y, head1, XOR_PUT);

      if(a=='4')

    putimage(x, y, head2, XOR_PUT);

      if(a=='8')

    putimage(x, y, head3, XOR_PUT);

      if(a=='5')

    putimage(x, y, head4, XOR_PUT);



      for(j=0; j<k; j++)

      {

   putimage(X[i-j], Y[i-j], body, XOR_PUT);


      }


      if((X[i-j-1]-X[i-j])<0  && (Y[i-j-1]-Y[i-j])==0)

    putimage(X[i-j], Y[i-j], tail1, XOR_PUT);


      if((X[i-j-1]-X[i-j])>0  && (Y[i-j-1]-Y[i-j])==0)

    putimage(X[i-j], Y[i-j], tail2, XOR_PUT);


      if((X[i-j-1]-X[i-j])==0  && (Y[i-j-1]-Y[i-j])<0)

    putimage(X[i-j], Y[i-j], tail3, XOR_PUT);


      if((X[i-j-1]-X[i-j])==0  && (Y[i-j-1]-Y[i-j])>0)

    putimage(X[i-j], Y[i-j], tail4, XOR_PUT);



      if(f==0)

      {

putimage(r1,r2,food,XOR_PUT);

f=1;

      }


      z--;

if((x>=r1 && y>=r2 && x<=r1+10 && y<=r2+10)||

(x<=r1 && y<=r2 &&x>=r1-10 && y>=r2-10) || z==0)

      {

if(z!=0)

{

sound(800);

delay(20);

setcolor(0);

score += 10;

outtextxy(maxx-50,250,scor);

itoa(score,scor,10);

if(score>hscore)

{

strcpy(hs,scor);

setfillstyle(1,1);

bar(maxx-140,337,maxx-20,348);

setcolor(14);

outtextxy(maxx-50,340,hs);

outtextxy(maxx-140,340,"High Score  ");

if(first==0)

{

first=1;

}

}

setcolor(4);

outtextxy(maxx-50,250,scor);

k++;

nosound();

}

z=100;

putimage(r1,r2,food,XOR_PUT);

repr1:

r1=random(450);

    if(r1<50)

       goto repr1;

repr2:

r2=random(400);

    if(r2<50)

goto repr2;


f=0;

      }



      i++;

      X[i]=x;

      Y[i]=y;


b=a;

if(kbhit())

{

rep:

a=getch();


if((b=='6' && a=='4') || (b=='4' && a=='6'))

a=b;


if((b=='8' && a=='5') || (b=='5' && a=='8'))

a=b;


if(a!='6' && a!='4' && a!='8' && a!='0' && a!='5')

a=b;

      }


      if(a=='8')

y -= bo;


      if(a=='5')

y += bo;


      if(a=='4')

x -= bo;


      if(a=='6')

x += bo;


 for(j=i+1; j<i-k; j--)

 {

 if((Y[i]>=Y[j] && Y[i]<=Y[j]+10) || (Y[i]<=Y[j] && Y[i]>=X[j]-10))

 {

 if((X[i]>=X[j] && X[i]<=X[j]+10) || (X[i]<=X[j] && X[i]>=X[j]-10))

 {

 a='0';

 }


 outtextxy(maxx-140,360,"C");


 }


 if((X[i]>=X[j] && X[i]<=X[j]+10) || (X[i]<=X[j] && X[i]>=X[j]-10))

 {

 if((Y[i]>=Y[j] && Y[i]<=Y[j]+10) || (Y[i]<=Y[j] && Y[i]>=X[j]-10))

 {

 a='0';

 }


 outtextxy(maxx-140,360,"C");

 }


 }


if(maze==1)

{

if(x<=14 || x>=maxx-184 || y<=14 || y>=maxy-14)

{

a='0';

}

}

}


if(score>hscore)

{

ofstream onfile("c:\tc\bin\rattle.txt");

onfile<<scor;

onfile.close();

   }


   setcolor(15);

   outtextxy(maxx-140,390," Gameover");

   sound(100);

   delay(400);

   nosound();

   getch();

   /* clean up */

   free(body);

   closegraph();

}

 

Post a Comment

0 Comments