!#################################
! RAIN.BAS A Typing game
!
! by Dave Heyliger - AMUS Staff
!
! Directions: Select a speed and
! type as the letters "rain"
! before you drown!!!
!
! you will need INKEY.M68[100,52]
!#################################
MAP1 DROP,F !The "letter"
MAP1 COUNT,F !The number of letters raining
MAP1 DROPS(26),F !An array of "letters"
MAP1 COL,F !Where the letter will drop from
MAP1 RAINX(26),F !The X coordinates of the raindrops
MAP1 RAINY(26),F !The Y coordinates of the raindrops
MAP1 KEY,S,1 !The last key you pressed
MAP1 J,F !Various integers
MAP1 X,F
MAP1 I,F
MAP1 WATER'LINE,S,80,"" !The dreaded "water"
MAP1 WATER,F !The location of the "water"
MAP1 SPEED,F !Your selected speed
MAP1 TOTAL,F !The total number of characters "survived"
!--- initialize
!
WATER = 24
PRINT TAB(-1,0);
PRINT TAB(-1,29);
FOR X = 1 TO 79 : WATER'LINE = WATER'LINE + "-" : NEXT X
? TAB(WATER,1) WATER'LINE;
COUNT = 1
TOTAL = 0
RANDOMIZE
TOP:
!--- Create a new "raindrop" and let em fall
!
FOR D = 1 TO SPEED : NEXT D
KEY=""
DROP = INT(65+RND(1)*25)
COL = INT(78*RND(1)+1)
PRINT TAB(1,COL) CHR$(DROP);
RAINY(COUNT)=1
RAINX(COUNT)=COL
DROPS(COUNT) = DROP
COUNT = COUNT + 1
TOTAL = TOTAL + 1
BUMP:
!--- "bump" down the raindrops every pass
!
FOR I= 1 TO 26
IF RAINY(I) > 0 &
THEN PRINT TAB(RAINY(I),RAINX(I)) " ";: &
RAINY(I) = RAINY(I) + 1 :&
PRINT TAB(RAINY(I),RAINX(I)) CHR$(DROPS(I));
NEXT I
GET'KEY:
!--- Get the next key the user enters..
!
XCALL INKEY,KEY
KEY = UCS(KEY)
IF KEY="" THEN GOTO SPLASH
X = 1
CH:
IF X > 26 THEN GOTO SPLASH
IF DROPS(X) <> ASC(KEY) &
THEN X = X + 1 : GOTO CH &
ELSE ? TAB(RAINY(X),RAINX(X)) " ";:&
FOR J = X TO 25 :
RAINY(J) = RAINY(J+1) :&
RAINX(J) = RAINX(J+1) :&
DROPS(J) = DROPS(J+1) :&
NEXT J :&
COUNT = COUNT - 1 :&
RAINY(26) = 0 : RAINX(26) = 0 : DROPS(26) = 0 :&
GOTO CH
SPLASH:
!--- Check for the "splash"
!
IF RAINY(1) <> (WATER - 1) THEN GOTO TOP
? TAB(RAINY(1),RAINX(1)) " ";
FOR J = 1 TO 25 :
RAINY(J) = RAINY(J+1) :&
RAINX(J) = RAINX(J+1) :&
DROPS(J) = DROPS(J+1) :&
NEXT J
COUNT = COUNT - 1
RAINY(26) = 0 : RAINX(26) = 0 : DROPS(26) = 0
WATER = WATER - 1
TOTAL = TOTAL - 1
? TAB(WATER,1) WATER'LINE;
IF WATER <> 2 THEN GOTO SPLASH
? TAB (10,35) " GLUB "
? TAB (12,28) " Total = " TOTAL " "
FOR X = 1 TO 9000 : NEXT X
PRINT TAB(-1,28)
PRINT TAB(-1,0)
END