Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.

Rattle Snake - A excellent snake game - C++ Code Bank


Rattle Snake - A excellent snake game
Rattle Snake - A excellent snake game developed in C++.
                #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)  /* an error occurred */
   {
      printf("Graphics error: %s
", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1); /* terminate with an error code */
   }
   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,30,"RATTLE SNAKE");
   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,"Yellow");
   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=getche();

		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(x>maxx-170)
	x=0;

      if(y>maxy)
	y=0;*/

      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  ");
	}

       }

/*      for(j=i; j<i-k; j--)
      {
	if((y>=Y[j] && y<=Y[j]+10) || (y<=Y[j] && y>=Y[j]-10))
	{
		if((x>=X[j] && x<=X[j]+10) || (x<=X[j] && x>=X[j]-10))
		{
			a='5';
		}
	}

	if((x>=X[j] && x<=X[j]+10) || (x<=X[j] && x>=X[j]-10))
	{
		if((y>=Y[j] && y<=Y[j]+10) || (y<=Y[j] && y>=Y[j]-10))
		{
			a='5';
		}
	}
	if(j==0)
		break;
      }      */


  /*	if(x<=0)
	x=maxx-170;

	if(y<=0)
	y=maxy;*/

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

}
            
Comments
GTADarkDude's avatar
GTADarkDude 14 years ago

Divide your code into functions. One huge main() is ugly as hell.