'===========================================================================
' Subject: BOUNCING FACES                     Date: 02-12-97 (15:23)       
'  Author: Nick Kochakian                     Code: QB, QBasic, PDS        
'  Origin: NickK@worldnet.att.net           Packet: MISC.ABC
'===========================================================================
'----------------------------------------------------------------------------
'Face bounce
'
'1/20/97 - 2/12/97
'1997 By: - Nick Kochakian -
'
'
'My e-mail: nickK@worldnet.att.net
'----------------------------------------------------------------------------

DEFINT A-Z

CLS
RANDOMIZE TIMER

DELY = 999'The delay

FACES = 50 'The number of faces on the screen at a time
fx = FACES 'X location
fy = FACES 'Y location
fcf = FACES 'Foreground color
fcb = FACES 'Background color
FACC = FACES 'Type of face
dir = FACES 'Face direction

DIM x(fx)
DIM y(fy)
DIM cf(fcf)
DIM cb(fcb)
DIM FAC(FACC)
DIM d(dir)
fx = 1
fy = 1
fcf = 1
fcb = 1
FACC = 1
dir = 1

'Place the faces in their random spots for the first time
FOR I = 1 TO FACES
x(fx) = INT(RND * 23) + 1
y(fy) = INT(RND * 80) + 1
cf(fcf) = INT(RND * 15) + 1
cb(fcb) = INT(RND * 7) + 1
FAC(FACC) = INT(RND * 2) + 1
IF FAC(FACC) < 1 THEN FAC(FACC) = 1
d(dir) = INT(RND * 8) + 1
LOCATE x(fx), y(fy): COLOR cf(fcf), cb(fcb): PRINT CHR$(1)
fx = fx + 1
fy = fy + 1
fcf = fcf + 1
fcb = fcb + 1
dir = dir + 1
FACC = FACC + 1
NEXT I

fx = 1
fy = 1
fcf = 1
fcb = 1
FACC = 1
dir = 1

'The main loop
DO
LOCATE x(fx), y(fy): COLOR 0, 0: PRINT CHR$(FAC(FACC)): COLOR cf(fcf), cb(fcb)

IF d(dir) = 1 THEN x(fx) = x(fx) - 1
IF d(dir) = 2 THEN y(fy) = y(fy) + 1: x(fx) = x(fx) + 1
IF d(dir) = 3 THEN x(fx) = x(fx) + 1
IF d(dir) = 4 THEN y(fy) = y(fy) - 1
IF d(dir) = 5 THEN y(fy) = y(fy) - 1: x(fx) = x(fx) - 1
IF d(dir) = 6 THEN y(fy) = y(fy) + 1:  x(fx) = x(fx) - 1
IF d(dir) = 7 THEN y(fy) = y(fy) - 1:  x(fx) = x(fx) + 1
IF d(dir) = 8 THEN y(fy) = y(fy) + 1

IF x(fx) < 1 THEN x(fx) = 1: GOSUB RERAND:
IF x(fx) > 23 THEN x(fx) = 23: GOSUB RERAND:
IF y(fy) < 1 THEN y(fy) = 1: GOSUB RERAND:
IF y(fy) > 80 THEN y(fy) = 80: GOSUB RERAND:

LOCATE x(fx), y(fy): COLOR cf(fcf), cb(fcb): PRINT CHR$(FAC(FACC))

fx = fx + 1
fy = fy + 1
fcf = fcf + 1
fcb = fcb + 1
FACC = FACC + 1
dir = dir + 1

FOR I = 1 TO DELY
NEXT I


IF fx > FACES THEN fx = 1
IF fy > FACES THEN fy = 1
IF fcf > FACES THEN fcf = 1
IF fcb > FACES THEN fcb = 1
IF FACC > FACES THEN FACC = 1
IF dir > FACES THEN dir = 1

LOOP UNTIL INKEY$ <> ""
END

RERAND:
d(dir) = INT(RND * 8) + 1
IF d(dir) = 1 THEN d(dir) = 3
IF d(dir) = 2 THEN d(dir) = 5
IF d(dir) = 4 THEN d(dir) = 8
IF d(dir) = 6 THEN d(dir) = 7

IF d(dir) = 8 THEN d(dir) = 4
IF d(dir) = 7 THEN d(dir) = 6

RETURN
