SUBROUTINE FLEA C C THIS SUBROUTINE CONTROLS THE ACTIONS OF A FLEA. THE FLEA DROPS C STRAIGHT DOWN AND RANDOMLY LEAVES BEHIND MUSHROOMS AT EVERY C THIRD LOCATION. C IMPLICIT INTEGER(A - Z) PARAMETER MAXCNT = 24 C SCREEN BOUNDARIES PARAMETER LMAR = 2, RMAR = 30, TMAR = 2, BMAR = 23, GMAR = 18 C DIRECTIONALS PARAMETER HALT = 0, UP = 1, DOWN = 2, LEFT = 4, RIGHT = 8 PARAMETER UPL = 10, UPR = 9, DOWNL = 12, DOWNR = 11 C DISPLAYABLE CHARACTERS PARAMETER GUNCHR="166, CBODY="140, MSHCHR="146, BULCHR="170 PARAMETER SPICHR="173, FLECHR="175, SCOCHR="142, PSNCHR="052 PARAMETER CLHEAD="074, CRHEAD="076, CDHEAD="126 PARAMETER SHFIN="17, SHFOUT="16, SPACE="40 C QIO FUNCTION CODES PARAMETER IOATA="1410, IOWVB="11000, SFSMC="2440 C INTEGER*4SCORE, FRESCO, TIMER, SEED, FLETIM, SPITIM, SCOTIM, CNTTI *M DIMENSION PRL(6), CX(MAXCNT, 12), CY(MAXCNT, 12) DIMENSION CLEN(MAXCNT), CDIR(MAXCNT), CRISE(MAXCNT), CBOT(MAXCNT) BYTE CNTBRD(BMAR, RMAR), MSHBRD(BMAR, RMAR), PSNBRD(BMAR, RMAR) COMMON/DIRCOM/DIRCOD, FIRCOD COMMON/CNTCOM/PRL, SCORE, TIMER, SEED, CX, CY, CLEN, CDIR, CRISE, *CBOT, GUNX, GUNY, FRESCO, CNTBRD, MSHBRD, PSNBRD, BULACT, BULX, BU *LY, FLETIM, FLEACT, FLEX, FLEY, SPITIM, SPIACT, SPIX, SPIY, SPILR, * SCOTIM, SCOACT, SCOX, SCOY, SCODIR, GUNCNT, CNTTIM, BOARD, CNTWAV C C VT100 DISPLAY CONTROL PARAMETER DEFINITIONS C CCURSOR POSITION REPORT CCURSOR UP CCURSOR DOWN CCURSOR FORWARD CCURSOR BACK CDOUBLE WIDTH LINE PARAMETER CUP = 1, CUU = 2, CUD = 3, CUF = 4, CUB = 5, DECDWL = 6, * DECDHL = 7, DECRC = 8, DECSC = 9, DECSWL = 10, ED = 11, EL = 12, *SGR = 13, NEL = 14, SCS = 15, SM = 16, RM = 17, ANSI = 18, CPP=19 REAL X, RAN C C GENERATE RANDOM NUMBER. C X = RAN(SEED) CITMP IS IN RANGE 0-1 ITMP = X*2 IF (.NOT.(ITMP .EQ. 1)) GOTO 2000 CRETURN WITHOUT MOTION HALF THE TIME RETURN 2000 CONTINUE X = RAN(SEED) CITMP IS IN RANGE 0-4 ITMP = X*5 C C DROP MUSHROOM 20% OF THE TIME IF ABOVE PLAYER'S ZONE, C AND 40% OF THE TIME IF IN HIS ZONE. C IF (.NOT.(ITMP .EQ. 0.AND.FLEX .LT. BMAR)) GOTO 2020 CSET MUSHROOM BOARD MSHBRD(FLEX, FLEY) = 4 IF (.NOT.(PSNBRD(FLEX, FLEY) .EQ. 1)) GOTO 2040 CALREADY POISON MUSHROOM HERE CALL UVT100(CPP, FLEX, FLEY, PSNCHR) GOTO 2050 2040 CONTINUE CELSE DISPLAY MUSHROOM CALL UVT100(CPP, FLEX, FLEY, MSHCHR) 2050 CONTINUE GOTO 2030 2020 CONTINUE IF (.NOT.(ITMP .EQ. 1.AND.FLEX .LT. BMAR.AND.FLEX .GT. GMAR)) GOTO * 2060 CSET MUSHROOM BOARD MSHBRD(FLEX, FLEY) = 4 CALL UVT100(CPP, FLEX, FLEY, MSHCHR) GOTO 2030 2060 CONTINUE CREDISPLAY WHAT WAS HERE BEFORE... IF (.NOT.(MSHBRD(FLEX, FLEY) .EQ. 0)) GOTO 2080 CSPACE CALL UVT100(CPP, FLEX, FLEY, SPACE) GOTO 2090 2080 CONTINUE IF (.NOT.(PSNBRD(FLEX, FLEY) .EQ. 0)) GOTO 2100 CMUSHROOM CALL UVT100(CPP, FLEX, FLEY, MSHCHR) GOTO 2090 2100 CONTINUE CPOISON MUSHROOM CALL UVT100(CPP, FLEX, FLEY, PSNCHR) 2090 CONTINUE 2030 CONTINUE CDISPLAY CHARACTER ON SCREEN CDROP FLEA ONE ROW FLEX = FLEX + 1 IF (.NOT.(FLEX .GT. BMAR)) GOTO 2120 CDISAPPEAR IF AT BOTTOM OF SCREEN FLEACT = 0 ICOUNT = 0 DO 2140 I = GMAR, BMAR CIF LESS THAN FIVE MUSHROOMS IN PLAYER DO 2160 J = LMAR, RMAR CZONE, NEXT FLEA WILL APPEAR IN 20 IF (.NOT.(MSHBRD(I, J) .GT. 0)) GOTO 2180 CCYCLES, ELSE IN 200 CYCLES. ICOUNT = ICOUNT + 1 2180 CONTINUE 2160 CONTINUE 2140 CONTINUE IF (.NOT.(ICOUNT .LT. 5)) GOTO 2200 FLETIM = TIMER + 20 GOTO 2210 2200 CONTINUE FLETIM = TIMER + 200 2210 CONTINUE RETURN 2120 CONTINUE CDISPLAY FLEA AT NEW LOCATION CALL UVT100(CPP, FLEX, FLEY, FLECHR) RETURN END