/* Coded by : Da.MoRz Email : p_mdriyaz@hotmail.com */ #include #include #include #include #include void blockcheck(int); void dcheck(); void display(); void gameover(); void gameovercheck(); void setimages(); //Direction functions void uru(); void ulu(); void uls(); void u_(); void dr_(); void dl_(); void interrupt (*old)(); void interrupt new(); void interrupt (*okey)(); void interrupt nkey(); int loop,loop1,rnd,temp,key,del=0,chances=2,score=0,tx=1,win=0; int spos=280; int ball_x=315,ball_y=150; int ball_xvar,ball_yvar; int ball_prevx=0,ball_prevy=60; int cx,cy;//contact x,contact y int prevcx,prevcy; int color_d[15][5]; int act_d[15][5]; enum direct{u=0,d,ur,dr,ul,dl} dir; union REGS i; struct palettetype p; void *slide,*ball,*eball,*blue,*red,*green,*yellow; void main() { setimages(); old=getvect(0x08); setvect(0x08,new); okey=getvect(0x09); setvect(0x09,nkey); i.x.ax=0x07; i.x.dx=550; int86(0x33,&i,&i); ball_xvar=0; ball_yvar=2; dir=d; while(1) { gameovercheck(); if(tx<40) { gotoxy(tx,1); printf("_"); gotoxy(81-tx,1); printf("_"); } else if(tx>40) { gotoxy(tx,1); printf("-"); gotoxy(80-tx,1); printf("-"); } tx++; if(tx>80) tx=1; gotoxy(1,2); printf("Chances left:%d",chances); printf(" Score:%2d",score); printf(" Press -/+ to Decrease/Increase speed"); printf(",Click LMB to quit"); ball_x+=ball_xvar; ball_y+=ball_yvar; if(ball_y<=113) { if(ball_y<=53) blockcheck(0); else if(ball_y<=68) blockcheck(1); else if(ball_y<=83) blockcheck(2); else if(ball_y<=98) blockcheck(3); else if(ball_y<=113) blockcheck(4); } if(ball_y>450) { chances--; sound(1000); delay(150); nosound(); if(chances<0) { chances=0; gameover(); } ball_x=315; ball_y=150; dir=d; ball_xvar=0; ball_yvar=2; } switch(dir) { case d: dcheck(); break; case dr: if(ball_x>=622) dr_(); dcheck(); break; case dl: if(ball_x<=0) dl_(); dcheck(); break; case ur: if(ball_x>=622) { ball_xvar=-(ball_xvar); ball_yvar=ball_yvar; dir=ul; } if(ball_y<=40) uru(); break; case ul: if(ball_x<=0) uls(); if(ball_y<=40) ulu(); break; case u: if(ball_y<=40) u_(); break; } delay(del); display(); } } void blockcheck(int y) { temp=(int)ball_x/42; if(act_d[temp][y]==1) { act_d[temp][y]=0; sound(750); delay(25); nosound(); if(dir==ur) uru(); else if(dir==ul) ulu(); else if(dir==u) u_(); } } void uls() { ball_xvar=-(ball_xvar); ball_yvar=(ball_yvar); dir=ur; } void dl_() { ball_xvar=-(ball_xvar); ball_yvar=ball_yvar; dir=dr; } void dr_() { ball_xvar=-(ball_xvar); ball_yvar=ball_yvar; dir=dl; } void uru() { ball_xvar=ball_xvar; ball_yvar=-(ball_yvar); dir=dr; } void ulu() { ball_xvar=ball_xvar; ball_yvar=-(ball_yvar); dir=dl; } void u_() { ball_xvar=ball_xvar; ball_yvar=-(ball_yvar); dir=d; } void dcheck() { if(ball_y>392 && ball_y<400) { if(ball_x>=spos && ball_x<=(spos+80)) { if(ball_x<=(spos+38)) { if(ball_x<=(spos+5)) ball_yvar=-1; if(ball_x>(spos+5) && ball_x<=(spos+15)) ball_yvar=-3; if(ball_x>(spos+15) && ball_x<=(spos+25)) ball_yvar=-5; if(ball_x>(spos+25) && ball_x<=(spos+38)) ball_yvar=-7; ball_xvar=-4; dir=ul; } else if(ball_x>=(spos+42)) { if(ball_x<=(spos+50)) ball_yvar=-7; if(ball_x>(spos+50) && ball_x<=(spos+65)) ball_yvar=-5; if(ball_x>(spos+65) && ball_x<=(spos+75)) ball_yvar=-3; if(ball_x>(spos+75) && ball_x<=(spos+80)) ball_yvar=-1; ball_xvar=4; dir=ur; } else { ball_xvar=0; ball_yvar=-4; dir=u; } } } } void display() { for(loop=0;loop<5;loop++) { for(loop1=0;loop1<15;loop1++) { if(act_d[loop1][loop]==1) { switch(color_d[loop1][loop]) { case 0: putimage(loop1*42,(loop*15)+40,blue,0); break; case 1: putimage(loop1*42,(loop*15)+40,yellow,0); break; case 2: putimage(loop1*42,(loop*15)+40,red,0); break; case 3: putimage(loop1*42,(loop*15)+40,green,0); break; } } else if(act_d[loop1][loop]<=0 && act_d[loop1][loop]>=-15) { setcolor(0); setfillstyle(1,0); bar(loop1*42,(loop*15)+40,(loop1*42)+40,(loop*15)+53); act_d[loop1][loop]--; } } } setfillstyle(1,0); bar(0,400,getmaxx(),410); putimage(spos,400,slide,OR_PUT); putimage(ball_prevx,ball_prevy,ball,XOR_PUT); putimage(ball_x,ball_y,ball,OR_PUT); ball_prevx=ball_x; ball_prevy=ball_y; } void gameover() { free(blue); free(yellow); free(red); free(green); free(ball); free(eball); free(slide); setvect(0x08,old); setvect(0x09,okey); i.x.ax=31; int86(0x33,&i,&i); closegraph(); textcolor(RED); if(win) { gotoxy(37,11); printf("You Win"); } gotoxy(35,12); printf("/"); gotoxy(45,12); printf("\\"); gotoxy(36,13); printf("Game Over"); gotoxy(35,14); printf("\\"); gotoxy(45,14); printf("/"); exit(0); } void gameovercheck() { temp=0; for(loop=0;loop<15;loop++) { for(loop1=0;loop1<5;loop1++) { if(act_d[loop][loop1]==1) { temp++; } } } score=75-temp; if(!temp) { win=1; gameover(); } } void setimages() { int gd=DETECT,gm; int poly[8]; int area; initgraph(&gd,&gm,""); getpalette(&p); //blue setrgbpalette(p.colors[1],0,20,50); setrgbpalette(p.colors[2],0,25,50); setrgbpalette(p.colors[3],0,30,50); //yellow setrgbpalette(p.colors[4],35,35,0); setrgbpalette(p.colors[5],40,40,0); setrgbpalette(p.colors[6],45,45,0); //red setrgbpalette(p.colors[7],20,0,0); setrgbpalette(p.colors[8],25,0,0); setrgbpalette(p.colors[9],30,0,0); //green setrgbpalette(p.colors[10],0,25,0); setrgbpalette(p.colors[11],0,30,0); setrgbpalette(p.colors[12],0,35,0); //grey setrgbpalette(p.colors[13],25,25,25); setrgbpalette(p.colors[14],30,30,30); area=imagesize(0,0,40,13); blue=malloc(area); yellow=malloc(area); red=malloc(area); green=malloc(area); for(loop=0;loop<4;loop++) { setfillstyle(1,2+(loop*3)); bar(0,0,40,13); setcolor(1+(loop*3)); setfillstyle(1,1+(loop*3)); poly[0]=0;poly[1]=0;poly[2]=2; poly[3]=2; poly[4]=2;poly[5]=11;poly[6]=0; poly[7]=13; fillpoly(4,poly); poly[0]=0;poly[1]=0;poly[2]=40;poly[3]=0; poly[4]=38;poly[5]=2;poly[6]=2; poly[7]=2; fillpoly(4,poly); setcolor(3+(loop*3)); setfillstyle(1,3+(loop*3)); poly[0]=40;poly[1]=0;poly[2]=40;poly[3]=13; poly[4]=38;poly[5]=11;poly[6]=38;poly[7]=2; fillpoly(4,poly); poly[0]=0;poly[1]=13;poly[2]=2; poly[3]=11; poly[4]=38;poly[5]=11;poly[6]=40;poly[7]=13; fillpoly(4,poly); switch(loop) { case 0: getimage(0,0,40,13,blue); break; case 1: getimage(0,0,40,13,yellow); break; case 2: getimage(0,0,40,13,red); break; case 3: getimage(0,0,40,13,green); break; } } setcolor(13); setfillstyle(1,13); poly[0]=0;poly[1]=0;poly[2]=5;poly[3]=5; poly[4]=75;poly[5]=5;poly[6]=80;poly[7]=0; fillpoly(4,poly); poly[0]=0;poly[1]=0;poly[2]=0;poly[3]=10; poly[4]=5;poly[5]=5; fillpoly(3,poly); setcolor(14); setfillstyle(1,14); poly[0]=0;poly[1]=10;poly[2]=5;poly[3]=5; poly[4]=75;poly[5]=5;poly[6]=80;poly[7]=10; fillpoly(4,poly); poly[0]=80;poly[1]=0;poly[2]=80;poly[3]=10; poly[4]=75;poly[5]=5; fillpoly(3,poly); area=imagesize(0,0,80,10); slide=malloc(area); getimage(0,0,80,10,slide); setcolor(15); setfillstyle(1,15); pieslice(4,30,0,360,4); area=imagesize(0,0,8,8); ball=malloc(area); eball=malloc(area); getimage(0,26,8,34,ball); getimage(200,326,208,324,eball); for(loop=0;loop<5;loop++) { for(loop1=0;loop1<15;loop1++) { rnd=random(4); color_d[loop1][loop]=rnd; act_d[loop1][loop]=1; } } cleardevice(); } void interrupt new() { (*old)(); i.x.ax=0x03; int86(0x33,&i,&i); spos=i.x.cx; if((i.x.bx&1)==1) gameover(); } void interrupt nkey() { int x; x=inportb(0x60); if(x==12 || x==74) del+=10; if(x==13 || x==78) del-=10; if(del<0) del=0; outportb(0x20,0x20); (*okey)(); }