Untitled
unknown
plain_text
2 years ago
6.7 kB
13
Indexable
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#include<string.h>
//#define LEFT 1
//#define RIGHT 2
//#define UP 3
//#define DOWN 4
enum {LEFT = 1, RIGHT = 2, UP = 3, DOWN = 4};
class Snake {
public:
//This method is used to provide a particular color to elements
void textcolor(int fc,int bc=-1){
if(fc<0 || fc>15)
return;
HANDLE h;
h = GetStdHandle(STD_OUTPUT_HANDLE);
if(bc>=0 && bc<16)
SetConsoleTextAttribute(h,fc|bc*16);
else
SetConsoleTextAttribute(h,fc);
}
//This method is used to provide a particular color to elements
void textcolor(char *fc,char *bc=""){
int x,y=16;
char *colors[]={"Black","Blue","Green","Aqua","Red","Purple","Yellow","White","Gray",
"LightBlue","LightGreen","LightAqua","LightRed","LightPurple","LightYellow","BrightWhite"};
for(x=0;x<16;x++)
if(strcmpi(colors[x],fc)==0)
break;
if(strlen(bc)>0)
for(y=0;y<16;y++)
if(strcmpi(colors[y],bc)==0)
break;
textcolor(x,y);
}
//This method is used to provide a particular color to elements
void textcolor(char *fc,int bc){
int x;
char *colors[]={"Black","Blue","Green","Aqua","Red","Purple","Yellow","White","Gray",
"LightBlue","LightGreen","LightAqua","LightRed","LightPurple","LightYellow","BrightWhite"};
for(x=0;x<16;x++)
if(strcmpi(colors[x],fc)==0)
break;
textcolor(x,bc);
}
//This method is used to provide a particular color to elements
void textcolor(int fc,char *bc){
int y;
char *colors[]={"Black","Blue","Green","Aqua","Red","Purple","Yellow","White","Gray",
"LightBlue","LightGreen","LightAqua","LightRed","LightPurple","LightYellow","BrightWhite"};
if(strlen(bc)>0)
for(y=0;y<16;y++)
if(strcmpi(colors[y],bc)==0)
break;
textcolor(fc,y);
}
//This method is used to set the position to a particular coordinate
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
//This method is used to draw the texts on the screen
void getup(){
HANDLE hout;
CONSOLE_CURSOR_INFO cursor;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
cursor.dwSize=1;
cursor.bVisible=false;
SetConsoleCursorInfo(hout, &cursor);
system("mode con:cols=80 lines=25");
system("title Snake Game");
system("cls");
textcolor("LightAqua");
printf("\n %c",218);
int x;
for(x=0;x<75;x++)
printf("%c",196);
printf("%c ",191);
for(x=0;x<17;x++){
gotoxy(2,x+2);
printf("%c",179);
gotoxy(78,x+2);
printf("%c ",179);
}
printf(" %c",192);
for(x=0;x<75;x++)
printf("%c",196);
printf("%c ",217);
printf(" %c",218);
for(x=0;x<21;x++)
printf("%c",196);
printf("%c\n",191);
printf(" %cPress Enter to Replay%c\n",179,179);
printf(" %c",192);
for(x=0;x<21;x++)
printf("%c",196);
printf("%c",217);
gotoxy(59,20);
printf("%c",218);
for(x=0;x<18;x++)
printf("%c",196);
printf("%c",191);
gotoxy(59,21);
printf("%c SCORE : 100 %c",179,179);
gotoxy(59,22);
printf("%c STATUS: Playing %c",179,179);
gotoxy(59,23);
printf("%c",192);
for(x=0;x<18;x++)
printf("%c",196);
printf("%c",217);
gotoxy(32,21);
printf("Eat the food #");
gotoxy(32,22);
printf("Press 'space' to Pause");
textcolor(7);
}
//This method is used to update the score variable on the right side down screen
void score(int sc){
gotoxy(69,21);
printf("%6d",sc*10);
}
//This method is used to update the status variable which is initially set to playing on the right side down screen
void status(char *s,int c=7){
gotoxy(69,22);
textcolor(c);
int x;
for(x=0;x<strlen(s);x++)
printf("%c",s[x]);
for(;x<8;x++)
printf(" ");
textcolor(7);
}
};
// This is the main method, the program starts from here
int main(){
Snake gg;
gg.getup();
register int flow,size,i,xb,yb;
int speed,restart=1,tmp,xpos[100],ypos[100],scr;
srand(time(NULL));
while(true){
if(restart){
gg.status("Playing",10);
for(int k=1;k<75;k+=2)
for(int j=0;j<17;j++){
gg.gotoxy(k+3,j+2);
printf(" ");
}
size=5;
speed=100;
scr=0;
gg.score(scr);
flow=RIGHT;
xpos[0]=20;
for(i=0;i<size;i++){
xpos[i]=xpos[0]-i*2;
ypos[i]=10;
}
for(i=0;i<size;i++){
gg.gotoxy(xpos[i],ypos[i]);
printf("*");
}
for(tmp=1;true;){
do{
xb=rand()%75+3;
}while(xb%2!=0);
yb=rand()%17+2;
for(i=0;i<size;i++)
if(xb==xpos[i] && yb==ypos[i]){
tmp=0; break;
}
if(tmp)
break;
}
gg.gotoxy(xb,yb);
gg.textcolor("lightred");
printf("#");
gg.textcolor(7);
restart=0;
}
while(!kbhit() && !restart) {
if(xpos[0]==xb && ypos[0]==yb){
for(tmp=1;true;){
do{
xb=rand()%75+3;
}while(xb%2!=0);
yb=rand()%17+2;
for(i=0;i<size;i++)
if(xb==xpos[i] && yb==ypos[i]){
tmp=0; break;
}
if(tmp)
break;
}
gg.gotoxy(xb,yb);
gg.textcolor("lightred");
printf("#");
gg.textcolor(7);
size++;
scr++;
speed-=3;
gg.score(scr);
}
gg.gotoxy(xpos[size-1],ypos[size-1]);
for(i=size-1;i>0;i--){
xpos[i]=xpos[i-1];
ypos[i]=ypos[i-1];
}
switch(flow){
case RIGHT :xpos[i]+=2; break;
case LEFT : xpos[i]-=2; break;
case UP : ypos[i]-=1; break;
case DOWN : ypos[i]+=1;
}
tmp=1;
for(i=1;i<size;i++)
if(xpos[i]==xpos[0] && ypos[i]==ypos[0]){
tmp=0;
break;
}
if(xpos[0]>76 || xpos[0]<4 || ypos[0]<2 ||ypos[0]>18)
tmp=0;
if(tmp){
printf(" ");
gg.gotoxy(xpos[0],ypos[0]);
printf("O");
gg.gotoxy(xpos[1],ypos[1]);
printf("*");
}
else{
gg.textcolor("LIGHTRED");
printf("*");
gg.gotoxy(xpos[1],ypos[1]);
printf("O");
for(i=2;i<size;i++){
gg.gotoxy(xpos[i],ypos[i]);
printf("*");
}
gg.textcolor(7);
gg.status("GameOver",12);
restart=1;
getch();
}
//delay(speed);
Sleep(speed);
}
char ch=getch();
switch(tolower(ch)){
case 'x' : system("cls");
return 0;
case ' ' : gg.status("Paused");
while(true){
char z=getch();
if(z=='x')
return 0;
if(z==' ')
break;
}
gg.status("Playing",10);
break;
case -32: {
char chh=getch();
if(chh==72 && flow!=DOWN)
flow=UP;
else if(chh==80 && flow!=UP)
flow=DOWN;
else if(chh==75 && flow!=RIGHT)
flow=LEFT;
else if(chh==77 && flow!=LEFT)
flow=RIGHT;
break;
}
}
}
}Editor is loading...