- Back to Home »
- Classic Car Game (C with Graphics)
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#define RIGHT 19712
#define LEFT 19200
#define UP 18432
#define DOWN 20480
int carArr[5][2];
unsigned long int score = 0;
//to draw the path
void drawPath() {
bar(210,40,222,440);
bar(318,40,322,440);
bar(418,40,430,440);
}
//this function will draw the car at given position and in given color
void drawCar( int row, int col, int last, int color ) {
int r = row,c = col;
switch( last ) {
case LEFT : c = col + 1;
break;
case RIGHT : c = col - 1;
break;
case UP : r = row + 1;
break;
case DOWN : r = row - 1;
break;
}
setfillstyle( SOLID_FILL, BLACK ); // to erase
bar( 260 + c * 100 , 40 + r * 80 , 280 + c * 100 , 60 + r * 80 );
bar( 240 + c * 100 , 60 + r * 80 , 300 + c * 100 , 80 + r * 80 );
bar( 260 + c * 100 , 80 + r * 80 , 280 + c * 100 , 100 + r * 80 );
bar( 240 + c * 100 , 100 + r * 80 , 300 + c * 100 , 120 + r * 80 );
setfillstyle( SOLID_FILL, color ); // to draw
bar( 260 + col * 100 , 40 + row * 80 , 280 + col * 100 , 60 + row * 80 );
bar( 240 + col * 100 , 60 + row * 80 , 300 + col * 100 , 80 + row * 80 );
bar( 260 + col * 100 , 80 + row * 80 , 280 + col * 100 , 100 + row * 80 );
bar( 240 + col * 100 , 100 + row * 80 , 300 + col * 100 , 120 + row * 80 );
carArr[row][col] = 1;
carArr[r][c] = 0;
}
//this function will erase the car and place it in new position
//when we make a move
void eraseBottom( int c ) {
int r = 4;
setfillstyle( SOLID_FILL, BLACK ); // to erase
bar( 260 + c * 100 , 40 + r * 80 , 280 + c * 100 , 60 + r * 80 );
bar( 240 + c * 100 , 60 + r * 80 , 300 + c * 100 , 80 + r * 80 );
bar( 260 + c * 100 , 80 + r * 80 , 280 + c * 100 , 100 + r * 80 );
bar( 240 + c * 100 , 100 + r * 80 , 300 + c * 100 , 120 + r * 80 );
carArr[r][c] = 0;
}
//this function will tell where we have to place the enemy car
void enemy( int row, int col) {
if( carArr[ row ][ col ] == 0 ) {
if( row < 5 ) {
drawCar( row++, col , DOWN, WHITE );
}
} else if( carArr[ row ][ col ] == 1 ) {
gotoxy(1,1);
printf("You Lost The Game!!!!");
getch();
exit(0);
}
}
//this is the master of all functions
//this will generate the random numbers and positions for enemy cars
//this function will instruct the action to be done according to the players
//move!!
//Here speed will be increasing gradually when score increases
void play() {
int key;
int row = 4, col = 0;
int r = row,c = col;
unsigned int last;
int ctr1 = 0, ctr2 = -2;
int col1, col2, col3;
col1 = rand() % 2;
col2 = rand() % 2;
col3 = rand() % 2;
drawCar( row, col, RIGHT, RED );
while( key != 283 ) {
while( bioskey( 1 ) == 0 ) {
while( kbhit() == 0 ) {
gotoxy(1,5);
printf("Score : %lu", score);
if( ctr1 < 5 ) {
enemy( ctr1 , col1 );
enemy( ctr2 , col2 );
if( ctr1 == 4 ) {
enemy( 0 , col3 );
}
} else {
score += 100;
gotoxy(1,5);
printf("Score : %lu", score);
eraseBottom(col1);
ctr1 = ctr2;
ctr2 = 1;
col1 = col2;
col2 = col3;
col3 = rand() % 2;
enemy( ctr1 , col1 );
enemy( ctr2 , col2 );
}
ctr1++;
ctr2++;
//delay(500);
if( score < 1000 )
delay(750);
else if( score < 2000 )
delay(500);
else if( score < 3000 )
delay(400);
else if( score < 4000 )
delay( 350 );
else if( score < 5000 )
delay(300);
}
}
key = bioskey( 0 );
switch( key ) {
case LEFT : c = col - 1;
last = LEFT;
break;
case RIGHT : c = col + 1;
last = RIGHT;
break;
case UP : r = row - 1;
last = UP;
break;
case DOWN : r = row + 1;
last = DOWN;
break;
}
if( c < 0 ) c = 0;
if( r < 0 ) r = 0;
if( c > 1 ) c = 1;
if( r > 4 ) r = 4;
if( carArr[r][c] != 0 ) {
gotoxy(1,1);
printf("You Lost The Game!!!!");
getch();
exit(0);
}
drawCar(r,c,last, RED);
row = r;
col = c;
}
}
// and ofcourse... this is the main function() ;)
void main() {
int gdriver = DETECT, gmode;
initgraph( &gdriver, &gmode, "c:\\turboc3\\bgi" );
drawPath();
play();
closegraph();
}