C MODULE MVWORM C C AUTHOR MICHAEL BOORSTEIN C C DATE 26,MARCH,1978 C C THIS ROUTINE FIGURES OUT WHERE THE WORM IS MOVING TO C C SUBROUTINE MVWORM(X,Y,HEAD,TAIL,DIR) IMPLICIT INTEGER(A-Z) LOGICAL*1 PUTAIL BYTE X(15),Y(15) BYTE TX,TY C C BEGIN C GOTO(100,200,300,400),DIR C C UP C 100 IF(Y(HEAD).GT.1)GOTO 500 DIR=3 GOTO 500 C C RIGHT C 200 IF(X(HEAD).LT.79)GOTO 500 DIR=4 GOTO 500 C C DOWN C 300 IF(Y(HEAD).LT.23)GOTO 500 DIR=1 GOTO 500 C C LEFT C 400 IF(X(HEAD).GT.1)GOTO 500 DIR=2 C C FIGURE NEXT PLACE C 500 TX=X(HEAD) TY=Y(HEAD) IF(DIR.EQ.1)TY=TY-1 IF(DIR.EQ.2)TX=TX+1 IF(DIR.EQ.3)TY=TY+1 IF(DIR.EQ.4)TX=TX-1 C C MOVE THE WORM C PUTAIL=.TRUE. DO 510 J=1,15 IF(J.EQ.TAIL)GOTO 510 IF(X(J).EQ.X(TAIL).AND.Y(J).EQ.Y(TAIL))PUTAIL=.FALSE. 510 CONTINUE IF(PUTAIL)CALL PTWORM(X(TAIL),Y(TAIL),' ') CALL PTWORM(X(HEAD),Y(HEAD),'a') CALL PTWORM(TX,TY,'-') C C UPDATE THE CIRCULAR BUFFER C X(TAIL)=TX Y(TAIL)=TY HEAD=TAIL TAIL=TAIL-1 IF(TAIL.EQ.0)TAIL=15 RETURN END