Monday, April 2, 2012

Balloon Shooting - A Game ( Mini Project )

Balloon Shooting - A Game ( Mini Project )

# 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();
}

No comments:

Post a Comment