%EXTERNALROUTINE ZOMBIE(%STRING (255)S) %INTEGER Z1, Z2 %EXTERNALROUTINESPEC PEHOME %EXTERNALROUTINESPEC PECLEAR %EXTERNALROUTINESPEC PECLINE(%INTEGER A) %EXTERNALROUTINESPEC PEUP %EXTERNALROUTINESPEC PEDOWN %EXTERNALROUTINESPEC PERIGHT %EXTERNALROUTINESPEC PELEFT %EXTERNALROUTINESPEC PEPOS(%INTEGER X,Y) %EXTERNALROUTINESPEC PEPROMPT(%INTEGER X,YM %STRINGNAME S) %EXTERNALREALFNSPEC RANDOM(%INTEGERNAME I, %INTEGER J) %EXTERNALROUTINESPEC SETMODE(%STRING (255)S) %EXTERNALSTRING (8) %FNSPEC TIME %ROUTINESPEC WIN %ROUTINESPEC START %ROUTINESPEC PLAY %ROUTINESPEC GRABBED %ROUTINESPEC ZFALL %ROUTINESPEC RND(%INTEGER X) %ROUTINESPEC FALL %ROUTINESPEC RESTART %INTEGERARRAY Z(1:20,1:2),H(1:20,1:2) %INTEGER A,B,I,J,K,M,R,VAR,MEX,MEY,ZTOT,ZX,ZY %OWNSTRING (10)RR="AGAIN: ",MM="MOVE: " S='' I=CHARNO(TIME,7) J=CHARNO(TIME,8) K=CHARNO(TIME,5) R=I*J+K SETMODE("GRAPH") START %ROUTINE START PECLEAR PEPOS(1,1) PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO") PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO") %CYCLE A=2,1,19 PEPOS(A,79) PRINTSTRING("O") %REPEAT %CYCLE A=2,1,19 PEPOS(A,1) PRINTSTRING("O") %REPEAT PEPOS(20,1) PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO") PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO") %CYCLE A=1,1,20 RND(19) Z(A,1)=VAR RND(78) Z(A,2)=VAR PEPOS(Z(A,1),Z(A,2)) PRINTSTRING("Z") %REPEAT %CYCLE A=1,1,20 RND(19) H(A,1)=VAR RND(78) H(A,2)=VAR PEPOS(H(A,1),H(A,2)) PRINTSTRING("O") %REPEAT RND(19) MEX=VAR RND(78) MEY=VAR PEPOS(MEX,MEY) PRINTSTRING("X") ZTOT=0 PLAY %END %ROUTINE PLAY %INTEGER JJ TWO: PECLINE(21) PEPROMPT(21,5,MM) FIVE: READSYMBOL(M) %IF M=NL %THEN ->FIVE PEPOS(MEX,MEY) PRINTSTRING(" ") %IF M='U' %THEN MEX=MEX-1 %IF M='D' %THEN MEX=MEX+1 %IF M='L' %THEN MEY=MEY-1 %IF M='R' %THEN MEY=MEY+1 PEPOS(MEX,MEY) PRINTSTRING("X") %IF MEX<2 %OR MEX>19 %OR MEY<2 %OR MEY>78 %THEN FALL %CYCLE A=1,1,20 %IF MEX=H(A,1) %AND MEY=H(A,2) %THEN FALL %REPEAT %CYCLE A=1,1,20 %IF Z(A,1)=21 %THEN ->THREE PEPOS(Z(A,1),Z(A,2)) PRINTSTRING(".") RND(100) PEPOS(22,5); SPACES(4) Z1=Z(A,1); Z2=Z(A,2) %IF Z2=MEY %AND Z1>MEX %THEN Z1=Z1-1 %AND ->FOUR %IF Z2=MEY %AND Z1FOUR %IF VAR<52 %AND Z2>MEY %THEN Z2=Z2-1 %AND ->FOUR %IF VAR<52 %AND Z2FOUR %IF Z1=MEX %AND Z2>MEY %THEN Z2=Z2-1 %AND ->FOUR %IF Z1=MEX %AND Z2FOUR %IF VAR>51 %AND Z1>MEX %THEN Z1=Z1-1 %AND ->FOUR %IF VAR>51 %AND Z1FOUR FOUR: %CYCLE JJ=1,1,20 %IF Z1=Z(JJ,1) %AND Z2=Z(JJ,2) %THEN->PUT Z ON SCREEN % %REPEAT ! NONE ON TOP OF ANOTHER Z(A,1)=Z1; Z(A,2)=Z2 PUT Z ON SCREEN: PEPOS(Z(A,1),Z(A,2)) PRINTSTRING("Z") THREE: %REPEAT %CYCLE A=1,1,20 %IF Z(A,1)=MEX %AND Z(A,2)=MEY %THEN GRABBED %CYCLE B=1,1,20 %IF Z(A,1)=H(B,1) %AND Z(A,2)=H(B,2) %THEN ZFALL %REPEAT %REPEAT ->TWO %END %ROUTINE GRABBED PEPOS(22,5) PRINTSTRING("THE ZOMBIES HAVE GOT YOU") RESTART %END %ROUTINE ZFALL PEPOS(Z(A,1),Z(A,2)) PRINTSTRING("O") Z(A,1)=21 ZTOT=ZTOT+1 PEPOS(22,5) PRINTSTRING("ZAP GOES A ZOMBIE") %IF ZTOT=20 %THEN WIN %END %ROUTINE RND(%INTEGER X) %INTEGER A %REAL AA ONE: %CYCLE A=1,1,9 AA=RANDOM(R,1) VAR=INTPT(AA*X+1) %REPEAT %IF VAR<2 %OR VAR>X %THEN ->ONE %END %ROUTINE FALL PEPOS(MEX,MEY) PRINTSTRING("O") PEPOS(22,5) PRINTSTRING("AAAAAAAAHHHHHHHH!") RESTART %END %ROUTINE WIN PEPOS(22,5) PRINTSTRING("YOU HAVE OUTWITTED THE WITLESS ZOMBIES") RESTART %END %ROUTINE RESTART PEPROMPT(21,5,RR) ONE: READSYMBOL(M) %IF M=NL %THEN ->ONE %IF M='Y' %THEN START %IF M='N' %THEN PEPOS(21,5) %AND SETMODE("UPPER") %ANDSTOP %END %END %ENDOFFILE