home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a079 / 1.img / FPDG.LZH / VOL2NUM0 / MBOUNCE / MBOUNCE.PRG < prev   
Encoding:
Text File  |  1992-07-27  |  4.4 KB  |  140 lines

  1. ***************************************************************
  2. *     * 07/28/92           MBOUNCE.PRG                9:15:02 *
  3. ***************************************************************
  4. *     * Author's Name: Jeb Long                               *
  5. *     *                                                       *
  6. *     * Description:                                          *
  7. *     * This program illustrates MOVE and INKEY() to          *
  8. *     *  capture mouse strokes                                *
  9. ***************************************************************
  10. SET TALK OFF
  11.  
  12. ***************************************************************
  13. * Get old top score
  14. IF FILE("MBOUNCE.MEM")
  15.      RESTORE FROM MBOUNCE
  16. ELSE
  17.     TOPSCORE = 0     
  18. ENDIF
  19.  
  20. ***************************************************************
  21. *  Initialize 
  22. =RAND(-1)
  23. CLEAR
  24. DECLARE WINDOWS[20], WINDEX[20]
  25. FOR I = 1 TO 20    && Create window names
  26.     STORE "W"+LTRIM(STR(I)) TO WINDOWS[I]
  27. ENDFOR
  28. DontStop = .T.
  29. ON ESCAPE DontStop=.F.
  30. Score = 0
  31. StopTime = SECONDS() + 60
  32. ***************************************************************
  33. *  Start the game
  34. DO WHILE DontStop .AND. SECONDS() < StopTime
  35.     DO MakeWindow
  36.     FOR I = 1 TO 20
  37.         IF WINDEX[I] 
  38.             DO Bounce WITH I
  39.         ENDIF
  40.     ENDFOR
  41. ENDDO
  42. DO ENDGAME  && Game's over man --- Print closing screen
  43.  
  44. Safety = SET("SAFETY")  && Save value of SET SAFETY
  45. SET SAFETY OFF
  46. SAVE TO MBOUNCE ALL LIKE TOPSCORE
  47. SET SAFETY &Safety  && Restore original SET SAFETY value
  48. CLEAR ALL
  49. ***************************************************************
  50. *  Make a new window or Destroy old one 20 percent of the time
  51. *
  52. PROCEDURE MakeWindow
  53. IF Rand() < .2
  54.      Wndx = ASCAN( WINDEX, .F. )
  55.      IF Wndx = 0
  56.          Wndx = PickWindow()  && Kill off a random Window
  57.          WINDEX[Wndx] = .F.
  58.          RELEASE WINDOWS WINDOWS[Wndx]
  59.      ELSE
  60.          row1=INT(Rand()*20)
  61.          col1=INT(Rand()*80) 
  62.          DEFINE WINDOW (WINDOWS[Wndx]);
  63.              FROM row1,col1 TO row1+2,col1+3 ;
  64.              COLOR W+/R FILL CHR(176) PANEL
  65.          ACTIVATE WINDOW (WINDOWS[Wndx])
  66.          WINDEX[Wndx] = .T.
  67.      ENDIF
  68. ENDIF     
  69. RETURN
  70. ***************************************************************
  71. * BOUNCE: Move a window
  72. PROCEDURE Bounce
  73. PARAMETER WinIndex
  74. Char = INKEY(.1,"HM")
  75. IF (Char = 27 ) 
  76.       DontStop = .F.
  77. ELSE
  78.     IF Char = 151   && Mouse entry
  79.         InWindow= MWINDOW()
  80.         IF .NOT. EMPTY(InWindow))
  81.              ?? CHR(7)   && Ding
  82.              WAIT "Mouse is in the window" WINDOW NOWAIT
  83.              SCORE = SCORE + 1
  84.              Wndx = ASCAN( WINDOWS, InWindow )
  85.              IF Wndx > 0
  86.                   WINDEX[Wndx] = .F.
  87.                   WOld = WLAST()
  88.                   RELEASE WINDOWS WINDOWS[Wndx]
  89.                   ACTIVATE SCREEN
  90.                   xrow=WLROW(InWindow) && Get left corner of window
  91.                   xcol=WLCOL(InWindow)
  92.                   @ xrow,xcol FILL TO xrow+2,xcol+3 COLOR R/R
  93.                   ACTIVATE WINDOW (WOld)
  94.              ENDIF
  95.          ELSE             
  96.              WAIT "You missed" WINDOW NOWAIT
  97.              SCORE = SCORE - 1
  98.          ENDIF
  99.     ENDIF     
  100. ENDIF
  101. WName = WINDOWS[WinIndex]        
  102. mcol =    IIF(WLCOL(Wname) < 10 ,  5,  ;  
  103.         IIF(WLCOL(Wname) > 70 , -5,  ; 
  104.         IIF(rand()  > .5 ,  5, -5 )))
  105. mrow =    IIF(WLROW(Wname) <  5 ,  4,  ;  
  106.         IIF(WLROW(Wname) > 18 , -4,  ; 
  107.         IIF(rand()  > .5 , 4, -4 )))
  108. MOVE WINDOW (WINDOWS[WinIndex]) BY mrow,mcol
  109. *@ 0,0 FILL TO 13,19 COLOR SCHEME INT(23*rand())+1
  110. RETURN
  111. ***************************************************************
  112. * PickWindow: Pick a window at random and return index
  113. FUNCTION PickWindow
  114. RETURN INT(RAND()*19))+1
  115. ***************************************************************
  116. * End Game: Prints the closing window
  117. **  This screen was created using CREATE SCREEN
  118. *
  119. PROCEDURE EndGame
  120. DEFINE WINDOW endgame ;   
  121.         FROM INT((SROW()-13)/2),INT((SCOL()-50)/2) ;
  122.         TO INT((SROW()-13)/2)+12,INT((SCOL()-50)/2)+49 ;
  123.         SHADOW ;
  124.         PANEL ;
  125.         COLOR SCHEME 7
  126. ENDIF
  127. ACTIVATE WINDOW endgame 
  128. @ 1,18 SAY "GAME OVER!!!!"
  129. @ 3,12 SAY "Your score is: "
  130. @ 3,28 SAY Score PICTURE "@B"
  131. @ 5,9  SAY "The top score is:"
  132. @ 5,28 SAY TopScore PICTURE "@B"
  133. IF TopScore < Score
  134.     @ 8,1 SAY "Congratulations, You have the new TOP SCORE"
  135.     TopScore = Score
  136. ENDIF
  137. =INKEY(10,"H")  && Hide cursor and wait 10 seconds
  138. RELEASE WINDOW ENDGAME
  139. RETURN
  140.