Top Banner
C++ Project Feed the snake” 1
34
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Final Repot on C++ PROJECT

C++ Project

“Feed the snake”

MADE BY : KANIKA GOEL 09ITMG1035CSE

KOMAL RATRA 09ITMG1039CSE

1

Page 2: Final Repot on C++ PROJECT

MAHIMA JAIN 09ITMG1045CSE

NIDHI GARG 09ITMG1050CSE

C++ PROJECT ON

RED SNAKE GAMEUNDERTAKEN AT

ITMU , INDIA

Submitted in partial fulfillment of the requirement for the award

BACHELOR OF TECHNOLOGY

In

COMPUTER SCIENCE ENGINEERING

Submitted by

KANIKA GOEL(09-ITMG-1035CSE)

KOMAL RATRA(09-ITMG-1039CSE)

MAHIMA JAIN(09-ITMG-1045CSE)

2

Page 3: Final Repot on C++ PROJECT

NIDHI GARG(09-ITMG-1050CSE)

ACKNOWLEDGMENT

We would like to express our special thanks of gratitude to our teacher

Mrs. Supriya Raheja who gave us the golden opportunity to do this

wonderful project which also helped us in doing a lot of research and

learning new things.

We are also highly indebted to her for the guidance and constant

supervision as well as for providing necessary information regarding the

project.

Our thanks and appreciations also go to our friends who have willingly

helped us out with their abilities.

3

Page 4: Final Repot on C++ PROJECT

TABLE OF CONTENTSS.No Topic Page no.

1. Certificate 2

2. Acknowledgment 3

3. Objective 5

4. Introduction 6-7

5. Program code 8-15

6. Functions used in the project 16-20

7. Snapshots with the program code 21-27

8. Bibliography 28

4

Page 5: Final Repot on C++ PROJECT

OBJECTIVE

The goal is to implement a simple yet complete version of the game” FEED THE SNAKES”. In the game the player directs a constantly moving snake with the 'K' (left),'H' (up), 'P' (down), 'M' (right) keys. The player must successfully navigate the snake so that it avoids obstacles such as walls and it's own tail while it the continues it's never ending pursuit of candy. When the snake eats a candy (the head of the snake touches a candy) a new candy is placed randomly on the game board and the snake gets longer. Once the snake eats the candies the length of the snake and the score increases . If the player correctly guides the snake through score(50) the player wins. If at any time the head of the snake touches either wall or the snakes tail the player loses.

5

Page 6: Final Repot on C++ PROJECT

INTRODUCTION

Feed The Snake is a classical arcade game. You must control the snake who should eat a little for the travel. The object of the game is eat, eat and eat. From the little worm you can grow to the mighty python. We can advise the game for everyone who loves to play classical snake game.

As in the classic snake game you shouldn't cut into the walls. All that you want from the classical snake game with wide game possibilities is done in the Feed the Snake. Begin this snake game one more time and Feed the Snake become the game you will always play.

This is a small turbo c++ program of snake game usingsome graphics.h functions. Anyone who is familiar with C++ graphics programming can do it very easily.

Code Explanation In the beginning of code explanation the first important part is initializing the graphics mode in turbo C to do drawing a rectangle and that is must be done before using every graphics related functions. Thisgraphics initialization is done by a pre-define function called initgraph() with a tiny code part given below :

int gdriver = DETECT, gmode, errorcode;

6

Page 7: Final Repot on C++ PROJECT

initgraph(&gdriver, &gmode, "C:\\TC\\BGI");

If your TC folder is in D drive than just type "D:\\TC\\BGI" instead of

"C:\\TC\\BGI" inside the initgraph( ) function.So if you want to use graphics functions in your turbo c program, than you have to always write these two statement in the main( ) function.

If you initialize the graphics mode than, all graphics.h function can be use in the program.But if you need to come back to the normal textmode (the black screen ) than you have to shut down the graphics mode by using the graphics.h function closegraph( ).

In this program we have use user-define functions given below :

int moveXRight();

int moveXLeft();

int moveYUp();

int moveYDown();

void store(void);

void erase(void);

void init(void);

void test(int x);

void putAnObject(void);

void getAkey(void);

int score(void);

void gameOver();

void restart();

7

Page 8: Final Repot on C++ PROJECT

PROGRAM CODE#include <graphics.h>#include <stdlib.h>#include<math.h>#include <stdio.h>#include <conio.h>#include<dos.h>#include<iostream.h>

class Snake{

public :Snake(int x,int y){xPos=x; yPos=y;};~Snake(){;};

int length,size,color,speed,xPos,yPos,stIndex,dlIndex;int borderColor,snakeColor,scr;int objX,objY;int xArr[8000];int yArr[8000];int moveXRight();int moveXLeft();int moveYUp();int moveYDown();void store(void);void erase(void);void init(void);void test(int x);void putAnObject(void);void getAkey(void);int score(void);void gameOver();void restart();

};

8

Page 9: Final Repot on C++ PROJECT

int Snake::moveXRight(){

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

setcolor(4);store();circle(xPos++,yPos,4);delay(speed);erase();test(1);if(xPos % 10 ==0)

if (kbhit())break;

}return xPos;

}

int Snake::moveXLeft(void){

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

setcolor(4);store();circle(xPos--,yPos,4);delay(speed);erase();test(2);if(xPos % 10 ==0)

if (kbhit())break;

}return xPos;

}int Snake::moveYUp(){

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

setcolor(4);

9

Page 10: Final Repot on C++ PROJECT

store();circle(xPos,yPos--,4);delay(speed);erase();test(3);if(yPos % 10 ==0)

if (kbhit())break;

}return yPos;

}int Snake::moveYDown(){

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

setcolor(4);store();circle(xPos,yPos++,4);delay(speed);erase();test(4);if(yPos % 10 ==0)

if (kbhit())break;

}return yPos;

}void Snake::store(){

xArr[stIndex]= xPos;yArr[stIndex]= yPos;stIndex++;if (stIndex == size)

stIndex=0;}

void Snake::erase(){

setcolor(0);

10

Page 11: Final Repot on C++ PROJECT

if(dlIndex-length >=0){circle(xArr[dlIndex-length],yArr[dlIndex-length],4);}elsecircle(xArr[size-abs(dlIndex-length)],yArr[size-abs(dlIndex-length)],4);dlIndex++;if(dlIndex == size)

dlIndex =0;}void Snake::getAkey(void){

char key;for(int k=0 ;k<3 ;k++){

k=1;// infinite loopkey = getch();if (key == 'M')

xPos = moveXRight();if(key == 'K')

xPos = moveXLeft();if (key == 'H')

yPos = moveYUp();if(key == 'P')

yPos = moveYDown();if(key == 'q' || key == 'Q')

exit(1);}

}

void Snake::test(int x){

int tst,a;switch (x) {case 1: { //when moving right

tst = getpixel(xPos+4,yPos);if(xPos == objX*10 && yPos == objY*10) a=score(); if (a>50)

11

Page 12: Final Repot on C++ PROJECT

{gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver(); break;}// Game over//left

case 2: { tst = getpixel(xPos-4,yPos);if(xPos == objX*10&& yPos == objY*10) a=score();

if (a>50){gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver(); break;}// Game over//up

case 3: { tst = getpixel(xPos,yPos-4);if(xPos == objX*10 && yPos == objY*10) a= score(); if (a>50)

{gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver(); break;}// Game over

//downcase 4: { tst = getpixel(xPos,yPos+4);

if(xPos == objX*10 && yPos == objY*10)a=score();if (a>50){gotoxy(30,22);cout<<"YOU WON";delay(2000);

12

Page 13: Final Repot on C++ PROJECT

exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver();break; }

}// end of switch}void Snake::init(void){

borderColor = YELLOW;setcolor(RED);settextstyle(0, 1, 6);outtextxy(50,10,"RED SNAKE");gotoxy(14,6);cout<<"SCORE : 0";settextstyle(7,0,1);setcolor(GREEN);outtextxy(255,450,"***Q=Quit ***");setcolor(borderColor);rectangle(100,100,540,380);rectangle(105,105,535,375);rectangle(110,110,530,370);scr=0;dlIndex=0;stIndex=0;speed=7;snakeColor = RED;size = 7999;length = 50;for(int i=0 ;i<8000; i++){

xArr[i] = 0;yArr[i] = 0;

}}void Snake::putAnObject(){

int test2=0;for(int i=0 ;i<1000 ; i++){

13

Page 14: Final Repot on C++ PROJECT

objX = random(41)+12 ;objY = random(25)+12 ; // the less minus 10test2 = getpixel(objX*10,objY*10);setcolor(WHITE);if(test2 != snakeColor){

circle(objX*10,objY*10,4);setfillstyle(2 ,WHITE);fillellipse(objX*10,objY*10,4,4);break;

}}

}void Snake::gameOver(){

setcolor(WHITE);ellipse(320, 240,30,30, 170, 25);setfillstyle(9 ,BLUE);fillellipse(320, 240, 170, 25);settextstyle(0,0,2);setcolor(RED);outtextxy(188,232,"GAME OVER ");getch();getch();restart();

}void Snake::restart(){

cleardevice();xPos=320;yPos=240;init();randomize();putAnObject();getAkey();

}

int Snake::score(){

scr+=9;

14

Page 15: Final Repot on C++ PROJECT

gotoxy(14,6);cout<<"SCORE : ";cout<<scr;delay(80);length+=20;putAnObject();return (scr);

}void main(void) /* MAIN */{

int gdriver = DETECT, gmode, errorcode;initgraph(&gdriver, &gmode, "c:\\tc\\bgi");randomize();Snake snake(320,240);snake.init();snake.putAnObject();snake.getAkey();getch();closegraph();

15

Page 16: Final Repot on C++ PROJECT

FUNCTIONS USED IN THE PROJECT gotoxy

Positions cursor in text window

Declaration: void gotoxy(int x, int y);

Remarks:

gotoxy moves the cursor to the given position in the current text window. If the coordinates are invalid, the call to gotoxy is ignored.

Example of invalid coordinates:

gotoxy(40,30) /* (35,25) = window's bottom right position */

Return Value: None

_____________________________________________________________________________

delay <DOS.H>

Suspends execution for interval (milliseconds)

Declaration: void delay(unsigned milliseconds);

Remarks:

With a call to delay, the current program is suspended from execution for the time specified by the argument milliseconds.

delay is accurate to one millisecond.

Return Value: None

______________________________________________________________________________

randomize <STDLIB.H>

Macro that initializes random number generator

Declaration:

void randomize(void);

Remarks:

randomize initializes the random number

16

Page 17: Final Repot on C++ PROJECT

generator with a random value.

Because randomize is implemented as a macro that calls the time function prototyped in TIME.H, you should include TIME.H when you use this routine.

Return Value: None

____________________________________________________________________________

cleardevice <GRAPHICS.H>

Clears the graphics screen

Declaration: void far cleardevice (void);

Remarks:

cleardevice erases the entire graphics screen and moves the CP (current position) to home(0,0).

(Erasing consists of filling with the current background color.)

Return Value: None

______________________________________________________________________________

outtext, outtextxy <GRAPHICS.H>

outtext displays a string in the viewport (graphics mode) outtextxy displays a string at the specified location (graphics mode)

Declaration:

void far outtext(char far *textstring); void far outtextxy(int x, int y, char far *textstring);

Remarks:

outtext and outtextxy display a text string, using the current justification settings and the current font, direction, and size.

outtext outputs textstring at the current position (CP) outtextxy displays textstring in the viewport at the position (x, y)

If a string is printed with the default font using outtext or outtextxy, any part of the string that extends outside the current viewport is truncated.

outtext and outtextxy are for use in graphics mode; they will not work in text mode.

Return Value: None

17

Page 18: Final Repot on C++ PROJECT

_____________________________________________________________________________

setcolor <GRAPHICS.H>

setcolor sets the current drawing color

Declaration:

void far setcolor(int color);

Remarks:

setcolor sets the current drawing color to color, which can range from 0 to getmaxcolor. To select a drawing color with setcolor, you can pass either the color number or the

equivalent color name. The drawing color is the value that pixels are set to when the program draws lines, etc.

______________________________________________________________________________

settextstyle <GRAPHICS.H>

Sets the current text characteristics

Declaration:

void far settextstyle(int font, int direction, int charsize);

Remarks:

settextstyle sets the text font, the direction in which text is displayed, and the size of the characters.

A call to settextstyle affects all text output by outtext and outtextxy.

Return Value: None

__________________________________________________________________________________

ellipse, fillellipse <GRAPHICS.H>

ellipse draws an elliptical arc fillellipse draws and fills an ellipse

Declaration:

void far ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius); void far fillellipse(int x, int y,int xradius, int yradius);

Remarks:

ellipse draws an elliptical arc in the current

18

Page 19: Final Repot on C++ PROJECT

drawing color.

fillellipse draws an ellipse, then fills the ellipse with the current fill color and fill pattern.

Argument

(x,y) - Center of ellipse

xradius - Horizontal axis

yradius - Vertical axis

_______________________________________________________________________________

setfillstyle <GRAPHICS.H>

Sets the fill pattern and color

Declaration: void far setfillstyle(int pattern, int color);

Remarks: setfillstyle sets the current fill pattern and fill color.

Return Value: None

_________________________________________________________________________________

circle <GRAPHICS.H>

circle draws a circle

Declaration:

void far circle(int x, int y, int radius);

Remarks:

circle draws a circle in the current drawing color.

Return Value: None

_________________________________________________________________

getpixel <GRAPHICS.H>

getpixel gets the color of a specified pixel

Declaration:

unsigned far getpixel(int x, int y);

19

Page 20: Final Repot on C++ PROJECT

Remarks:

getpixel gets the color of the pixel located at (x,y).

Return Value:

getpixel returns the color of the given pixel.

_________________________________________________________________________________

kbhit <CONIO.H>

Checks for currently available keystrokes.

Declaration:

int kbhit(void);

Remarks:

kbhit checks to see if a keystroke is currently available. Any available keystrokes can be retrieved with getch or getche.

Return Value:

On success (if a keystroke is available), returns a non-zero integer If a keystroke is not available, returns 0.

20

Page 21: Final Repot on C++ PROJECT

Snapshots of the project and the

associated program code

void Snake::putAnObject(){ int test2=0; for(int i=0 ;i<1000 ; i++)

{objX = random(41)+12 ;objY = random(25)+12 ; // the less minus 10test2 = getpixel(objX*10,objY*10);setcolor(WHITE);if(test2 != snakeColor){

circle(objX*10,objY*10,4);setfillstyle(2 ,WHITE);fillellipse(objX*10,objY*10,4,4);break;

}}

21

Page 22: Final Repot on C++ PROJECT

int Snake::moveXRight(){

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

setcolor(4);store();circle(xPos++,yPos,4);delay(speed);erase();test(1);if(xPos % 10 ==0)

if (kbhit())break;

}return xPos;

}

int Snake::moveXLeft(void){

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

setcolor(4);store();circle(xPos--,yPos,4);delay(speed);erase();test(2);

22

Page 23: Final Repot on C++ PROJECT

if(xPos % 10 ==0)if (kbhit())

break;}return xPos;

}int Snake::moveYUp(){

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

setcolor(4);store();circle(xPos,yPos--,4);delay(speed);erase();test(3);if(yPos % 10 ==0)

if (kbhit())break;

}return yPos;

}int Snake::moveYDown(){

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

setcolor(4);store();circle(xPos,yPos++,4);delay(speed);erase();test(4);if(yPos % 10 ==0)

if (kbhit())break;

}return yPos;

}

23

Page 24: Final Repot on C++ PROJECT

void Snake::gameOver(){

setcolor(WHITE);ellipse(320, 240,30,30, 170, 25);setfillstyle(9 ,BLUE);fillellipse(320, 240, 170, 25);settextstyle(0,0,2);setcolor(RED);outtextxy(188,232,"GAME OVER ");getch();getch();restart();

24

Page 25: Final Repot on C++ PROJECT

int Snake::score(){

scr+=9;gotoxy(14,6);cout<<"SCORE : ";cout<<scr;

delay(80);length+=20;putAnObject();return (scr);

}

25

Page 26: Final Repot on C++ PROJECT

void Snake::test(int x){

int tst,a;switch (x) {case 1: { //when moving right

tst = getpixel(xPos+4,yPos);if(xPos == objX*10 && yPos == objY*10)

a=score(); if (a>50)

{gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver(); break;}// Game over//left

case 2: { tst = getpixel(xPos-4,yPos);if(xPos == objX*10&& yPos == objY*10)

a=score();if (a>50)

26

Page 27: Final Repot on C++ PROJECT

{gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver(); break;}// Game over//up

case 3: { tst = getpixel(xPos,yPos-4);if(xPos == objX*10 && yPos == objY*10)

a= score(); if (a>50)

{gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver(); break;}// Game over

//downcase 4: { tst = getpixel(xPos,yPos+4);

if(xPos == objX*10 && yPos == objY*10)

a=score();if (a>50){gotoxy(30,22);cout<<"YOU WON";delay(2000);exit(1);}

if(tst== borderColor || tst == snakeColor)gameOver();break; }

}// end of switch}

27

Page 28: Final Repot on C++ PROJECT

BIBLIOGRAPHY www.cprogramming .com www.mycplus.com www.devmaster.net Object oriented programming by E.balaguruswamy http://www.simonhuggins.com/courses/cbasics/

course_notes/snake.htm http://answers.yahoo.com/question/index?

qid=20070424153140AAeZdSO

28