home *** CD-ROM | disk | FTP | other *** search
- #include <alloc.h>
- #include <stdio.h>
- #include <conio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <wgt.h>
- #include <spr.h>
-
- /* WORDUP Graphics Toolkit Version 3.5
- Demonstration program 20
-
- This program uses the same sprites as last time but
- this time in a shoot-em-up game.
-
-
- */
-
- // Large example demonstrating many functions from WGT
-
- void scrolldown(void); // scroll the screen down
- void credits(void);
- void changepalette256(void);
- void l(void);
-
-
- block scr,scr2;
- block sprites[1001];
-
- int shoot[10],sx[10],sy[10];
-
- int cd;
- int i,scrll=1; // scrll is ctr for offset
- int ix=30,iy=0,ix2=250,iy2=199; // coords of scrolling area
- int speed=-1; // the scrolling speed
- // try changing speed and sign
- color palette[256];
-
-
- void main(void)
- {
- vga256(); // init
- minit();
- moff();
- wsetpalette(0,255,&palette);
- credits();
- wloadsprites(&palette,"space.spr",sprites); // load sprites
-
- scr=wnewblock(0,0,319,199); // get two virtual screens
- scr2=wnewblock(0,0,319,199);
- wsetscreen(scr2); // go to second one
- wcls(0); // clear it
- for (i=1; i<300; i++) // put some stars on (small)
- wputblock(rand() % 320,rand() % 200,sprites[3],0); // sprite[3] is small stars
-
- for (i=1; i<5; i++)
- wputblock(rand() % 320,rand() % 200,sprites[4],0); // sprite[4] is large ones
-
- wnormscreen(); // go back to normal screen
- wcls(0); // clear it
- wbutt(0,0,29,199); // make some side panels
- wbutt(252,0,319,199);
- my=0;
- wsetscreen(scr); // go to first screen
- noclick();
- speed=-1;
- do {
- mread(); // read mouse
-
- scrolldown(); // scroll the second
- // screen by copying it to
- // a different offset on
- // screen one
-
- if (but==1) { // if you clicked the mouse
- i=0; // set counter to 0
- do {
- if (shoot[i]==0) // check to see if slot available
- {
- sound(100); // yes, then make a sound
- shoot[i]=1; // make it unavailable
- sx[i]=mx+7; // set coords for shot
- sy[i]=my-7;
- i=9; // end the loop
- }
- i++; // otherwise look at the next slot
- } while (i<9); // can shoot 9 at once
- }
-
- for (i=0; i<9; i++) // if shot is active
- {
- if (shoot[i]==1) // then show the sprite
- {
- wputblock(sx[i],sy[i],sprites[2],0); // at the right coords
- sy[i]-=6; // make it go up
- if (sy[i]<1) // if it is at top,
- shoot[i]=0; // make it available again
- }
- }
- wcopyscreen(ix,iy,ix2,iy2,scr,ix,iy,NULL); // copy the first screen
- // to the base screen
- nosound();
- } while (!kbhit()); // until right button is pressed
- wfreeblock(scr);
- wfreeblock(scr2);
- wfreesprites(sprites);
- textmode(C80);
- }
-
-
-
- void scrolldown(void)
- {
- // With a bit of work, you could make this routine scroll in
- // four directions and make new graphics come on as it scrolls!
- // Of course, we've already gone and done that for you! Check out wgt4scr.lib
- wcopyscreen(ix,scrll,ix2,iy2,scr2,ix,iy,scr); // You may understand
- wcopyscreen(ix,iy,ix2,scrll,scr2,ix,iy2-scrll,scr); // this if you think
- // hard enough!
- // Don't worry about
- // it for now!
- wputblock(mx,my,sprites[1],1);
- scrll+=speed;
- if ((scrll<iy) & (speed<0))
- scrll=iy2+1-abs(scrll);
- if ((scrll>iy2) & (speed>0))
- scrll=abs(iy2-scrll);
- }
-
- void credits(void)
- {
- wnormscreen();
- wtextcolor(1);
- wtextbackground(0);
-
- cd=2;
- // draw a pattern on the screen
- for (i=0; i<320; i++) { l(); wsetcolor(cd); wfline(160,100,i,0); }
- for (i=0; i<200; i++) { l(); wsetcolor(cd); wfline(160,100,319,i);}
- for (i=319; i>=0; i--) { l(); wsetcolor(cd); wfline(160,100,i,199);}
- for (i=199; i>=0; i--) { l(); wsetcolor(cd); wfline(160,100,0,i); }
-
-
- changepalette256();
-
- wouttextxy(50,20,"Shoot 'Em Up Sprite Example",NULL);
- wouttextxy(50,28,"Showing what YOU could do with",NULL);
- wouttextxy(50,36,"the WordUp Graphics Toolkit!",NULL);
- wouttextxy(50,44,"Use mouse to move, button shoots",NULL);
- wouttextxy(50,52,"Press any key to start",NULL);
- wsetrgb(1,63,63,63,&palette);
- wfade_in(0,255,1,palette);
- do {
- wcolrotate(2,255,0,palette);
- } while (!kbhit());
-
- getch();
- wcls(0);
- }
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // change the palette to the right colours
- void changepalette256(void)
- {
- wsetrgb(0,0,0,0,&palette);
-
- for (i=2; i<64; i++)
- wsetrgb(i,i,0,0,&palette);
- for (i=64; i<128; i++)
- wsetrgb(i,127-i,0,0,&palette);
- for (i=128; i<192; i++)
- wsetrgb(i,0,0,i-128,&palette);
- for (i=192; i<256; i++)
- wsetrgb(i,0,0,256-i,&palette);
- wsetrgb(253,60,60,60,&palette);
- wsetrgb(254,45,45,45,&palette);
- wsetrgb(255,30,30,30,&palette);
- wsetrgb(1,63,63,63,&palette);
- // wsetpalette(0,255,palette);
- }
-
- void l(void)
- {
- cd++;
- if (cd>127)
- cd=2;
- }
-