/* 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