/* ============================================================================== WordUp Graphics Toolkit Version 5.0 Demonstration Program 22 This is a small program 'template' to help you get started with the sprite library. *** PROJECT *** This program requires the files WSPR_WC.LIB and WGT5_WC.LIB to be linked. *** DATA FILES *** Make sure that INVADER.SPR is in your executable directory. WATCOM C++ VERSION ============================================================================== */ #include #include #include #include #include #include #include color palette[256]; block sprites[20]; int quit; /* if quit !=0, program quits */ int oldmode; void looper (void); /* a routine which controls the sprites */ void main (void) { if ( !vgadetected () ) { printf("Error - VGA card required for any WGT program.\n"); exit (0); } printf ("WGT Example #22\n\n"); printf ("Sprite movement and animation is demonstrated in this short demo.\n"); printf ("Press any key to end the program. Try inserting a delay to slow down the\n"); printf ("animation.\n"); printf ("\n\nPress any key to continue.\n"); getch (); oldmode = wgetmode(); vga256 (); wloadsprites (palette, "invader.spr", sprites, 0, 19); /* load first 50 sprites */ wsetpalette (0, 255, palette); initialize_sprites (sprites); /* initialize them */ maxsprite = 2; /* number of sprites on */ /* Spriteon has the following format: Sprite number, x coord, y coord, sprite number in array of sprites Therefore sprite #1 would be displayed at 160,100 with sprite 1 in the array */ spriteon (0, 160, 100, 1); /* turn on any sprites */ spriteon (1, 10, 100, 3); /* you need */ /* This move will go left 1, for 300 times, and right 1 for 300 times, and repeat */ movex (1, "(1,300,0)(-1,300,0)R"); /* set up any movement */ movexon (1); /* or animation needed */ /* This animation will animate sprite 2 through a sequence of sprites in the sprite array and keep repeating. */ animate (1, "(3,50)(4,50)(5,50)(4,50)R"); animon (1); minit (); do { looper (); } while (!quit); getch (); mdeinit (); /* Deinitialize the mouse handler */ spriteoff (0); /* turn off sprites */ spriteoff (1); /* To be safe, turn off all sprites before ending program. This will free any memory used from them. */ deinitialize_sprites (); wfreesprites (sprites, 0, 19); /* free memory */ wsetmode (oldmode); } void looper(void) { erase_sprites (); /* clear the sprites */ s[0].x = mouse.mx; /* any direct sprite movements must be placed */ s[0].y = mouse.my; /* between erasespr and drawspr */ /* This will set sprite one's coordinate to the mouse coordinates. Move it around! */ /* notice how sprite #2 moves and animates on its own now! You don't need to change anything to make it move! */ wretrace (); draw_sprites (1); /* draw them back on */ if (kbhit ()) quit = 1; }