home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xlibo2.zip / DEMO.C < prev    next >
Text File  |  1993-09-18  |  3KB  |  139 lines

  1. #define NUM 9
  2. #include <os2.h>
  3. #include "xlibos2.h"
  4.  
  5.  
  6. struct POS
  7. {
  8.     int x, y;
  9. };
  10.  
  11. struct MY_DEMO
  12. {
  13.     struct POS pos;
  14.     int spx, spy;
  15.     char xdir, ydir;
  16. };
  17.  
  18.  
  19. void iSprites( struct MY_DEMO *spr, char number )
  20. {
  21.     char i;
  22.  
  23.     for( i = 0; i < number; i++ )
  24.     {
  25.         spr[i].pos.x = rand() % 300;
  26.         spr[i].pos.y = rand() % 200;
  27.         spr[i].spx = (rand() % 6) + 1;
  28.         spr[i].spy = (rand() % 6) + 1;
  29.         spr[i].xdir = 1;
  30.         spr[i].ydir = 1;
  31.     }
  32. }
  33.  
  34. void uSprite( struct MY_DEMO *spr )
  35. {
  36.     if( spr->xdir == 1 )
  37.     {
  38.         spr->pos.x = spr->pos.x + spr->spx;
  39.     }
  40.     else
  41.     {
  42.         spr->pos.x = spr->pos.x - spr->spx;
  43.     }
  44.     if( spr->ydir == 1 )
  45.     {
  46.         spr->pos.y = spr->pos.y + spr->spx;
  47.     }
  48.     else
  49.     {
  50.         spr->pos.y = spr->pos.y - spr->spx;
  51.     }
  52.  
  53.     if( spr->pos.x > 290 )
  54.     {
  55.         spr->xdir = 0;
  56.     }
  57.     if( spr->pos.x < 10 )
  58.     {
  59.         spr->xdir = 1;
  60.     }
  61.     if( spr->pos.y > 210 )
  62.     {
  63.         spr->ydir = 0;
  64.     }
  65.     if( spr->pos.y < 10 )
  66.     {
  67.         spr->ydir = 1;
  68.     }
  69. }
  70.  
  71. void main( int argc, char *argv[], char *envp[] )
  72. {
  73.     int i;
  74.     int x = 0;
  75.     struct IMAGE_TABLE MySprite;
  76.     struct POS EraseQueue[NUM];
  77.     struct MY_DEMO sprite[NUM];
  78.     struct PAGE_TABLE pageTable;
  79.     CHAR Apage = 1, Vpage = 0;
  80.  
  81.  
  82.  
  83.     InitModeX( &pageTable );
  84.     iSprites( sprite, NUM );
  85.     XCLoadImage( "demo.obv", &MySprite );
  86.     XCls( 0 );
  87.  
  88.     for ( i = 0; i < 255; i++ )
  89.     {
  90.         XBoxAt( 0, 0, rand() % 300, rand() % 200, rand() % (i + 1) );
  91.         XWaitRetrace();
  92.     }
  93.  
  94.     XLoadCel( "grantp.cel", pageTable.p[0] );
  95.     XCopyFromPageToPage( 0, 0, 0, 320, 340, 1, 0, 0 );
  96.     XCopyFromPageToPage( 1, 0, 0, 320, 340, 2, 0, 0 );
  97.  
  98.     for( i = 0; i < NUM; i++ )
  99.     {
  100.         XCBltImage( sprite[i].pos.x, sprite[i].pos.y, &MySprite );
  101.     }
  102.  
  103.     for( i = 0; i < NUM; i++ )
  104.     {
  105.         EraseQueue[i] = sprite[i].pos;
  106.     }
  107.  
  108.  
  109.     while( !_kbhit() )
  110.     {
  111.         Apage++;
  112.         Vpage++;
  113.         XSetActivePage( Apage & 0x01 );
  114.         XSetVisualPage( Vpage & 0x01 );
  115.  
  116.         for( i = 0; i < NUM; i++ )
  117.         {
  118.             XCopyFromPageToPage( 2, EraseQueue[i].x,
  119.                                     EraseQueue[i].y, 20, 16, Apage & 0x01,
  120.                                     EraseQueue[i].x, EraseQueue[i].y );
  121.         }
  122.         for( i = 0; i < NUM; i++ )
  123.         {
  124.             EraseQueue[i] = sprite[i].pos;
  125.         }
  126.         for( i = 0; i < NUM; i++ )
  127.         {
  128.             uSprite( &sprite[i] );
  129.         }
  130.         for( i = 0; i < NUM; i++ )
  131.         {
  132.             XCBltImage( sprite[i].pos.x, sprite[i].pos.y, &MySprite );
  133.         }
  134.     }
  135.  
  136.     CloseModeX();
  137. }
  138.  
  139.