home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / sphinx / examples / vga / pow3.c__ < prev    next >
Encoding:
Text File  |  1993-08-03  |  3.4 KB  |  138 lines

  1. /*
  2.     SPHINX C-- program of POW3
  3. */
  4.  
  5. ? print "Building POW3.COM, the low-res 256 colours, boom program.\n"
  6.  
  7. ?include "KEYCODES.H--"
  8. ?include "VIDEO.H--"
  9. ?include "WRITE.H--"
  10. ?include "RANDOM.H--"
  11. ?include "DOS.H--"
  12.  
  13.  
  14. ?define   DOTS         1000     /* maximum around 6666 or so */
  15. ?define   MAXCHANGE       5
  16. ?define   MINCHANGE       1
  17.  
  18. ?define   CHANGEMOD        MAXCHANGE *2 + 1
  19. ?define   MODCHANGE        CHANGEMOD *2 + 1
  20. ?define   LOCATIONCHANGE   210
  21.  
  22. ?define   STARTX        159
  23. ?define   STARTY         99
  24.  
  25. word x[DOTS],y[DOTS];
  26. int xchange[DOTS],ychange[DOTS];
  27. byte color[DOTS];
  28.  
  29. word startx=STARTX, starty=STARTY;
  30. byte startcolor=15;
  31. byte quit=FALSE;
  32.  
  33.  
  34. main ()
  35. {
  36. @ RANDOMIZE();  /* seed the random number generator with clock tick count */
  37.  
  38. @ SETVIDEOMODE( vid_320x200_256 );  /* attempt to enter video mode */
  39. IF( byte @ GETVIDEOMODE() <> vid_320x200_256 )  /* check current vid mode */
  40.     {WRITESTR("MCGA, VGA or better graphics card required.\n");
  41.     @ EXIT(-1);}
  42.  
  43. ES = 0xA000;
  44.  
  45. DI = 0;
  46. do {SI = DI+DI;
  47.     x[SI] = startx;
  48.     y[SI] = starty;
  49.     xchange[SI] = RAND() % CHANGEMOD - MAXCHANGE;
  50.     ychange[SI] = RAND() % CHANGEMOD - MAXCHANGE;
  51.  
  52.     IF(xchange[SI] == 0)
  53.         IF(ychange[SI] == 0)
  54.             xchange[SI] = MAXCHANGE;
  55.  
  56.     color[DI] = startcolor;
  57.  
  58.     AX = y[SI]*320 + x[SI];
  59.     BX = AX;
  60.     ESBYTE[BX] ^= color[DI];
  61.  
  62.     DI++;
  63.     } while(DI < DOTS);
  64.  
  65. do {
  66.     IF(@ KBHIT())
  67.         IF(@ BIOSREADKEY() == k_esc)
  68.             quit = TRUE;
  69.  
  70.     @ WAITVSYNC();
  71.     DI = 0;
  72.     do {
  73.         SI = DI+DI;
  74.  
  75.         BX = 0;               /* let BX be a flag */
  76.         IF( x[SI] >= 320 )
  77.             BX = 1;
  78.         IF( y[SI] >= 200)
  79.             BX = 1;
  80.         if( BX == 0 )
  81.             {
  82.             AX = y[SI]*320 + x[SI];
  83.             BX = AX;
  84.             ESBYTE[BX] ^= color[DI];
  85.             x[SI] += xchange[SI];
  86.             y[SI] += ychange[SI];
  87.  
  88.             BX = 0;               /* let BX be a flag */
  89.             IF( x[SI] >= 320 )
  90.                 BX = 1;
  91.             IF( y[SI] >= 200)
  92.                 BX = 1;
  93.             IF( BX == 0 )
  94.                 {AX = y[SI]*320 + x[SI];
  95.                 BX = AX;
  96.                 ESBYTE[BX] ^= color[DI];
  97.                 }
  98.             }
  99.         else{
  100.             AX = RAND() % LOCATIONCHANGE;
  101.             IF( AX == 0 )         
  102.                 {startx = RAND() % 300 + 10;
  103.                 starty = RAND() % 180 + 10;
  104.                 startcolor = RAND();   /* allow any colour 0 to 255 */
  105.                 }
  106.             x[SI] = startx;
  107.             y[SI] = starty;
  108.  
  109.             do {
  110.                 xchange[SI] = RAND() % MODCHANGE - MAXCHANGE;
  111.                 ychange[SI] = RAND() % MODCHANGE - MAXCHANGE;
  112.                 BL = 0;
  113.  
  114.                 AX = xchange[SI];
  115.                 IF( AX < 0 )
  116.                     - AX;
  117.                 IF( AX >= MINCHANGE )
  118.                     BL = 1;
  119.                 AX = ychange[SI];
  120.                 IF( AX < 0 )
  121.                     - AX;
  122.                 IF( AX >= MINCHANGE )
  123.                     BL = 1;
  124.                 } while (BL == 0);
  125.  
  126.             color[DI] = startcolor;
  127.             AX = y[SI]*320 + x[SI];
  128.             BX = AX;
  129.             ESBYTE[BX] ^= color[DI];
  130.             }
  131.         DI ++;
  132.         } while( DI < DOTS );
  133.     } while( quit == FALSE);
  134.  
  135. @ SETVIDEOMODE( vid_text80c );
  136. WRITESTR("SPHINX Programming 1992");
  137. }
  138.