home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / COMPUSCI / CENVIW.ZIP / PONGTIME.CMM < prev    next >
Text File  |  1993-12-07  |  3KB  |  87 lines

  1. /*************************************************************
  2.  *** PongTime - Make a bouncy clock. Randomize speed after ***
  3.  ***            each bounce, within limites                ***
  4.  *************************************************************/
  5.  
  6. #define  COL_AVERAGE_MOVE  3           // average column movement
  7. #define  ROW_AVERAGE_MOVE  3           // average row movement
  8. #define  COL_RANDOM_DELTA  1           // allowed change from average move to
  9. #define  ROW_RANDOM_DELTA  1           // randomize the bounces
  10.  
  11.  
  12. #include <WinUtil.lib>  // Lots of useful routines
  13. #include <Message.lib>  // Send messages to windows
  14.  
  15. window = spawn(P_NOWAIT,"CLOCK.EXE");
  16. if ( window != NULL ) {
  17.  
  18.    // Get size of the screen
  19.    ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
  20.    ScreenHeight = GetSystemMetrics(SM_CYSCREEN);
  21.  
  22.    // will make window fill 1/4 of the screen height
  23.    WinWidth = WinHeight = ScreenHeight / 4;
  24.  
  25.    // Get Initial position of the window
  26.    WindowCol = GetWindowRect(window).left;
  27.    WindowRow = GetWindowRect(window).top;
  28.  
  29.    // determine maximum and minimum values for Col and Row before bouncing
  30.    MinCol = 0;
  31.    MinRow = 0;
  32.    MaxCol = ScreenWidth - WinWidth;
  33.    MaxRow = ScreenHeight - WinHeight;
  34.  
  35.    // start random direction and delta
  36.    srand();
  37.    ColSpeed = GetRandomSpeed(COL_AVERAGE_MOVE,COL_RANDOM_DELTA,rand() & 1);
  38.    RowSpeed = GetRandomSpeed(ROW_AVERAGE_MOVE,ROW_RANDOM_DELTA,rand() & 1);
  39.  
  40.    // Finally, keep bouncing the window around at every interval
  41.    while ( IsWindow(window) ) {
  42.  
  43.       // move window to new Row and Col position
  44.       MoveWindow(window,WindowCol += ColSpeed,WindowRow += RowSpeed,
  45.                  WinWidth,WinHeight,TRUE);
  46.  
  47.       // check if needs to bounce back to to hitting desktop edge
  48.       if ( ColSpeed < 0 ) {
  49.          if ( WindowCol < MinCol )
  50.             ColSpeed = GetRandomSpeed(COL_AVERAGE_MOVE,COL_RANDOM_DELTA,TRUE);
  51.       } else {
  52.          if ( MaxCol < WindowCol )
  53.             ColSpeed = GetRandomSpeed(COL_AVERAGE_MOVE,COL_RANDOM_DELTA,FALSE);
  54.       }
  55.       if ( RowSpeed < 0 ) {
  56.          if ( WindowRow < MinRow )
  57.             RowSpeed = GetRandomSpeed(ROW_AVERAGE_MOVE,ROW_RANDOM_DELTA,TRUE);
  58.       } else {
  59.          if ( MaxRow < WindowRow )
  60.             RowSpeed = GetRandomSpeed(ROW_AVERAGE_MOVE,ROW_RANDOM_DELTA,FALSE);
  61.       }
  62.  
  63.    }
  64.  
  65. }
  66.  
  67.  
  68.  
  69. //****** ROUTINES CALLED BY THE ABOVE CODE *******
  70.  
  71. GetRandomSpeed(average,deviation,positive) // if not positive then negative
  72. {
  73.    // get a random deviation from average
  74.    deviate = (rand() % (2*deviation + 1)) - deviation;
  75.  
  76.    if ( positive )
  77.       return( average + deviate );
  78.    else
  79.       return( -average - deviate );
  80. }
  81.  
  82. IsWindow(WindowHandle)
  83. {
  84.    return DynamicLink("USER","ISWINDOW",SWORD16,PASCAL,WindowHandle);
  85. }
  86.  
  87.