#include
#include
#include
#include
#include
#include
struct but3d
{
int x,y;
}b[80];
struct opt
{
int x,y;
int flag;
int count;
}op[20];
struct dump
{
int sc;
char name[25];
}d[80];
int bricount=0,count=4,dx=10,x=400,y=400,bcnt=14,ii,length=60;
int color,incy=0,fallflag=0,dely=5000,padhit=0;
int
ry=390,rx=425,dy=10,score=0,xb,yb,k=233,level=1,j,l=20,w=10,but,escflag=0;
char s1[10],s[20],ch[1],mx,my,re,open;
int a[80],t,c[80];
int hiscore,opc =4;
char restart();
char openscreen();
main()
{
union REGS i,o;
int gd=DETECT,gm;
char *p1;
/* start();*/
initgraph(&gd,&gm," ");
setcolor(10);
rectangle(10,10,630,410);
open = openscreen();
switch(toupper(open))
{
case 'D' : dely = 1000; break;
case 'N' : dely = 2000; break;
case 'E' : dely = 4000; break;
}
b[1].x=10+2*l;
b[1].y=100;
settextstyle(1,0,3);
sprintf(s1,"Lifes = %d",count);
setcolor(6);
outtextxy(400,450,s1);
sprintf(s,"Score = %d",score);
setcolor(3);
outtextxy(100,450,s);
LEVEL :
settextstyle(0,0,1);
if(level==1)
{
bcnt=63;
mess1();
}
if(level==2)
{
bcnt =60;
mess2();
}
if(level==3)
{
bcnt=72;
mess3();
}
if(level ==4)
{
bcnt = 60;
mess4();
}
paddle(x,y,7,length);
sprintf(ch,"%c",k);
setcolor(12);
outtextxy(rx,ry,ch);
settextstyle(1,0,5);
setcolor(2);
rectangle(95,195,600,260);
rectangle(97,197,598,258);
S:
setcolor(12);
outtextxy(100,200,"Press ( SPACE ) to Play");
flushall();
if(getch()!=32)
goto S;
sprintf(ch,"%c",k);
layer(20,190,610,300);
setcolor(0);
settextstyle(0,0,1);
outtextxy(rx,ry,ch);
setcolor(4);
op[1].y = 150;
op[1].x = b[25].x;
for(t=1;t<=bcnt;t++ ) { a[t]=0; }
while( 1)
{
setcolor(10);
rectangle(10,10,630,410);
if(ry>=y-6-4 ) {
if(rx if(rx>x+length-length/6) dx = 30;
if(rx<=x+length/3&&rx>=x+length/6) dx=-10;
if(rx>=x+length-length/3&&rx<=x+length-length/6) dx=10;
if(rx>x+length/3&&rx<=x+length-length/3) dx = 5;
music(50);
dy = -dy;
music(0);
}
if(ry<=10+6+4 ) {music(50); dy = 10; music(0); }
if(rx>=630-6-10) {music(50); dx = -dx; music(0); }
if(rx<=10+6+4 ) {music(50); dx = -dx; music(0); }
ry= ry+dy;
rx= rx+dx;
sprintf(ch,"%c",k);
setcolor(12);
outtextxy(rx,ry,ch);
delay(dely);
setcolor(0);
outtextxy(rx,ry,ch);
xb=x;yb=y;
if(kbhit())
{
i.h.ah=0;
int86(22,&i,&o);
if(o.h.ah==1) escflag=1;
if(o.h.ah==75) {
music(41);paddle(x,y,0,length);x-=length/2;paddle(x,y,7,length);
music(0); }
if(o.h.ah==77) {
music(41);paddle(x,y,0,length);x+=length/2;paddle(x,y,7,length);
music(0); }
if(o.h.ah==83) {
settextstyle(0,0,2);
setcolor(14);
rectangle(20,195,600,298);
rectangle(22,197,598,300);
setcolor(1);
outtextxy(120,210," ( PAUSE ) " );
outtextxy(50,250," Press Enter Key to Continue ");
while(!kbhit()) ;
layer(20,180,610,310);
}
}
if(fallflag==1)
{
layer(op[1].x,op[1].y,op[1].x+15,op[1].y+11);
op[1].y += 10;
falloption(op[1].x,op[1].y,opc);
if(op[1].y >= y-6-5) fallflag=0;
}
if(op[1].y >= y-6-4)
check_catch_option();
check_died();
if(bricount==bcnt)
{
change_level();
goto LEVEL;
}
check_endgame();
check_hit_brick();
settextstyle(0,0,1);
} /* end of while*/
} /* end of main*/
/* sub functions to check the progress of the game */
check_catch_option()
{
if(op[1].x>x&&op[1].x {
layer(op[1].x,op[1].y,op[1].x+15,op[1].y+11);
paddle(x,y,7,length);
op[1].x=100;
op[1].y =150;
if(bricount<=15) count+=1;
else if(bricount<=30) score+= 100;
else if(bricount<=45) length+=20;
else score += 100;
displaylifes();
displayscore();
}
else if(op[1].xx+length)
{
layer(op[1].x,op[1].y,op[1].x+15,op[1].y+11);
paddle(x,y,7,length);
op[1].flag =0;
op[1].x=100;
op[1].y =150;
}
op[1].flag =0;
}
check_died()
{
if((rxx+length)&&ry >=y-6-4)
{
music(10);
settextstyle(1,0,3);
count=count-1;
displaylifes();
rx=x+25;ry=y-10;
if(x+l+5>= 630 ) rx = 50;
music(0);
}
}
check_endgame()
{
if(count==0||escflag==1||level>4)
{
settextstyle(1,0,5);
layer(11,11,628,405);
music(40);
setcolor(2);
rectangle(95,195,600,298);
rectangle(97,197,598,296);
setcolor(14);
outtextxy(100,200," Game Over");
outtextxy(80,240," Another Game (y / n)");
music(0);
re = restart();
if (re=='Y'||re=='y')
{
restore_defaults();
main();
}
endscreen();
closegraph();
nosound();
exit(0);
}
}
change_level()
{
level+=1;
count+=1;
bricount=0;
length = 50;
rx = x+5;
ry = y-4-6;
settextstyle(1,0,5);
setcolor(2);
rectangle(12,195,624,260);
rectangle(13,196,623,259);
setcolor(14);
outtextxy(40,200," Level is completed");
outtextxy(40,300,"Press Space to Continue");
getch();
layer(11,194,629,400);
}
check_hit_brick()
{
for(j=1;j<=bcnt;j++)
if(rx>=b[j].x-5&&rx<=b[j].x+l&&ry>=b[j].y-10&&ry<=b[j].y+w)
{
setfillstyle(1,0);
bar(b[j].x,b[j].y,b[j].x+l+1,b[j].y+w+1);
if(a[j]==0)
{
music(90);
dy = -dy;
score = score+10;
displayscore();
bricount++;
music(0);
if(bricount<=15) opc =4;
else if(bricount<=30) opc = 2;
else if(bricount<=45) opc =1;
else opc = 12;
if(bricount%5==0&&op[1].flag==0)
{
op[1].flag=1;
fallflag=1;
op[1].y =150;
op[1].x = 100+random(400);
}
}
a[j]=1;
}
}
/* function to create paddle */
paddle(int x,int y,int c,int len)
{
setcolor(c);
rectangle(x,y,x+len,y+5);
rectangle(x+1,y+1,x+len-1,y+4);
rectangle(x+1,y+2,x+len-1,y+3);
line(x,y-1,x+len,y-1);
ellipse(x,y+2,0,360,4,3);
ellipse(x+len,y+2,0,360,4,3);
}
/* functions to create bricks */
mess1()
{
for(j=1;j<=bcnt/3;j++)
{
b[j].y=b[1].y;
button3d(b[j].x,b[j].y,l,w,6);
letter(b[j].x,b[j].y,l,w,3,0);
b[j+1].x=b[j].x+l+5;
}
b[j].x=b[1].x;
for(j=bcnt/3+1;j<=2*bcnt/3;j++)
{
b[j].y=b[1].y+w+5;
button3d(b[j].x,b[j].y,l,w,1);
letter(b[j].x,b[j].y,l,w,4,14);
b[j+1].x=b[j].x+l+5;
}
b[j].x=b[1].x;
for(j=2*bcnt/3+1;j<=bcnt;j++)
{
b[j].y=b[1].y+2*w+10;
button3d(b[j].x,b[j].y,l,w,6);
letter(b[j].x,b[j].y,l,w,5,0);
b[j+1].x=b[j].x+l+5;
}
}
mess2()
{
for(j=1;j<=bcnt/4;j++)
{
b[j].y = 100;
button3d(b[j].x,b[j].y,l,w,8,14);
letter(b[j].x,b[j].y,l,w,6);
b[j+1].x=b[j].x+l+2;
}
b[j].x =200;
for(j=bcnt/4+1;j<=bcnt/2;j++)
{
b[j].y = 100+2*w;
button3d(b[j].x,b[j].y,l,w,4,14);
letter(b[j].x,b[j].y,l,w,6);
b[j+1].x=b[j].x+l+2;
}
b[j].x = 200;
for(j=bcnt/2+1;j<=3*bcnt/4;j++)
{
b[j].y = 100+4*w;
button3d(b[j].x,b[j].y,l,w,1,14);
letter(b[j].x,b[j].y,l,w,6);
b[j+1].x=b[j].x+l+2;
}
b[j].x = b[1].x;
for(j=3*bcnt/4+1;j<=bcnt;j++)
{
b[j].y = 100+6*w;
button3d(b[j].x,b[j].y,l,w,6,14);
letter(b[j].x,b[j].y,l,w,6);
b[j+1].x=b[j].x+l+2;
}
}
mess3()
{
for(j=1;j<=24;j+=1)
{
b[j].y = b[1].y;
button3d(b[j].x,b[j].y,l,w,9);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+l+2;
}
b[j].x=b[1].x;
for(j=25;j<=48;j+=1)
{
b[j].y = b[1].y+w+2;
button3d(b[j].x,b[j].y,l,w,9);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+l+2;
}
b[j].x=b[1].x;
for(j=49;j<=72;j+=1)
{
b[j].y = b[1].y+2*w+4;
button3d(b[j].x,b[j].y,l,w,9);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+l+2;
}
}
mess4()
{
b[j].x =b[1].x;
for(j=1;j<=13;j+=1)
{
b[j].y = 100 - 1;
button3d(b[j].x,b[j].y,l,w,9,14);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+2*l;
}
b[j].x=b[1].x+2*w;
for(j=14;j<=25;j+=1)
{
b[j].y = 100+2*w;
button3d(b[j].x,b[j].y,l,w,9,14);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+2*l;
}
b[j].x=b[1].x+4*w;
for(j=26;j<=36;j+=1)
{
b[j].y = 100+4*w;
button3d(b[j].x,b[j].y,l,w,9,14);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+2*l;
}
b[j].x=b[1].x+6*w;
for(j=37;j<=46;j+=1)
{
b[j].y = 100 + 6*w;
button3d(b[j].x,b[j].y,l,w,9,14);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+2*l;
}
b[j].x = b[1].x + 8*w;
for(j=47;j<=55;j++)
{
b[j].y = 100 + 8*w ;
button3d(b[j].x,b[j].y,l,w,9,14);
letter(b[j].x,b[j].y,l,w,1);
b[j+1].x=b[j].x+2*l;
}
}
/* function to clear a layer */
layer(int x1,int y1,int x2,int y2)
{
setfillstyle(1,0);
bar(x1,y1,x2,y2);
}
/* functon to produce various sounds */
music(int opt)
{
int a;
if(opt==0) nosound();
/* for(a=1;a<=opt;a++)
{
sound(5+2*opt);
delay(10);
} */
}
char openscreen()
{
char reply;
layer(11,11,629,399);
settextstyle(0,0,1);
setcolor(12);
outtextxy(300,0,"DJ-BALL");
settextstyle(4,0,3);
setcolor(2);
outtextxy(31,14*7," Use Left and Right arrows to move your
Paddle.");
outtextxy(31,17*7," You will lose a life when the ball touch the
");
outtextxy(31,20*7," ground. For each brick you will get 10
points.");
outtextxy(31,23*7," if all the bricks are over in each level
you");
outtextxy(31,26*7," will get a bonus life.
");
line(10,26*10,630,26*10);
setcolor(4);
settextstyle(1,0,3);
outtextxy(31,29*10," SELECT LEVEL ");
outtextxy(31,33*10," (D)ifficult ");
outtextxy(31,35*10," (N)ormal ");
outtextxy(31,37*10," (E)asy ");
reply = getch();
layer(11,11,629,399);
return(reply);
}
/* function for option falling */
falloption(int x,int y,int c)
{
button3d(x,y,10,10,c);
letter(x,y,10,10,'+',0);
delay(1000);
}
endscreen()
{
}
restore_defaults()
{
bricount=0;count=4;dx=10;x=400;y=400;bcnt=14;padhit=0;
ry=390;rx=425;dy=10;score=0;k=233;level=1;l=20;w=10;escflag=0;
length=50;
}
char restart()
{
return(getch());
}
/* function to create a single brick */
button3d(int x,int y,int l,int w,int c)
{
setcolor(LIGHTGRAY);
setfillstyle(1,c);
bar(x,y,x+l,y+w);
setcolor(WHITE);
line(x,y,x+l,y);
line(x,y,x,y+w);
setcolor(DARKGRAY);
line(x+l+1,y,x+l+1,y+w+1);
line(x,y+w+1,x+l+1,y+w+1);
}
/* function to display symbol on brick */
letter(int x,int y,int l,int w,int ch,int c)
{
char s[1];
setcolor(c);
sprintf(s,"%c",ch);
outtextxy(x + l/4 + 2,y + w/5, s);
}
displaylifes()
{
settextstyle(1,0,3);
setcolor(0);
outtextxy(400,450,s1);
sprintf(s1,"Lifes = %d",count);
setcolor(6);
outtextxy(400,450,s1);
}
displayscore()
{
settextstyle(1,0,3);
setcolor(0);
outtextxy(100,450,s);
sprintf(s,"Score = %d",score);
setcolor(3);
outtextxy(100,450,s);
}