/*
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)();
}
               (
geocities.com/ecma_ver1)