# include "graphics.h"
# include "conio.h"
# include "stdio.h"
# include "stdlib.h"
# include "dos.h"
#define ARROW_SIZE 7
#define BALLOON_SIZE 3
int flag_arrow=0,flag_balloon=1,count_arrow=6,count_balloon=10;
void *balloon,*bow,*arrow,*burst;
void *clear_balloon,*clear_burst;
void draw_balloon(int ,int );
void draw_burst ( int x, int y );
void draw_bow(int x,int y);
void draw_arrow(int x, int y);
void shoot(int *x, int *y);
int testkeys();
void fly(int *x, int *y);
void start();
void main()
{
int gmode = DETECT, gdriver , area ;
initgraph ( &gmode, &gdriver, "c:\tc\bgi\" ) ;
setbkcolor(1);
start();
int maxx = getmaxx() ;
int maxy = getmaxy() ;
int p=400,q=300,m=100,n=100,x=m,y=n,key,score=0,finish=0,level=1,l_flag=1;
char score1[5],ch,cnt_ball[5],char_level[2];
rectangle ( 0, 0, maxx, maxy - 10 ) ;
draw_burst(200,300);
area=imagesize(0,0,32,24);
burst=malloc(area);
getimage(200-16,300-12,200+16,300+12,burst);
putimage(200-16,300-12,burst,XOR_PUT);
draw_balloon(p,q);
area=imagesize(p-4*BALLOON_SIZE,q-5*BALLOON_SIZE,p+4*BALLOON_SIZE,q+7*BALLOON_SIZE);
balloon=malloc(area);
getimage(p-4*BALLOON_SIZE,q-5*BALLOON_SIZE,p+4*BALLOON_SIZE,q+7*BALLOON_SIZE,balloon);
putimage(p-4*BALLOON_SIZE, q-5*BALLOON_SIZE, balloon, COPY_PUT);
draw_arrow(x ,y );
area = imagesize(x, y-ARROW_SIZE, x+(6*ARROW_SIZE), y+ARROW_SIZE);
arrow=malloc(area);
getimage(x, y-ARROW_SIZE, x+(6*ARROW_SIZE), y+ARROW_SIZE,arrow);
putimage(x, y-ARROW_SIZE,arrow,XOR_PUT);
draw_bow(x,y);
area=imagesize(x+25,y-65,x+66,y+65);
bow=malloc(area);
getimage(x+25,y-65,x+66,y+65,bow);
if ( balloon == NULL || burst == NULL || bow == NULL )
{
printf( "
Insufficient memory... Press any key " ) ;
getch() ;
closegraph() ;
restorecrtmode() ;
exit( 0 ) ;
}
while (!finish)
{
settextstyle(8,0,1);
setusercharsize(4,4,3,3);
outtextxy(getmaxx()/2-100,5,"LEVEL : ");
itoa(level,char_level,10);
setfillstyle(0,0);
bar(getmaxx()/2+40,15,getmaxx()/2+70,45);
outtextxy(getmaxx()/2+50,5,char_level);
rectangle(5,360,250,460);
if( flag_balloon && count_balloon>0 )
fly( &p, &q );
else
{
q = 400;
flag_balloon = 1;
}
if( kbhit() )
{
key = testkeys();
if(key==77)
flag_arrow = 1;
}
if( key == 27 )
break;
if (key == 80 &&!flag_arrow)
{
x=125;
putimage(x,y-65,bow,XOR_PUT);
if(y<300)
y+=25;
putimage(x,y-65,bow,XOR_PUT);
draw_bow(x-25,y);
key=0;
}
if (key == 72 &&!flag_arrow)
{
x=125;
putimage(x,y-65,bow,XOR_PUT);
if(y>70)
y-=25;
putimage(x,y-65,bow,XOR_PUT);
draw_bow(x-25,y);
key=0;
}
if(count_arrow > 0 && count_balloon > 0)
{
if(score==100 && l_flag==1)
{
level=2;
count_balloon=8;
count_arrow=6;
l_flag=2;
}
if(score==180 && l_flag==2)
{
level=3;
count_balloon=6;
count_arrow=6;
l_flag=0;
}
if( key == 77 || flag_arrow)
{
shoot(&x,&y);
draw_bow(m,y);
if(x>(p-12) && x<(p+12) && y>(q-15) && y<(q+25))
{
putimage(p-16,q-12,burst,COPY_PUT);
sound(1500);
delay(800);
nosound();
putimage(p-16,q-12,burst,XOR_PUT);
count_balloon--;
settextstyle(10,0,1);
setusercharsize(30,70,20,70);
outtextxy(20,380,"BALLOONS LEFT:");
setfillstyle(0,0);
bar(200,370,230,400);
itoa(count_balloon,cnt_ball,10);
outtextxy(200,380,cnt_ball);
flag_balloon=0;
score+=20;
itoa(score,score1,10);
setfillstyle(0,0);
bar(190,getmaxy()-50,230,getmaxy()-30);
setcolor(RED);
outtextxy(20,getmaxy()-50,"SCORE : ");
outtextxy(190,getmaxy()-50,score1);
}
key=0;
}
}
else
{
clearviewport();
setbkcolor(9);
setcolor(10);
settextstyle(4,0,7);
setusercharsize(120,50,120,40);
outtextxy(getmaxx()/2-220,getmaxy()/2-180,"GAME OVER");
settextstyle(8,0,1);
setusercharsize(50,60,40,50);
if(count_arrow<=0)
outtextxy(getmaxx()/2-100,getmaxy()/2-70,"NO MORE ARROWS");
if(count_balloon<=0)
outtextxy(getmaxx()/2-120,getmaxy()/2-70,"NO MORE BALLOONS");
outtextxy(getmaxx()/2-120,getmaxy()/2-20,"YOUR SCORE IS : ");
itoa(score,score1,10);
outtextxy(getmaxx()/2+150,getmaxy()/2-20,score1);
if(level==1)
outtextxy(getmaxx()/2-220,getmaxy()/2+20,"YOU REQUIRE TO PRACTICE MORE");
if(level==2)
outtextxy(getmaxx()/2-70,getmaxy()/2+20,"WELL PLAYED");
if(level==3)
outtextxy(getmaxx()/2-220,getmaxy()/2+20,"YOU ARE AN EFFICIENT SHOOTER");
outtextxy(getmaxx()/2-30,getmaxy()/2+50,"(Q)UIT");
settextstyle(1,0,1);
setusercharsize(30,65,30,60);
while( getch() != 'q');
finish=1;
break;
}
}
free(bow);
free(arrow);
free(balloon);
closegraph();
}
void draw_balloon(int x,int y)
{
setcolor(RED);
setfillstyle(1,RED);
fillellipse(x,y,3*BALLOON_SIZE,4*BALLOON_SIZE);
line(x,y+4*BALLOON_SIZE,x,y+6*BALLOON_SIZE);
}
void draw_burst ( int x, int y )
{
setlinestyle(0,0,1);
line ( x - 16, y - 12, x - 10, y - 2 ) ;
line ( x - 10, y - 2, x - 16, y ) ;
line ( x - 16, y, x - 10, y + 2 ) ;
line ( x - 10, y + 2, x - 16, y + 12 ) ;
line ( x - 16, y + 12, x - 6, y + 2 ) ;
line ( x - 6, y + 2, x, y + 12 ) ;
line ( x, y + 12, x + 6, y + 2 ) ;
line ( x + 6, y + 2, x + 16, y + 12 ) ;
line ( x - 16, y - 12, x - 6, y - 2 ) ;
line ( x - 6, y - 2, x, y - 12 ) ;
line ( x, y - 12, x + 6, y - 2 ) ;
line ( x + 6, y - 2, x + 16, y - 12 ) ;
line ( x + 16, y - 12, x + 10, y - 2 ) ;
line ( x + 10, y - 2, x + 16, y ) ;
line ( x + 16, y, x + 10, y + 2 ) ;
line ( x + 10, y + 2, x + 16, y + 12 ) ;
}
void draw_bow(int x,int y)
{
setcolor(RED);
setlinestyle(0,0,1);
line(x+32,y-49,x+32,y+49);
setlinestyle(0,0,3);
arc(x,y,300,60,60);
arc(x+34,y-56,100,220,6);
arc(x+34,y+56,140,260,6);
}
void shoot(int *x, int *y)
{
char cnt_arrow[5];
putimage(*x, *y-ARROW_SIZE, arrow, COPY_PUT);
delay(3);
putimage(*x, *y-ARROW_SIZE, arrow, XOR_PUT);
*x+=ARROW_SIZE;
if (*x>590)
{
*x=155;
flag_arrow=0;
count_arrow--;
settextstyle(10,0,1);
setusercharsize(30,70,20,70);
outtextxy(20,400,"ARROWS LEFT :");
setfillstyle(0,WHITE);
bar(200,400,220,425);
itoa(count_arrow,cnt_arrow,10);
outtextxy(200,400,cnt_arrow);
}
}
void draw_arrow(int x, int y)
{
setlinestyle(0,0,2);
moveto(x, y);
linerel(6*ARROW_SIZE, 0);
linerel(-2*ARROW_SIZE, -1*ARROW_SIZE+1);
linerel(0, 2*ARROW_SIZE-1);
linerel(2*ARROW_SIZE, -1*ARROW_SIZE);
}
int testkeys()
{
union REGS ii, oo ;
ii.h.ah = 0 ;
int86 ( 22, &ii, &oo ) ;
/* if ascii code is not 0 */
if ( oo.h.al )
return ( oo.h.al ) ; /* return ascii code */
else
return ( oo.h.ah ) ; /* return scan code */
}
void fly(int *x, int *y)
{
int x1;
putimage(*x-4*BALLOON_SIZE, *y-5*BALLOON_SIZE, balloon, COPY_PUT);
delay(20);
char cnt_ball[5];
putimage(*x-4*BALLOON_SIZE, *y-5*BALLOON_SIZE, balloon, XOR_PUT);
*y-=BALLOON_SIZE;
if(*y<= 20)
{
*y=400;
x1=450+rand()%150;
*x=x1;
count_balloon--;
settextstyle(10,0,1);
setusercharsize(30,70,20,70);
outtextxy(20,380,"BALLOONS LEFT:");
setfillstyle(0,0);
bar(200,370,230,400);
itoa(count_balloon,cnt_ball,10);
outtextxy(200,380,cnt_ball);
}
}
void start()
{
setbkcolor(0);
settextstyle(7,0,0);
outtextxy(10,400," PRESS ANY KEY TO CONTINUE....");
settextstyle(1,0,0);
setcolor(4);
setusercharsize(25,15,20,4);
outtextxy(85,120,"BALLOON SHOOTING");
float octave[7] = { 130.81, 146.83, 164.81, 174.61, 196, 220, 246.94
};
while( !kbhit() )
{
sound( octave[ random(7) ]*4 );
delay(300);
}
nosound();
getch();
clearviewport();
rectangle(1,1,638,478);
settextstyle(3,0,1);
setusercharsize(50,30,50,30);
outtextxy(150,10,"INSTRUCTIONS");
setbkcolor(10);
settextstyle(1,0,1);
setusercharsize(40,70,20,20);
outtextxy(10,70,"1. You can play three levels.");
outtextxy(10,110,"2. You can move the bow UP and DOWN with the help of arrow keys.");
outtextxy(10,150,"3. Press right arrow key to shoot the arrow.");
outtextxy(10,190,"4. You score 20 points every time you shoot the balloon.");
outtextxy(10,230,"5. First level has 6 arrows and 10 balloons.");
outtextxy(10,270,"6. You require to score 100 points to enter the second level.");
outtextxy(10,310,"7. Second level has 6 arrows and 8 balloons.");
outtextxy(10,350,"8. You require to score 200 points to enter the third level.");
outtextxy(10,390,"9. Third level has 6 arrows and 6 balloons.");
settextstyle(7,0,1);
outtextxy(150,430,"PRESS ANY KEY TO CONITINUE");
getch();
setusercharsize(1,1,1,1);
settextstyle(0,0,0);
setbkcolor(10);
clearviewport();
}