0% found this document useful (0 votes)
1K views

Snake Game Source Code in C

This document contains the source code for a snake game written in C. It includes function definitions for initializing the game, drawing the snake and target, checking for collisions, and handling keyboard input. The snake is represented as an array of parts that are drawn as rectangles. When the snake eats the target, the number of parts and score are increased. The game ends if the snake collides with itself or the edges of the screen.

Uploaded by

BayasgalanGL
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views

Snake Game Source Code in C

This document contains the source code for a snake game written in C. It includes function definitions for initializing the game, drawing the snake and target, checking for collisions, and handling keyboard input. The snake is represented as an array of parts that are drawn as rectangles. When the snake eats the target, the number of parts and score are increased. The game ends if the snake collides with itself or the edges of the screen.

Uploaded by

BayasgalanGL
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

nake Game Source Code in C

#include<dos.h>
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>

#define UP 72
#define LEFT 75
#define RIGHT 77
#define DOWN 80
#define ESC 1
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
struct SnakeParts{
int x;
int y;
}box[50],target;
void snake(int ,int );
void initialize(int,int);
void interrupt (*prev)(__CPPARGS);

void interrupt our(__CPPARGS);


void snakeb();
int check();
void Rectangle(int ,int,int,int);
int
stop=0,blocks=4,direction=2,size=10,hit=1,snake_color=14,bk=7,target_color
=4;
int stage=1,speed=100,point=0;
void main(){
int gd=DETECT,gm,x=100,y=100,i=0,j=0;
char msg[50];
initgraph(&gd,&gm,"");
/*animation*/
prev=getvect(9);
/*

setcolor(bk);
rectangle(0,0,639,479);
setfillstyle(SOLID_FILL,bk);
floodfill(250,250,bk);*/
initialize(x,y);
//getch();
while (1){
/*setcolor(bk);
sprintf(msg,"POINT = %3d",point);
settextstyle(0,HORIZ_DIR,1);
outtextxy(550,100,msg); */

switch(direction){
case 0: j-=size;break;
case 1: j+=size;break;
case 2: i+=size;break;
case 3: i-=size;break;
}
setcolor(snake_color);
snake(x+i,y+j);//,x+15+i,y+15+j);
delay(speed);
setcolor(bk);
snakeb(/*x+i,y+j*/);//,x+15+i,y+15+j);
setvect(9,our);
if(stop==1){break;}
if(check()){break;}
if(hit==1){
hit=0;
target.x=size+size*random(25);
target.y=size+size*random(20);
setcolor(target_color);
setfillstyle(SOLID_FILL,target_color);
circle(target.x+size/2,target.y+size/2,size/2-1);
floodfill(target.x+size/2,target.y+size/2,target_color);
}
setfillstyle(SOLID_FILL,target_color);
setcolor(2);

circle(target.x+size/2,target.y+size/2,size/2-1);
floodfill(target.x+size/2,target.y+size/2,2);
/*setcolor(11);
sprintf(msg,"POINT = %3d",point);
settextstyle(0,HORIZ_DIR,1);
outtextxy(550,100,msg);*/
gotoxy(65,4);
printf("POINT = %3d",point);
//delay(3000);
//cleardevice();
}
closegraph();
}
void interrupt our(__CPPARGS){
//if(inportb(0x60)==UP){
//i=0;j
switch(inportb(0x60)){
case UP: if(direction==1)break;direction=0;break;
case DOWN: if(direction==0)break;direction=1;break;
case RIGHT: if(direction==3)break;direction=2;break;
case LEFT: if(direction==2)break;direction=3;break;
case 15:blocks++;break;
case ESC: stop=1;break;
}

(*prev)();
}
void snake(int x1,int y1){//,int x2,int y2){
int k=0;
//if(getcolor()==15){
for(k=blocks-1;k>0;k--){
box[k].x=box[k-1].x;
box[k].y=box[k-1].y;
}
box[0].x=x1;
box[0].y=y1;
//}
//setfillstyle(SOLID_FILL,snake_color);
for(k=0;k<blocks;k++){
Rectangle(box[k].x,box[k].y,box[k].x+size,box[k].y+size);
//floodfill(box[k].x+size/2,box[k].y+size/2,snake_color);
}

}
void snakeb(){
//setfillstyle(SOLID_FILL,bk);
for(int k=0;k<blocks;k++){
Rectangle(box[k].x,box[k].y,box[k].x+size,box[k].y+size);
//floodfill(box[k].x+size/2,box[k].y+size/2,bk);
}

}
void initialize(int x,int y){
setcolor(bk);
rectangle(0,0,639,479);
setfillstyle(SOLID_FILL,bk);
floodfill(250,250,bk);
box[0].x=x;
box[0].y=y;
for(int i=1;i<blocks;i++){
box[i].x=x-size*i;
box[i].y=y;
}
/*for(int k=0;k<blocks;k++)
rectangle(box[k].x,box[k].y,box[k].x+15,box[k].y+15);*/
}
int check(){
int i;
char msg[50];

if(!(box[0].x>=0 && box[0].x<=639 && box[0].y>=0 && box[0].y<=479)){


for( i=100;i<700;i+=100){
sound(i);
delay(100);
nosound();
}

sprintf(msg,"GAME OVER");
setcolor(4);
settextstyle(1,HORIZ_DIR,6);
outtextxy(150,200,msg);
delay(3000);
cleardevice();
return 1;
}
for( i=1;i<blocks;i++){
if(box[0].x==box[i].x && box[0].y==box[i].y){
sprintf(msg,"GAME OVER");
setcolor(4);
settextstyle(1,HORIZ_DIR,6);
outtextxy(150,200,msg);
delay(3000);
cleardevice();
return 1;
}
}
if(box[0].x==target.x && box[0].y==target.y){
//for( i=50;i<400;i+=50){
sound(700);
delay(100);
nosound();
//}

blocks++;
point++;
hit=1;
setcolor(bk);
//circle(target.x+size/2,target.y+size/2,size/2-1);
setfillstyle(SOLID_FILL,bk);
setcolor(bk);
circle(target.x+size/2,target.y+size/2,size/2-1);
floodfill(target.x+size/2,target.y+size/2,bk);
}
if(blocks==40){
stage++;
blocks=4;
sprintf(msg,"STAGE %d CLEARED",stage-1);
setcolor(4);
settextstyle(1,HORIZ_DIR,6);
outtextxy(150,200,msg);
delay(2000);
cleardevice();
initialize(100,100);
speed=100/stage;
}
return 0;
}
void Rectangle(int x1,int y1,int x2,int y2){

for(int i=0;i<size/2;i++)
rectangle(x1+i,y1+i,x2-i,y2-i);
}

You might also like