SUBROUTINE SPIDER # # THIS SUBROUTINE CONTROLS THE ACTIONS OF A SPIDER # IMPLICIT INTEGER (A-Z) INCLUDE SY:CNTPED.CMN INCLUDE SY:UVT100.DAT REAL X,RAN DIMENSION XLADD(4),YLADD(4),XRADD(4),YRADD(4) DATA XLADD / -1,-1,1,1 / DATA YLADD / 0,-1,-1,0 / DATA XRADD / -1,-1,1,1 / DATA YRADD / 0,1,1,0 / # # RANDOMLY SELECT NEW SPIDER MOTION. IF SPIDER UNABLE TO MOVE TO # THAT LOCATION RETURN. CLEAR OUT ANY MUSHROOM AT THAT LOCATION. # X = RAN(SEED) RANDX = (X * 4) + 1 #RANDOM NUMBER IN RANGE 1-4 X = RAN(SEED) RANDY = (X * 4) + 1 #RANDOM NUMBER IN RANGE 1-4 IF (SPILR == LEFT) [ #SPIDER IS TRAVELLING TO LEFT... NEWX = SPIX + XLADD(RANDX) NEWY = SPIY + YLADD(RANDY) #SELECT A RANDOM MOTION IF (NEWY < LMAR) [ #IF OFF EDGE OF SCREEN, END OF SPIDER CALL UVT100(CUP,SPIX,SPIY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 SPIACT = 0 SPITIM = TIMER + 30 #NEXT SPIDER IN 30 CYCLES RETURN ] #CHECK FOR ILLEGAL MOVE ] ELSE IF (SPILR == RIGHT) [ #SPIDER IS TRAVELLING RIGHT... NEWX = SPIX + XRADD(RANDX) NEWY = SPIY + YRADD(RANDY) #SELECT A RANDOM MOTION IF (NEWY > RMAR) [ #IF OFF EDGE OF SCREEN, END OF SPIDER CALL UVT100(CUP,SPIX,SPIY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 SPIACT = 0 SPITIM = TIMER + 30 #NEXT SPIDER IN 30 CYCLES RETURN ] #CHECK FOR ILLEGAL MOVE ] # # TEST IF LEGAL FOR SPIDER TO MOVE TO NEW LOCATION # IF (NEWX < GMAR .OR. NEWX > BMAR) RETURN #CAN'T MOVE OUT OF PLAYER'S ZONE IF (CNTBRD(NEWX,NEWY) > 0) RETURN #CAN'T MOVE INTO CENTIPEDE IF (MSHBRD(NEWX,NEWY) > 0) [ #CAN'T MOVE INTO MUSHROOM MSHBRD(NEWX,NEWY) = 0 #CLEAR MUSHROOM AT THIS LOCATION CALL UVT100(CUP,NEWX,NEWY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 RETURN ] # # ERASE SPIDER AT OLD LOCATION AND DISPLAY SPIDER AT NEW LOCATION. # CALL UVT100(CUP,SPIX,SPIY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 SPIX = NEWX SPIY = NEWY CALL UVT100(CUP,SPIX,SPIY) OUTBUF(LEN+1) = SPICHR LEN = LEN + 1 RETURN END