home *** CD-ROM | disk | FTP | other *** search
- ***************************************************************
- * * 07/28/92 MBOUNCE.PRG 9:15:02 *
- ***************************************************************
- * * Author's Name: Jeb Long *
- * * *
- * * Description: *
- * * This program illustrates MOVE and INKEY() to *
- * * capture mouse strokes *
- ***************************************************************
- SET TALK OFF
-
- ***************************************************************
- * Get old top score
- IF FILE("MBOUNCE.MEM")
- RESTORE FROM MBOUNCE
- ELSE
- TOPSCORE = 0
- ENDIF
-
- ***************************************************************
- * Initialize
- =RAND(-1)
- CLEAR
- DECLARE WINDOWS[20], WINDEX[20]
- FOR I = 1 TO 20 && Create window names
- STORE "W"+LTRIM(STR(I)) TO WINDOWS[I]
- ENDFOR
- DontStop = .T.
- ON ESCAPE DontStop=.F.
- Score = 0
- StopTime = SECONDS() + 60
- ***************************************************************
- * Start the game
- DO WHILE DontStop .AND. SECONDS() < StopTime
- DO MakeWindow
- FOR I = 1 TO 20
- IF WINDEX[I]
- DO Bounce WITH I
- ENDIF
- ENDFOR
- ENDDO
- DO ENDGAME && Game's over man --- Print closing screen
-
- Safety = SET("SAFETY") && Save value of SET SAFETY
- SET SAFETY OFF
- SAVE TO MBOUNCE ALL LIKE TOPSCORE
- SET SAFETY &Safety && Restore original SET SAFETY value
- CLEAR ALL
- ***************************************************************
- * Make a new window or Destroy old one 20 percent of the time
- *
- PROCEDURE MakeWindow
- IF Rand() < .2
- Wndx = ASCAN( WINDEX, .F. )
- IF Wndx = 0
- Wndx = PickWindow() && Kill off a random Window
- WINDEX[Wndx] = .F.
- RELEASE WINDOWS WINDOWS[Wndx]
- ELSE
- row1=INT(Rand()*20)
- col1=INT(Rand()*80)
- DEFINE WINDOW (WINDOWS[Wndx]);
- FROM row1,col1 TO row1+2,col1+3 ;
- COLOR W+/R FILL CHR(176) PANEL
- ACTIVATE WINDOW (WINDOWS[Wndx])
- WINDEX[Wndx] = .T.
- ENDIF
- ENDIF
- RETURN
- ***************************************************************
- * BOUNCE: Move a window
- PROCEDURE Bounce
- PARAMETER WinIndex
- Char = INKEY(.1,"HM")
- IF (Char = 27 )
- DontStop = .F.
- ELSE
- IF Char = 151 && Mouse entry
- InWindow= MWINDOW()
- IF .NOT. EMPTY(InWindow))
- ?? CHR(7) && Ding
- WAIT "Mouse is in the window" WINDOW NOWAIT
- SCORE = SCORE + 1
- Wndx = ASCAN( WINDOWS, InWindow )
- IF Wndx > 0
- WINDEX[Wndx] = .F.
- WOld = WLAST()
- RELEASE WINDOWS WINDOWS[Wndx]
- ACTIVATE SCREEN
- xrow=WLROW(InWindow) && Get left corner of window
- xcol=WLCOL(InWindow)
- @ xrow,xcol FILL TO xrow+2,xcol+3 COLOR R/R
- ACTIVATE WINDOW (WOld)
- ENDIF
- ELSE
- WAIT "You missed" WINDOW NOWAIT
- SCORE = SCORE - 1
- ENDIF
- ENDIF
- ENDIF
- WName = WINDOWS[WinIndex]
- mcol = IIF(WLCOL(Wname) < 10 , 5, ;
- IIF(WLCOL(Wname) > 70 , -5, ;
- IIF(rand() > .5 , 5, -5 )))
- mrow = IIF(WLROW(Wname) < 5 , 4, ;
- IIF(WLROW(Wname) > 18 , -4, ;
- IIF(rand() > .5 , 4, -4 )))
- MOVE WINDOW (WINDOWS[WinIndex]) BY mrow,mcol
- *@ 0,0 FILL TO 13,19 COLOR SCHEME INT(23*rand())+1
- RETURN
- ***************************************************************
- * PickWindow: Pick a window at random and return index
- FUNCTION PickWindow
- RETURN INT(RAND()*19))+1
- ***************************************************************
- * End Game: Prints the closing window
- ** This screen was created using CREATE SCREEN
- *
- PROCEDURE EndGame
- DEFINE WINDOW endgame ;
- FROM INT((SROW()-13)/2),INT((SCOL()-50)/2) ;
- TO INT((SROW()-13)/2)+12,INT((SCOL()-50)/2)+49 ;
- SHADOW ;
- PANEL ;
- COLOR SCHEME 7
- ENDIF
- ACTIVATE WINDOW endgame
- @ 1,18 SAY "GAME OVER!!!!"
- @ 3,12 SAY "Your score is: "
- @ 3,28 SAY Score PICTURE "@B"
- @ 5,9 SAY "The top score is:"
- @ 5,28 SAY TopScore PICTURE "@B"
- IF TopScore < Score
- @ 8,1 SAY "Congratulations, You have the new TOP SCORE"
- TopScore = Score
- ENDIF
- =INKEY(10,"H") && Hide cursor and wait 10 seconds
- RELEASE WINDOW ENDGAME
- RETURN
-