%EXTERNALROUTINE ZEPPELIN(%STRING(1) S) %INTEGERARRAY SPACE(1:10,0:79) %INTEGERARRAY BOMB,HANGAR,ZEPP,X,Y,NME,NMEX,NMEY,NMEB,NMEH,NMET(1:6) %INTEGERARRAY GUN(24:55), TARGET(67:72), NMEHAN(73:78), BASE(7:12) %INTEGER A,B,XX,YY,C,WHICH,UNKNOWN,R,TOTAL,ZS,AS %STRING (20) ANS,NAME %ROUTINESPEC CONVERT(%STRING(20) A,%INTEGERNAME B) %ROUTINESPEC SCORE %ROUTINESPEC DROP %ROUTINESPEC NMEDROP %ROUTINESPEC SELECT %ROUTINESPEC FIRE %ROUTINESPEC LAUNCH %ROUTINESPEC NMELAUNCH %ROUTINESPEC MOVE %ROUTINESPEC NMEMOVE %ROUTINESPEC NMEOPT(%INTEGER C) %ROUTINESPEC RETARGET %ROUTINESPEC BELLS(%INTEGER N) %ROUTINESPEC DRAW %ROUTINESPEC RST(%STRINGNAME S) %EXTERNALROUTINESPEC SETMODE(%STRING (255) S) %EXTERNALREALFNSPEC RANDOM(%INTEGERNAME I, %INTEGER N) %EXTERNALROUTINESPEC PROMPT(%STRING (15) Y) S=" " PROMPT('SURNAME?: ') RST(NAME) PROMPT('LUCKY NUMBER?: ') READ(R) R=R+R*R*R %CYCLE A=10,-1,1 %CYCLE B=0,1,79 SPACE(A,B)=' ' %REPEAT %REPEAT %CYCLE C=1,1,6 HANGAR(C)=1 NMEHAN(C+72)=1 NMEB(C)=3 BOMB(C)=3 ZEPP(C)=1 NME(C)=1 BASE(C+6)=1 GUN(C+49)=0 GUN(C+23)=0 TARGET(C+66)=1 Y(C)=0 X(C)=0 NMEX(C)=0 NMEY(C)=0 %REPEAT SETMODE("WIDTH=78") START: LAUNCH -> START %ROUTINE SCORE %INTEGER C TOTAL=0 %CYCLE C=1,1,6 %IF NMEHAN(C+72)=-1 %THEN TOTAL=TOTAL+1 %IF TARGET(C+66)=-1 %THEN TOTAL=TOTAL+2 %IF GUN(C+23)=-1 %THEN TOTAL=TOTAL-1 %IF GUN(C+49)=-1 %THEN TOTAL=TOTAL+1 %IF HANGAR(C)=-1 %THEN TOTAL=TOTAL-1 %IF BASE(C+6)=-1 %THEN TOTAL=TOTAL-1 %IF ZEPP(C)=-1 %THEN TOTAL=TOTAL-2 %IF NME(C)=-1 %THEN TOTAL=TOTAL+2 %REPEAT PRINTSTRING('YOU HAVE SCORED ') PRINT(TOTAL,2,0) PRINTSTRING(' POINTS') %IF TOTAL<0 %THEN PRINTSTRING(', I HAVE WON') %IF TOTAL>0 %THEN PRINTSTRING(', YOU HAVE WON') NEWLINE %STOP %END %ROUTINE DRAW %INTEGER A,B,C %CYCLE A=1,1,10 %CYCLE B=1,1,78 SPACE(A,B)=' ' %REPEAT %REPEAT %CYCLE B=1,1,6 %IF HANGAR(B)=1 %THEN SPACE(1,B)='^' %IF BASE(B+6)=1 %THEN SPACE(1,B+6)='T' %IF TARGET(B+66)=1 %THEN SPACE(1,B+66)='T' %IF NMEHAN(B+72)=1 %THEN SPACE(1,B+72)='^' %IF NMEHAN(B+72)=1 %THEN SPACE(1,B+72)='^' %IF GUN(B+23)>0 %OR GUN(B+23)=0 %THEN SPACE(1,B+23)='+' %IF GUN(B+49)=0 %OR GUN(B+49)=1 %THEN SPACE(1,B+49)='+' %REPEAT %CYCLE C=1,1,6 %IF ZEPP(C)=2 %OR ZEPP(C)=-2 %OR ZEPP(C)=-3 %THEN %START %IF SPACE(X(C),Y(C))='+' %THEN %START SPACE(X(C),Y(C))='*' ZEPP(C)=-1 GUN(Y(C))=-1 Y(C)=0 -> ONE %FINISH %IF SPACE(X(C),Y(C))='T' %THEN %START SPACE(X(C),Y(C))='*' ZEPP(C)=-1 TARGET(Y(C))=-1 Y(C)=0 -> ONE %FINISH %IF SPACE(X(C),Y(C))='^' %AND Y(C)>72 %THEN %START SPACE(X(C),Y(C))='*' ZEPP(C)=-1 %IF Y(C)>66 %THEN NMEHAN(Y(C))=-1 %IF Y(C)<13 %THEN BASE(Y(C))=-1 Y(C)=0 %IF NME(C)=1 %THEN NME(C)=-1 -> ONE %FINISH %IF ZEPP(C)=-2 %THEN %START ZEPP(C)=-1 SPACE(X(C),Y(C))='*' Y(C)=0 -> ONE %FINISH %IF ZEPP(C)=-3 %THEN %START ZEPP(C)=-1 SPACE(1,Y(C))='*' Y(C)=0 -> ONE %FINISH SPACE(X(C),Y(C))='Z' SPACE(X(C),Y(C)+1)=C+'0' ONE: %FINISH %IF NME(C)=-2 %THEN NME(C)=-1 %AND SPACE(NMEX(C),NMEY(C))='*' %C %AND NMEY(C)=0 %IF NME(C)=2 %THEN %START SPACE(NMEX(C),NMEY(C))='A' SPACE(NMEX(C),NMEY(C)+1)=C+'0' %FINISH %REPEAT DROP NMEDROP %IF GUN(24)=0 %OR GUN(25)=0 %OR GUN(26)=0 %OR GUN(27)=0 %C %OR GUN(28)=0 %OR GUN(29)=0 %THEN %START PROMPT('GUNFIRE?:') RST(ANS) %IF ANS="Y" %THEN %START %CYCLE C=24,1,29 %IF GUN(C)=-1 %THEN -> SEVEN FOUR: SELECT %IF UNKNOWN>8 %THEN -> FOUR GUN(C)=UNKNOWN %IF GUN(C)=1 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C-A*2)='.' %REPEAT -> THREE %FINISH %IF GUN(C)=2 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C-A)='.' %REPEAT -> THREE %FINISH %IF GUN(C)=3 %THEN %START %CYCLE A=10,-1,2 SPACE(A,C)='.' %REPEAT -> THREE %FINISH %IF GUN(C)=4 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C+A)='.' %REPEAT -> THREE %FINISH %IF GUN(C)=5 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C+A*2)='.' %REPEAT %FINISH THREE: GUN(C)=0 SEVEN: %REPEAT %FINISH %FINISH ZS=0 AS=0 %CYCLE C=1,1,6 %IF Y(C)>40 %AND Y(C)<72 %THEN ZS=ZS+1 %IF NMEY(C)>40 %AND NMEY(C)<72 %THEN AS=AS+1 %REPEAT %IF ZS>AS %THEN %START FIRE %CYCLE C=50,1,55 SELECT %IF GUN(C)=1 %THEN %START %IF UNKNOWN>3 %AND UNKNOWN<6 %THEN %START %CYCLE A=10,-1,2 SPACE(A,C)='.' %REPEAT %FINISH %IF UNKNOWN>1 %AND UNKNOWN<4 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C-A)='.' %REPEAT %FINISH %IF UNKNOWN>5 %AND UNKNOWN<8 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C+A)='.' %REPEAT %FINISH %IF UNKNOWN>-1 %AND UNKNOWN<2 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C-A*2)='.' %REPEAT %FINISH %IF UNKNOWN>7 %AND UNKNOWN<10 %THEN %START %CYCLE A=0,1,8 SPACE(A+2,C+A*2)='.' %REPEAT %FINISH GUN(C)=0 %FINISH %REPEAT %FINISH %CYCLE C=1,1,6 %IF NME(C)=2 %THEN %START %IF SPACE(NMEX(C),NMEY(C))='.' %THEN %START NME(C)=-1 SPACE(NMEX(C),NMEY(C))='*' %FINISH %FINISH %IF ZEPP(C)=2 %THEN %START %IF SPACE(X(C),Y(C))='.' %THEN %START SPACE(X(C),Y(C))='*' ZEPP(C)=-1 Y(C)=0 %FINISH %FINISH %REPEAT %CYCLE A=10,-1,1 %CYCLE B=1,1,78 PRINTSYMBOL(SPACE(A,B)) %IF SPACE(A,B)='A' %THEN BELLS(1) %IF SPACE(A,B)='Z' %THEN BELLS(1) %IF SPACE(A,B)='.' %THEN BELLS(1) %IF SPACE(A,B)='*' %THEN BELLS(10) %REPEAT NEWLINE %REPEAT %CYCLE B=1,1,28 PRINTSYMBOL('-') %REPEAT PRINTSYMBOL('\') SPACES(20) PRINTSYMBOL('/') %CYCLE B=1,1,28 PRINTSYMBOL('-') %REPEAT NEWLINE PRINTSTRING('AIR MARSHAL VON ') PRINTSTRING(NAME) SPACES(13-LENGTH(NAME)) %CYCLE B=1,1,20 PRINTSYMBOL('~') %REPEAT SPACES(4) PRINTSTRING('AIR MARSHAL SUPER SEVENTY') NEWLINE %CYCLE C=1,1,6 SELECT %IF HANGAR(C)=-1 %AND UNKNOWN<4 %AND BASE(C+6)=1 %THEN HANGAR(C)=1 %C %AND -> FIVE %REPEAT FIVE: %END %ROUTINE RST(%STRINGNAME S) S='' %INTEGER A ONE: READSYMBOL(A) %IF A=NL %THEN -> ONE %WHILE A#NL %CYCLE S=S.TOSTRING(A) READSYMBOL(A) %IF A=' ' %THEN -> TWO %REPEAT TWO: %END %ROUTINE BELLS(%INTEGER N) %INTEGER I %CYCLE I=1,1,N PRINTCH(X'7') %REPEAT %END %ROUTINE MOVE %INTEGER C,D %IF ZEPP(1)=-1 %AND ZEPP(2)=-1 %AND ZEPP(3)=-1 %AND ZEPP(4)=-1 %C %AND ZEPP(5)=-1 %AND ZEPP(6)=-1 %THEN %START PRINTSTRING('ALL ZEPPELINS SHOT DOWN') NEWLINE SCORE %FINISH %IF TARGET(67)=-1 %AND TARGET(68)=-1 %AND TARGET(69)=-1 %C %AND TARGET(70)=-1 %AND TARGET(71)=-1 %AND TARGET(72)=-1 %C %AND GUN(50)=-1 %AND GUN(51)=-1 %AND GUN(52)=-1 %C %AND GUN(53)=-1 %AND GUN(54)=-1 %AND GUN(55)=-1 %C %AND NMEHAN(73)=-1 %AND NMEHAN(74)=-1 %AND NMEHAN(75)=-1 %C %AND NMEHAN(76)=-1 %AND NMEHAN(77)=-1 %AND NMEHAN(78)=-1 %THEN %START PRINTSTRING('ENEMY TOTALLY WIPED OUT') NEWLINE SCORE %FINISH %CYCLE C=1,1,6 %IF ZEPP(C)#2 %THEN -> THREE PROMPT("Z".TOSTRING(C+'0')." MOVE?:") ONE: RST(ANS) CONVERT(ANS,XX) %IF XX>1 %OR XX<-2 %THEN %START PRINTSTRING('TOO FAST') NEWLINE -> ONE %FINISH %IF X(C)+XX>10 %THEN %START PRINTSTRING('TOO HIGH') NEWLINE -> ONE %FINISH %IF X(C)+XX<1 %THEN %START ZEPP(C)=-3 -> THREE %FINISH PROMPT('Y MOVE :') TWO: RST(ANS) CONVERT(ANS,YY) %IF YY>5 %OR YY<-5 %THEN %START PRINTSTRING('TOO FAST') NEWLINE -> TWO %FINISH %IF Y(C)+YY>78 %THEN %START PRINTSTRING('TOO FAR RIGHT') NEWLINE -> TWO %FINISH %IF Y(C)+YY<1 %THEN %START PRINTSTRING('TOO FAR LEFT') NEWLINE -> TWO %FINISH X(C)=X(C)+XX Y(C)=Y(C)+YY THREE: %REPEAT %CYCLE D=1,1,6 %CYCLE C=1,1,6 %IF C=D %THEN -> FOUR %IF ZEPP(C)=2 %OR ZEPP(C)=-2 %OR ZEPP(D)=2 %OR ZEPP(D)=-2 %THEN %START %IF X(C)=X(D) %AND Y(C)=Y(D) %THEN %START ZEPP(C)=-2 ZEPP(D)=-2 %FINISH FOUR: %FINISH %REPEAT %REPEAT %CYCLE C=1,1,6 %IF ZEPP(C)=2 %AND X(C)=1 %AND Y(C)=C %AND HANGAR(C)=1 %THEN %START ZEPP(C)=1 BOMB(C)=2 %FINISH %REPEAT NMEMOVE DRAW %END %ROUTINE LAUNCH %INTEGER C %IF ZEPP(1)#1 %AND ZEPP(2)#1 %AND ZEPP(3)#1 %AND ZEPP(4)#1 %C %AND ZEPP(5)#1 %AND ZEPP(6)#1 %THEN -> ONE PRINTSTRING('LAUNCH') NEWLINE THREE: PROMPT('WHICH ZEPPELIN:') RST(ANS) %IF ANS='NONE' %OR ANS="0" %THEN -> ONE %IF ANS="?" %THEN %START %CYCLE C=1,1,6 %IF ZEPP(C)=1 %THEN %START PRINTSTRING('ZEPPELIN') PRINT(C,1,0) PRINTSTRING(' IN SHED') NEWLINE %FINISH %REPEAT -> THREE %FINISH CONVERT(ANS,WHICH) %IF WHICH=0 %THEN -> ONE %IF WHICH<0 %OR WHICH>6 %THEN -> THREE %IF ZEPP(WHICH)=2 %THEN %START PRINTSTRING('ZEPPELIN') PRINT(WHICH,1,0) PRINTSTRING(' ALREADY LAUNCHED') NEWLINE %FINISH %IF ZEPP(WHICH)=1 %THEN %START ZEPP(WHICH)=2 X(WHICH)=1 Y(WHICH)=WHICH %FINISH %IF ZEPP(WHICH)=-1 %THEN %START PRINTSTRING('ZEPPELIN SHOT DOWN') NEWLINE %FINISH ONE: NMELAUNCH MOVE %END %ROUTINE FIRE %INTEGER C %CYCLE C=50,1,55 %IF GUN(C)=-1 %THEN %START SELECT %IF UNKNOWN<1 %AND TARGET(C+17)=1 %THEN GUN(C)=0 -> ONE %FINISH SELECT %IF UNKNOWN<4 %THEN %START GUN(C)=1 %FINISH ONE: %REPEAT %END %ROUTINE SELECT %INTEGER A %REAL AA %CYCLE A=1,1,11 AA=RANDOM(R,1) UNKNOWN=INTPT(AA*10) %REPEAT %END %ROUTINE DROP %INTEGER A,B,C,D %CYCLE C=1,1,6 %IF ZEPP(C)#2 %THEN -> ONE %IF BOMB(C)<1 %THEN -> ONE PROMPT("Z".TOSTRING(C+'0')." DROP BOMBS?:") RST(ANS) %IF ANS="?" %THEN %START %CYCLE D=1,1,6 %IF BOMB(D)<1 %THEN -> THREE %IF ZEPP(D)#2 %THEN -> THREE PRINTSTRING('ZEPPELIN') PRINT(D,1,0) PRINTSTRING(' HAS') PRINT(BOMB(D),1,0) PRINTSTRING(' BOMBS LEFT') NEWLINE THREE: %REPEAT -> ONE %FINISH %IF ANS="0" %THEN -> TWO %IF ANS="Y" %THEN %START %IF X(C)<3 %THEN %START ZEPP(C)=-1 SPACE(X(C),Y(C))='*' %IF SPACE(1,Y(C))='^' %AND Y(C)<7 %THEN %START HANGAR(C)=-1 %IF ZEPP(C)=1 %THEN ZEPP(C)=-1 SPACE(1,Y(C))='*' %FINISH %IF SPACE(1,Y(C))='T' %AND Y(C)<12 %THEN SPACE(1,Y(C))='*' %C %AND BASE(Y(C))=-1 %IF SPACE(1,Y(C))='T' %AND Y(C)>66 %THEN SPACE(1,Y(C))='*' %C %AND TARGET(Y(C))=-1 %IF SPACE(1,Y(C))='+' %THEN SPACE(1,Y(C))='*' %AND GUN(Y(C))=-1 %IF SPACE(1,Y(C))='^' %AND Y(C)>72 %THEN %START SPACE(1,Y(C))='*' NMEHAN(Y(C))=-1 %IF NME(C)=1 %THEN NME(C)=-1 %FINISH Y(C)=0 -> ONE %FINISH %CYCLE A=X(C)-1,-1,2 SELECT B=Y(C) %IF UNKNOWN<1 %THEN B=B-1 %IF UNKNOWN>8 %THEN B=B+1 SPACE(A,B)='!' %REPEAT BOMB(C)=BOMB(C)-1 %IF SPACE(A-1,B)='T' %AND B<12 %THEN BASE(B)=-1 %IF SPACE(A-1,B)='T' %AND B>66 %THEN TARGET(B)=-1 %IF SPACE(A-1,B)='^' %AND B<7 %THEN %START HANGAR(B)=-1 %IF ZEPP(B)=1 %THEN ZEPP(B)=-1 %FINISH %IF SPACE(A-1,B)='^' %AND B>72 %THEN %START NMEHAN(B)=-1 %IF NME(C)=1 %THEN NME(C)=-1 %FINISH %IF SPACE(A-1,B)='+' %THEN GUN(B)=-1 SPACE(A-1,B)='*' %FINISH ONE: %REPEAT TWO: %END %ROUTINE CONVERT(%STRING(20) A,%INTEGERNAME B) %IF A='-5' %THEN B=-5 %AND -> ONE %IF A='-4' %THEN B=-4 %AND -> ONE %IF A='-3' %THEN B=-3 %AND -> ONE %IF A='-2' %THEN B=-2 %AND -> ONE %IF A='-1' %THEN B=-1 %AND -> ONE %IF A="0" %THEN B=0 %AND -> ONE %IF A="1" %THEN B=1 %AND -> ONE %IF A="2" %THEN B=2 %AND -> ONE %IF A="3" %THEN B=3 %AND -> ONE %IF A="4" %THEN B=4 %AND -> ONE %IF A="5" %THEN B=5 %AND -> ONE %IF A="6" %THEN B=6 %AND -> ONE B=0 ONE: %END %ROUTINE NMELAUNCH %INTEGER C %CYCLE C=1,1,6 %IF NME(C)=1 %THEN %START NME(C)=2 NMEX(C)=1 NMEY(C)=72+C THREE: SELECT %IF UNKNOWN<3 %THEN -> THREE NMEH(C)=UNKNOWN NMEOPT(C) -> ONE %FINISH %REPEAT ONE: %END %ROUTINE NMEMOVE %INTEGER C,D %CYCLE C=1,1,6 %IF NME(C)=2 %THEN %START SELECT %IF NMEX(C)=1 %AND NMEB(C)>0 %THEN NMEX(C)=2 %AND -> THREE %IF ( NMEX(C)=2 %OR NMEX(C)=3 ) %AND NMEB(C)<1 %AND NMEY(C)<56 %C %THEN -> THREE %IF NMEX(C)>NMEH(C) %THEN %START %IF NMEX(C)=2 %AND NMEB(C)<1 %AND NMEY(C)>72 %THEN NMEX(C)=1 %AND -> ONE %IF UNKNOWN<4 %THEN -> ONE %IF UNKNOWN<7 %THEN NMEX(C)=NMEX(C)-1 %AND -> ONE NMEX(C)=NMEX(C)-2 ONE: %FINISH %IF NMEX(C)4 %THEN NMEX(C)=NMEX(C)+1 %FINISH THREE: %IF NMEY(C)+5>NMET(C) %AND NMEY(C)-5NMET(C) %THEN NMEY(C)=NMEY(C)-5 %IF NMEY(C)0 %THEN %START %CYCLE A=NMEX(C)-1,-1,2 SELECT B=NMEY(C) %IF UNKNOWN<1 %THEN B=B-1 %IF UNKNOWN>8 %THEN B=B+1 SPACE(A,B)='!' %REPEAT NMEB(C)=NMEB(C)-1 %IF SPACE(A-1,B)='T' %THEN BASE(B)=-1 %AND RETARGET %IF SPACE(A-1,B)='+' %THEN GUN(B)=-1 %AND RETARGET %IF SPACE(A-1,B)='^' %THEN %START HANGAR(B)=-1 %IF ZEPP(B)=1 %THEN ZEPP(B)=-1 RETARGET %FINISH SPACE(A-1,B)='*' %FINISH %FINISH %IF NMEB(C)=-99 %THEN -> THREE %IF NMEB(C)<1 %THEN NMEH(C)=1 %AND NMET(C)=72+C THREE: %REPEAT %END %ROUTINE NMEOPT(%INTEGER C) %INTEGER A %CYCLE A=6,-1,1 %IF HANGAR(A)=1 %AND ZEPP(A)=1 %THEN NMET(C)=A %AND -> ONE %REPEAT %CYCLE A=6,-1,1 %IF BASE(A+6)=1 %THEN NMET(C)=A+6 %AND -> ONE %REPEAT %CYCLE A=6,-1,1 %IF HANGAR(A)=1 %THEN NMET(C)=A %AND -> ONE %REPEAT %CYCLE A=6,-1,1 %IF GUN(A+23)#-1 %THEN NMET(C)=A+23 %AND -> ONE %REPEAT %CYCLE A=1,1,6 NMEH(A)=A+3 NMET(A)=A+71 NMEB(A)=-99 %REPEAT ONE: %END %ROUTINE RETARGET %INTEGER D %CYCLE D=1,1,6 %IF NMET(D)#B %THEN -> ONE NMEOPT(D) ONE: %REPEAT %END %END %ENDOFFILE