/*
If you ever need to use this code, please do.
but,let me know how useful it was.
mail to :p_mdriyaz@hotmail.com
coded by:Da.MoRz
ver 1.0
*/
#include
#include
#include
#include
#include
#include
#include
void calc(int);
void car(int,int,int);
void check();
void crash();
void divider();
void finishline();
void gameover();
void gameovercheck();
int getkey();
void grass();
void help();
void lamps();
void mainscreen();
void printdet();
void road();
void redlife();
void setgraph();
void setimages();
void treest(int,int);
void winner();
void interrupt (*old)();
void interrupt new();
int min=1,sec=30;
int loop,loop1,
maxx,maxy,
midx,midy,
locx,locy,
movx,movy;
int nos,key,loop,set,setcomp,che,speed=200,life=2;
void *timage[10], *imgcar, *imgcare, *fin;
unsigned long unit=0;
struct
{
int insert[5];
int sw[5];
int vx[5],vy[5];
int sp[5];
}data[20];
unsigned far *head=(unsigned far *)0x41a;
unsigned far *tail=(unsigned far *)0x41c;
void main()
{
struct palettetype p1;
randomize();
mainscreen();
setgraph();
set=0;setcomp=0;
getpalette(&p1);
setrgbpalette(p1.colors[13],8,8,8);
setrgbpalette(p1.colors[12],0,15,0);
setrgbpalette(p1.colors[10],0,27,0);
setimages();
old=getvect(0x08);
setvect(0x08,new);
gotoxy(14,1);
printf("\'H\'=Help");
putimage(486,0,imgcar,0);
putimage(506,0,imgcar,0);
while(1)
{
unit++;
if(!(unit%100))
{
for(loop1=setcomp;loop1<=set;loop1++)
{
che=0;
for(loop=0;loop<5;loop++)
{
if(data[loop1].sw[loop]==0)
che++;
}
if(che==5)
setcomp++;
}
set++;
}
for(loop=0;loop<5;loop++)
if(data[set].insert[loop]==unit)
data[set].sw[loop]=1;
gotoxy(53,1);
printf("%2dm:%2ds",min,sec);
gotoxy(70,1);
if(speed<55) printf("MAX");
else printf(" ");
gotoxy(75,1);
if(speed<40) printf("NOS");
else printf(" ");
road();
lamps();
divider();
if(unit>=1400)
finishline();
check();
car(movx,movy,4);
if(kbhit())
{
key=getkey();
calc(key);
}
else
{
speed+=3;
gotoxy(75,1);
printf(" ");
if(speed>200)
{
speed=200;
gotoxy(1,1);
printf("Speed :%3d",0);
nosound();
key=0;
while(key!=72)
{
while(!kbhit())
{
gotoxy(53,1);
printf("%2dm:%2ds",min,sec);
check();
}
key=getkey();
if(key==1)
gameovercheck();
if(key==35)
help();
}
calc(key);
}
}
gotoxy(1,1);
printf("Speed :%3d",200-speed);
sound(150+(200-speed));
delay(speed);
}
}
void calc(int kp)
{
if(kp==1)
gameovercheck();
nos=0;
if(kp==72) speed-=5;
else if(kp==80) speed+=10;
else if(kp==57) {speed=0;nos=1;}
else if(kp==75) movx-=5;
else if(kp==77) movx+=5;
else if(kp==35) help();
crash();
if(speed<50 && !nos) speed=50;
if(speed>200)
{
speed=200;
gotoxy(1,1);
printf("Speed :%3d",0);
nosound();
key=0;
while(key!=72)
{
while(!kbhit())
{
gotoxy(53,1);
printf("%2dm:%2ds",min,sec);
check();
}
key=getkey();
if(key==1)
gameovercheck();
if(key==35)
help();
}
}
}
void car(int x,int y,int c)
{
int poly[6];
if(locx!=x)
{
setfillstyle(1,BLACK);
bar(locx-7,locy-10,locx+7,locy+10);
}
setcolor(c);
setfillstyle(1,c);
line(x-4,y-6,x+4,y-6);
bar(x-7,y+8,x+7,y+10);
poly[0]=x-4;
poly[1]=y+8;
poly[2]=x+4;
poly[3]=y+8;
poly[4]=x;
poly[5]=y-10;
fillpoly(3,poly);
setfillstyle(1,DARKGRAY);
bar(x-5,y-8,x-4,y-4);
bar(x+4,y-8,x+5,y-4);
bar(x-6,y+4,x-5,y+8);
bar(x+5,y+4,x+6,y+8);
locx=x;
locy=y;
}
void check()
{
for(loop1=setcomp;loop1<=set;loop1++)
{
for(loop=0;loop<5;loop++)
{
if(data[loop1].sw[loop]==1)
{
setfillstyle(1,BLACK);
bar(data[loop1].vx[loop],data[loop1].vy[loop],data[loop1].vx[loop]+14,data[loop1].vy[loop]+20);
che=(200-speed)-(data[loop1].sp[loop]);
data[loop1].vy[loop]+=(che/3);
if(data[loop1].vy[loop]>479 || data[loop1].vy[loop]<20)
data[loop1].sw[loop]=0;
else
{
putimage(data[loop1].vx[loop],data[loop1].vy[loop],imgcare,0);
if(((data[loop1].vy[loop]<=midy-10 && data[loop1].vy[loop]+20>midy-10) ||
(data[loop1].vy[loop]<=midy+10 && data[loop1].vy[loop]+20>midy+10))&&
((data[loop1].vx[loop]<=movx-7 && data[loop1].vx[loop]+14>movx-7) ||
(data[loop1].vx[loop]<=movx+7 && data[loop1].vx[loop]+14>movx+7)))
redlife();
}
}
}
}
}
void crash()
{
if(movx<=midx-80 || movx>=midx+80)
redlife();
}
void divider()
{
static int dy=21;
setfillstyle(1,BLACK);
bar(midx-5,20,midx+5,maxy);
setfillstyle(1,WHITE);
if(dy<=71)
bar(midx-3,21,midx+3,dy);
else
bar(midx-3,dy-50,midx+3,(dy-50)+50);
for(loop=dy+50;loop(midy-10))
winner();
fy+=10;
}
void gameover()
{
setvect(0x08,old);
sound(900);
delay(400);
sound(700);
delay(300);
sound(850);
delay(450);
sound(900);
delay(550);
nosound();
delay(200);
sound(900);
delay(400);
sound(700);
delay(300);
sound(740);
delay(450);
sound(650);
delay(550);
nosound();
gotoxy(36,16);
printf("GAME OVER");
gotoxy(32,17);
printf("PRESS ESC TO QUIT");
key=0;
while(key!=1)
{
while(!kbhit());
key=getkey();
}
closegraph();
printf("Visit http://www.geocities.com/ecma_ver1 for updated versions.");
printdet();
exit(0);
}
void gameovercheck()
{
nosound();
setfillstyle(1,BLACK);
gotoxy(33,16);
printf("QUIT GAME(Y/N)?");
key=0;
while(key!=49)
{
while(!kbhit());
key=getkey();
if(key==21)
{
bar(midx-80,midy-20,midx+80,midy+20);
gameover();
}
}
bar(midx-80,midy-20,midx+80,midy+20);
}
int getkey()
{
union REGS i,o;
i.h.ah=0;
int86(22,&i,&o);
*tail=*head;
return o.h.ah;
}
void grass()
{
setfillstyle(1,LIGHTGREEN);
bar(0,20,midx-102,maxy);
bar(midx+102,20,maxx,maxy);
}
void help()
{
unsigned char ch1=24;
unsigned char ch2=25;
nosound();
setcolor(WHITE);
setfillstyle(1,BLACK);
bar(midx-80,midy-130,midx+80,midy+80);
rectangle(midx-80,midx-130,midx+80,midy+80);
gotoxy(32,14);
printf("%c : ACCLERATE",ch1);
gotoxy(32,15);
printf("%c : BRAKE ",ch2);
gotoxy(32,16);
printf("<- : STEER LEFT ");
gotoxy(32,17);
printf("-> :STEER RIGHT");
gotoxy(32,18);
printf("SPACE: NITRO BOOST");
gotoxy(32,19);
printf("Esc : QUIT");
getch();
bar(midx-80,midy-130,midx+80,midy+80);
}
void lamps()
{
static int ly=21;
setfillstyle(8,BLUE);
bar(midx-100,20,midx-80,maxy);
bar(midx+80,20,midx+100,maxy);
setcolor(WHITE);
setfillstyle(1,YELLOW);
for(loop=ly;loop               ( geocities.com/ecma_ver1)