home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / KINGS.ZIP / LEVEL6.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1979-12-31  |  13.8 KB  |  307 lines

  1. 0  '***********************************
  2. 1  '* level 6   (KING'S RULE)         *
  3. 2  '* (c) '85 Sunburst Communications *
  4. 3  '* Author: Tom O'Brien             *
  5. 4  '* Programmer: Raoul Watson        *
  6. 5  '***********************************
  7. 7  L$="6":L%=6:RES%=6
  8. 19  GOTO 29500
  9. 20  N=FNR(50)*2:RETURN
  10. 21  IF N<10 THEN I=((21-N)/2) ELSE I=((27-N)/2)
  11. 22  JN=FNR(I):R=N:S=R+JN:T=S+JN:IF RU=1 THEN RETURN
  12. 25  R=T:T=N:RETURN
  13. 30  N=FNR(49)*2+1:RETURN
  14. 35  R=T:T=N:RETURN
  15. 40  R=FNR(9)*100+1:S=R+1:T=S+1:RETURN
  16. 50  GOSUB 20:I=FNR(3):K1=FNR(40)*2+1:K2=FNR(40)*2+1:ON I GOTO 52,53
  17. 51  R=N:S=K1:T=K2:RETURN
  18. 52  S=N:R=K1:T=K2:RETURN
  19. 53  T=N:R=K1:S=K2:RETURN
  20. 60  IF X/2=INT(X/2) AND Y/2<>INT(Y/2) AND Z/2<>INT(Z/2) THEN AN=1:RETURN
  21. 61  IF Y/2=INT(Y/2) AND X/2<>INT(X/2) AND Z/2<>INT(Z/2) THEN AN=1:RETURN
  22. 62  IF Z/2=INT(Z/2) AND X/2<>INT(X/2) AND Y/2<>INT(Y/2) THEN AN=1:RETURN ELSE RETURN
  23. 80  R=FNR(5)*100:S=R+1:T=S+1:RETURN
  24. 90  N=FNR(20)*5:I=FNR(3):K1=FNR(20)*5+FNR(4):K2=FNR(20)*5+FNR(4):ON I GOTO 52,53,51
  25. 100  IF X/5=INT(X/5) AND Y/5<>INT(Y/5) AND Z/5<>INT(Z/5) THEN AN=1:RETURN
  26. 101  IF Y/5=INT(Y/5) AND X/5<>INT(X/5) AND Z/5<>INT(Z/5) THEN AN=1:RETURN
  27. 102  IF Z/5=INT(Z/5) AND X/5<>INT(X/5) AND Y/5<>INT(Y/5) THEN AN=1:RETURN ELSE RETURN
  28. 120  R=FNR(10):S=10-R:T=FNR(30):RETURN
  29. 140  IF X+Y=10 THEN AN=1:RETURN ELSE RETURN
  30. 160  R=FNR(100):S=1:T=R:RETURN
  31. 170  R=FNR(100):N=FNR(10):S=N*N:T=FNR(100):RETURN
  32. 180  IF Y<0 THEN RETURN ELSE VW#=SQR(Y):IF VW#*VW#=Y THEN AN=1:RETURN ELSE RETURN
  33. 200  R=FNR(9)*10+3:S=FNR(9)*10+4:T=FNR(9)*10+5:RETURN
  34. 210  N=FNR(9)*10+3:I=FNR(4):ON I GOTO 212,213
  35. 211  R=N:S=FNR(100):IF I=3 THEN T=R ELSE T=FNR(100)
  36. 212  S=N:R=FNR(100):T=FNR(100)
  37. 213  T=N:R=FNR(100):S=FNR(100)
  38. 220  IF RIGHT$(STR$(X),1)="3" OR RIGHT$(STR$(Y),1)="3" OR RIGHT$(STR$(Z),1)="3" THEN AN=1:RETURN ELSE RETURN
  39. 240  R=FNR(C):S=FNR(R):T=C-(R+S):IF T<0 THEN 240 ELSE RETURN
  40. 260  IF Z<21 AND Z=C-(X+Y) THEN AN=1:RETURN ELSE RETURN
  41. 280  R=FNR(25)*4:S=R+1:T=S+1:RETURN
  42. 290  S=FNR(25)*4:R=FNR(100):T=FNR(100):RETURN
  43. 300  IF X/4=INT(X/4) OR Y/4=INT(Y/4) OR Z/4=INT(Z/4) THEN AN=1:RETURN ELSE RETURN
  44. 320  R=FNR(9)*10+9:S=FNR(10)*10:T=FNR(9)*10+1:RETURN
  45. 330  S=FNR(9)*10+9:R=FNR(100):T=FNR(100):RETURN
  46. 340  IF RIGHT$(STR$(X),1)="9" OR RIGHT$(STR$(Y),1)="9" OR RIGHT$(STR$(Z),1)="9" THEN AN=1:RETURN ELSE RETURN
  47. 360  R=FNR(99):S=R+1:T=R:RETURN
  48. 370  R=FNR(100):S=R:T=FNR(100):RETURN
  49. 380  IF X=Y OR Y=Z OR X=Z THEN AN=1:RETURN ELSE RETURN
  50. 400  R=FNR(40):S=R:T=R*S:RETURN
  51. 410  IF FNR(2)=1 THEN GOSUB 20:R=N:GOSUB 20:S=N:GOSUB 20:T=N:RETURN
  52. 411  GOSUB 30:R=N:GOSUB 30:S=N:GOSUB 30:T=N:RETURN
  53. 420  IF X/2=INT(X/2) AND Y/2=INT(Y/2) AND Z/2=INT(Z/2) THEN AN=1:RETURN
  54. 422  IF X/2<>INT(X/2) AND Y/2<>INT(Y/2) AND Z/2<>INT(Z/2) THEN AN=1:RETURN ELSE RETURN
  55. 460  R=FNR(10):S=FNR(10):T=(R+S)*(R+S):RETURN
  56. 470  R=FNR(80):S=R+FNR(10):T=S+FNR(10):RETURN
  57. 480  IF Z>Y AND Z>X THEN AN=1:RETURN ELSE RETURN
  58. 500  GOSUB 20:R=N:S=R+1:T=S+1:RETURN
  59. 510  GOSUB 20:S=N:R=FNR(100):T=FNR(100):RETURN
  60. 520  IF X/2=INT(X/2) OR Y/2=INT(Y/2) OR Z/2=INT(Z/2) THEN AN=1:RETURN ELSE RETURN
  61. 540  R=FNR(9)*1000:S=R+1:T=S+1:RETURN
  62. 550  N=FNR(10)*10:I=FNR(3):K1=FNR(9)*10+FNR(9):K2=FNR(9)*10+FNR(9):ON I GOTO 52,53,51
  63. 560  IF X/10=INT(X/10) AND Y/10<>INT(Y/10) AND Z/10<>INT(Z/10) THEN AN=1:RETURN
  64. 561  IF Y/10=INT(Y/10) AND X/10<>INT(X/10) AND Z/10<>INT(Z/10) THEN AN=1:RETURN
  65. 562  IF Z/10=INT(Z/10) AND X/10<>INT(X/10) AND Y/10<>INT(Y/10) THEN AN=1:RETURN ELSE RETURN
  66. 580  R=FNR(100):S=R:T=S:RETURN
  67. 590  GOSUB 20:R=N:GOSUB 20:S=N:T=(R+S)/2:RETURN
  68. 600  IF (X+Y)/2=Z THEN AN=1:RETURN ELSE RETURN
  69. 620  K=(FNR(40)+8)*13:V$=STR$(K)+STR$(K):K=VAL(V$):I=FNR(3):K1=(FNR(20)+9)*12:V$=STR$(K1)+STR$(K1):K1=VAL(V$):K2=(FNR(20)+9)*12:V$=STR$(K2)+STR$(K2):K2=VAL(V$):ON I GOTO 622,623,621
  70. 621  R=K:S=K1:T=K2:RETURN
  71. 622  S=K:R=K1:T=K2:RETURN
  72. 623  T=K:R=K1:S=K2:RETURN
  73. 625  N=FNR(9)*13:K1=FNR(100):K2=FNR(100):GOTO 51
  74. 630  IF X/13=INT(X/13) OR Y/13=INT(Y/13) OR Z/13=INT(Z/13) THEN AN=1:RETURN ELSE RETURN
  75. 650  GOSUB 460:RETURN
  76. 670  IF (X+Y)*(X+Y)=Z THEN AN=1:RETURN ELSE RETURN
  77. 690  N=FNR(10)*2:R=N*N:S=R+2:T=S+2:RETURN
  78. 700  R=FNR(100):GOSUB 20:S=N:T=FNR(100):RETURN
  79. 710  IF Y/2=INT(Y/2) THEN AN=1:RETURN ELSE RETURN
  80. 730  R=FNR(10):T=R*R:S=R+1:RETURN
  81. 740  R=FNR(80):S=R+FNR(10):T=S+FNR(10):RETURN
  82. 750  IF Z>Y AND Z>X THEN AN=1:RETURN ELSE RETURN
  83. 770  R=FNR(20)*4:S=R-1:T=S-1:RETURN
  84. 780  T=FNR(80):S=T+FNR(10):R=S+FNR(10):RETURN
  85. 790  IF X>Y AND X>Z THEN AN=1:RETURN ELSE RETURN
  86. 810  N=FNR(5)*2:R=N*N:N=FNR(5)*2:S=N*N:T=(R+S)/2:RETURN
  87. 820  N=FNR(5)*2:R=N*N:S=FNR(100):T=FNR(100):RETURN
  88. 830  IF X<0 THEN RETURN ELSE VW#=SQR(X):IF VW#*VW#=X THEN AN=1:RETURN ELSE RETURN
  89. 850  RETURN
  90. 4000  LINE (24,64)-(305,168),0,BF:LOCATE 10,10:PRINT"THE RECAP PAD IS FULL.":LOCATE 13,5:PRINT"Any entry made after this will":LOCATE 15,5:PRINT"start a new pad. If you need the":LOCATE 17,5:PRINT"notes for later, recap one more":LOCATE 19,5
  91. 4010  PRINT"time and take notes.":GOSUB 10000:RETURN
  92. 4400  IF R+S+T>9999 THEN AF=8 ELSE AF=0
  93. 4401  YPOS=28:N$=STR$(R):XPOS=92+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(S):XPOS=172+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(T):XPOS=252+AF-LEN(N$)*8:GOSUB 4500
  94. 4402  RETURN
  95. 4500  IF VAL(N$)<0 THEN PUT (XPOS,YPOS),MIN,PSET:XPOS=XPOS+9
  96. 4510  N$=MID$(N$,2):FOR I=1 TO LEN(N$):SUB%=VAL(MID$(N$,I,1)):GOSUB 4600:XPOS=XPOS+9:NEXT I:RETURN
  97. 4600  ON SUB%+1 GOSUB 4610,4611,4612,4613,4614,4615,4616,4617,4618,4619:RETURN
  98. 4610  PUT (XPOS,YPOS),N0,PSET:RETURN
  99. 4611  PUT (XPOS,YPOS),N1,PSET:RETURN
  100. 4612  PUT (XPOS,YPOS),N2,PSET:RETURN
  101. 4613  PUT (XPOS,YPOS),N3,PSET:RETURN
  102. 4614  PUT (XPOS,YPOS),N4,PSET:RETURN
  103. 4615  PUT (XPOS,YPOS),N5,PSET:RETURN
  104. 4616  PUT (XPOS,YPOS),N6,PSET:RETURN
  105. 4617  PUT (XPOS,YPOS),N7,PSET:RETURN
  106. 4618  PUT (XPOS,YPOS),N8,PSET:RETURN
  107. 4619  PUT (XPOS,YPOS),N9,PSET:RETURN
  108. 5000  CLS:IF JR THEN SCREEN 1:OUT &H3DA,0:OUT &H3DA,0:RETURN ELSE OUT &H3D8,2:RETURN
  109. 5010  IF ENOUGHMEMORY=0 THEN LINE(0,0)-(38,21),0,BF:LINE (0,25)-(19,43),0,BF
  110. 5020  IF JR THEN SCREEN 1:OUT &H3DA,0:OUT &H3DA,10:RETURN ELSE OUT &H3D8,10:RETURN
  111. 6000  IF MSF%=0 THEN RETURN ELSE SF%=NOT SF%
  112. 6010  ON SF%+2 GOSUB 6050,6030:RETURN
  113. 6030  YES$="":NO$="":FANFARE$="":RETURN
  114. 6050  YES$="mbt100o3l20cd":NO$="mbo1t32l14c":FANFARE$="mbt200l9o3acdefga#a#l4cdefl2o2c":RETURN
  115. 8000  AA%=-8:BB%=8:CC%=33:DD%=88:SUB%=2:DEF SEG=MSEG%:CALL MOFF%(AA%,BB%,CC%,DD%,SUB%)
  116. 8001  DEF SEG:RETURN
  117. 8010  B=IC-5:FOR I=1 TO 5:LOCATE 9+I+I,3:PRINT TAB(4+NOT(Z1(B+I)<0))Z1(B+I)TAB(14+NOT(Z2(B+I)<0))Z2(B+I)TAB(24+NOT(Z3(B+I)<0))Z3(B+I)TAB(34);:IF Z4(B+I)=1 THEN PRINT"Yes"; ELSE PRINT "No ";
  118. 8020  NEXT I:LOCATE 21,4:PRINT STRING$(34,32);:RETURN
  119. 8500  GOSUB 8700:FOR I=1 TO 900:NEXT:PUT (54,30),SMILE%,PSET:RETURN
  120. 8600  PUT (52,20),LOOK,PSET:FOR I=1 TO 1700:NEXT:PUT (52,20),EYES,PSET:FOR I=1 TO 1200:NEXT:GOSUB 23000:RETURN
  121. 8700  GOSUB 8600:PUT(52,20),WINK%,PSET:FOR I=1 TO 1400:NEXT:PUT (52,20),EYES,PSET:RETURN
  122. 10000  LOCATE 25,3:PRINT EL$;
  123. 10010  LOCATE 25,9:PRINT"Press ENTER to continue.";
  124. 10020  WHILE INKEY$<>"":WEND
  125. 10022  K$=INKEY$:IF K$="" THEN 10022
  126. 10023  IF K$=CHR$(1) THEN GOSUB 6000:GOTO 10022
  127. 10025  IF K$=CHR$(5) AND RU=0 THEN 29400
  128. 10026  IF K$=CHR$(5) AND EFL<>1 THEN RETURN 27999
  129. 10030  IF K$=" " OR K$=CHR$(13) THEN RETURN
  130. 10040  GOTO 10022
  131. 10100  GG=3:CLS:WC$=CHR$(22)+STRING$(6,95):LI=5:LINE (6,0)-(319,54),2,B:LINE (6,57)-(319,175),2,B
  132. 10105  GOSUB 29030:LOCATE 2,8:PRINT"These numbers fit the rule:":GOSUB 4400:RETURN
  133. 10110  LOCATE 9,4:PRINT"1st       2nd       3rd      Yes/No";:LINE (24,72)-(47,72),1:LINE (103,72)-(127,72),1:LINE (184,72)-(207,72),1:LINE (256,72)-(303,72),1:RETURN
  134. 10120  LOCATE 25,3:PRINT"Press <R> for recap, or <Q> for quiz.";:RETURN
  135. 10150  LINE (128,16)-(319,128),0,BF:RETURN
  136. 10160  LINE (24,80)-(296,168),0,BF:RETURN
  137. 10170  LINE (136,8)-(319,192),0,BF:RETURN
  138. 10190  '*** delay loops ***
  139. 10200  FOR I=1 TO 1000:NEXT I:RETURN
  140. 10205  FOR I=1 TO 1800:NEXT I:RETURN
  141. 10500  LOCATE 23,33:PRINT STR$(L);" -";STR$(RU);:GOSUB 10000:LOCATE 23,33:PRINT"       ";:GOSUB 10120:RETURN
  142. 13000  LC=0:CK$=WC$:WHILE INKEY$<>"":WEND
  143. 13010  SW=0:Z1=0:N$="":Y$=N$:K$=Y$
  144. 13020  LOCATE PO,XPO+Z1:PRINT LEFT$(CK$,TL);
  145. 13030  Y$=INKEY$:IF Y$="" THEN 13030
  146. 13040  J=ASC(Y$):IF J>90 THEN J=J-32:Y$=CHR$(J)
  147. 13041  IF FL=1 THEN 13080
  148. 13050  IF Y$="Q" AND Z1=0 AND D=2 THEN K$="Q":SW=1:Y$="":N$="0":GG=3:RETURN
  149. 13060  IF Y$="R" AND Z1=0 AND D=2 THEN K$="R":SW=1:Y$="":N$="0":RETURN
  150. 13065  IF Y$="-" AND D=2 AND SW<>1 THEN 13120 ELSE IF Y$="-" AND D=1 THEN 13000
  151. 13070  IF N$="-" AND Y$="0" THEN TL=TL+1:GOTO 13000
  152. 13080  IF J=13 AND N$<>"" AND N$<>"-" THEN SW=0:LOCATE PO,XPO+Z1:PRINT STRING$(TL,32);:TL=7:RETURN
  153. 13090  IF J=5 AND D=2 THEN RETURN 27999
  154. 13100  IF J=8 OR (RIGHT$(Y$,1)="S" AND LEN(Y$)>1) THEN 13160
  155. 13105  IF J=1 THEN GOSUB 6000
  156. 13106  IF J=20 AND QU$="of" AND L>2 THEN GOSUB 10500:GOTO 13030
  157. 13110  IF SW=1 THEN 13030
  158. 13115  IF J<LL OR J>UL THEN 13020
  159. 13120  IF Y$="-" AND Z1>0 THEN 13020
  160. 13130  LOCATE PO,XPO+Z1:PRINT Y$;
  161. 13140  Z1=Z1+1:N$=N$+Y$:TL=TL-1:IF LEN(N$)>LI THEN SW=1:WHILE INKEY$<>"":WEND:GOTO 13020
  162. 13150  GOTO 13020
  163. 13160  IF SW=1 AND LEN(N$)<6 THEN Y$=""
  164. 13161  SW=0:K$="":IF Z1<1 THEN 13020 ELSE PRINT CHR$(29)" ";CHR$(29);
  165. 13170  Z1=Z1-1:TL=TL+1:N$=LEFT$(N$,Z1):GOTO 13020
  166. 13500  LOCATE 20+G2,22+GG:PRINT"Press ENTER";
  167. 13501  LOCATE 21+G2,22+GG:PRINT"to continue.";:LINE (163+GG*8,147+G2*8)-(267+GG*8,172+G2*8),2,B:WHILE INKEY$<>"":WEND
  168. 13510  GOTO 10020
  169. 14000  PRINT"_";CHR$(29);:WHILE INKEY$<>"":WEND:N$="":AN$="":SW%=0
  170. 14010  N$=INKEY$:IF N$="" THEN 14010
  171. 14020  J%=ASC(N$):IF J%>90 THEN J%=J%-32:N$=CHR$(J%)
  172. 14025  IF J%<>13 AND J%<>5 AND J%<>8 AND SW%=1 THEN N$="":GOTO 14010
  173. 14030  IF N$="Y" THEN PRINT"Yes_";:SW%=1:LE%=1:AN$="Y"
  174. 14040  IF N$="N" THEN PRINT"No_ ";:SW%=1:LE%=2:AN$="N"
  175. 14045  IF J%=13 AND SW%=1 THEN PRINT STRING$(LE%,29)" ";:RETURN
  176. 14046  IF J%=5 THEN RETURN 27999
  177. 14050  IF J%=8 AND SW%=1 THEN SW%=0:PRINT STRING$(4,29);"    ";STRING$(4,29);:GOTO 14000
  178. 14060  N$="":GOTO 14010
  179. 15000  GG=0:GOSUB 6000:GOSUB 29600:GET (0,0)-(38,21),PRIZE:PUT (0,0),PRIZE:GET (0,25)-(19,28),LOOK:GET (0,32)-(19,35),WINK%:GET (0,40)-(15,43),SMILE%:GET (52,20)-(71,23),EYES:LINE (0,25)-(19,43),0,BF
  180. 15010  LOCATE 3,18:PRINT"So we meet at last! If":LOCATE 4,18:PRINT"you want to take my":LOCATE 5,18:PRINT"throne, you must solve":LOCATE 6,18:PRINT"three final number":LOCATE 7,18:PRINT"riddles.":LOCATE 9,18
  181. 15015  PRINT"They are extremely":LOCATE 10,18:PRINT"tricky!"
  182. 15016  DEF SEG=PL%:LIM%=PEEK(0):POKE 0,LIM%:DEF SEG
  183. 15020  GOSUB 5010:IF ENOUGHMEMORY THEN GET (10,0)-(116,197),GUARD
  184. 15022  GOSUB 13500
  185. 15050  HN=FNR(3)+2
  186. 15060  RANDOMIZE (VAL(RIGHT$(TIME$,2))):RU=FNR(20):C=FNR(20)
  187. 15070  RANDOMIZE (VAL(RIGHT$(TIME$,2))):ON RU GOSUB 40,80,120,160,200,240,280,320,360,400,460,500,540,580,620,650,690,730,770,810
  188. 15075  TL=7:LL=48:UL=57:QU$="of":GG=0:D=2:GOSUB 10100:GOSUB 10110:PO=11:XPO=4
  189. 15080  LOCATE 25,3:PRINT"Press <R> for recap, or <Q> for quiz.";:IF KZ=1 THEN KZ=0:XPO=4
  190. 15085  IF PO>21 THEN GOSUB 8000:PO=21:XPO=4
  191. 15087  GOSUB 13000
  192. 15090  IF K$="Q" THEN 20000
  193. 15100  IF K$="R" THEN GOSUB 19000:GOTO 15080
  194. 15110  X=VAL(N$):XPO=XPO+10
  195. 15130  GOSUB 13000
  196. 15140  IF K$="Q" THEN 20000
  197. 15150  IF K$="R" THEN GOSUB 19000:IF KZ<>1 THEN 15130 ELSE 15080
  198. 15160  Y=VAL(N$):XPO=XPO+10
  199. 15180  GOSUB 13000
  200. 15190  IF K$="Q" THEN 20000
  201. 15200  IF K$="R" THEN GOSUB 19000:IF KZ<>1 THEN 15180 ELSE 15080
  202. 15210  Z=VAL(N$):XPO=XPO+10
  203. 15230  AN=2:ON RU GOSUB 60,100,140,180,220,260,300,340,380,420,480,520,560,600,630,670,710,750,790,830
  204. 15240  IF AN=1 THEN LOCATE PO,XPO:PRINT"Yes";:PLAY YES$:RW=1:GOTO 15252
  205. 15250  LOCATE PO,XPO:PRINT"No";:PLAY NO$:RW=2:WH=WH+1
  206. 15252  IF EM=1 THEN IC=0:EM=0
  207. 15253  XPO=4:IC=IC+1
  208. 15264  Z1(IC)=X:Z2(IC)=Y:Z3(IC)=Z:Z4(IC)=RW:PO=PO+2:R$="":IF WH=HN THEN GOSUB 29000
  209. 15270  IF IC=90 THEN EM=1:GOSUB 4000:GOTO 15075
  210. 15290  ZZ=FRE(H$):GOTO 15080
  211. 16000  EFL=1:CLS:PRINT CHR$(7):LOCATE 10,4:PRINT"Please make sure that the diskette":PRINT:PRINT"   is inserted properly and that disk":PRINT:PRINT"   drive door is closed.":GOSUB 10000:RESUME 29400
  212. 19000  IF IC=0 THEN LOCATE 25,3:PRINT EL$;:LOCATE 25,11:PRINT"You have no entry!";:GOSUB 10205:GOSUB 10120:RETURN
  213. 19005  IF SA=1 THEN SA=0:GOTO 19020
  214. 19010  IF IC<6 THEN LOCATE 25,3:PRINT EL$;:LOCATE 25,8:PRINT"All entries are displayed.";:GOSUB 10205:GOSUB 10120:RETURN
  215. 19020  GOSUB 10160:PO=11
  216. 19030  LOCATE 25,3:PRINT EL$;:FOR I=1 TO IC:LOCATE PO,3:PRINT TAB(4+NOT(Z1(I)<0))Z1(I)TAB(14+NOT(Z2(I)<0))Z2(I)TAB(24+NOT(Z3(I)<0))Z3(I)TAB(34);:IF Z4(I)=1 THEN PRINT"Yes"; ELSE PRINT"No ";
  217. 19040  LC=LC+1:IF LC=6 THEN IF I<IC THEN GOSUB 10010:GOSUB 10160:LC=0:PO=9
  218. 19045  IF LC=6 THEN IF I=IC THEN GOSUB 10010:GOSUB 10160:KZ=1:LC=0:XPO=4:PO=11:RETURN
  219. 19050  PO=PO+2:NEXT I:GOSUB 10010:IF PO>21 THEN GOSUB 10160
  220. 19060  KZ=1:RETURN
  221. 20000  DEF SEG=PL%:POKE 0,L%:DEF SEG:IF ENOUGHMEMORY THEN GOSUB 5000:PUT (10,0),GUARD ELSE GOSUB 29600
  222. 20011  IF KI<>0 THEN GOSUB 5010:GOTO 20031 ELSE LOCATE 3,18:PRINT"I will present you":LOCATE 4,18:PRINT"with three numbers":LOCATE 5,18:PRINT"at a time. You must":LOCATE 6,18
  223. 20012  PRINT"say whether or not":LOCATE 7,18:PRINT"each group fits the":LOCATE 8,18:PRINT"rule.":LOCATE 10,18:PRINT"When you answer five":LOCATE 11,18:PRINT"questions correctly":LOCATE 12,18:PRINT"you pass the quiz":LOCATE 13,18
  224. 20013  PRINT"and win a crown."
  225. 20015  LOCATE 15,18:PRINT"When you pass three":LOCATE 16,18:PRINT"quizzes, I will":LOCATE 17,18
  226. 20016  PRINT"surrender my throne":LOCATE 18,18:PRINT"to you!"
  227. 20030  G2=1:GG=0:GOSUB 5010:GOSUB 13500
  228. 20031  G2=1:GG=0:QU$="on":WH=0:IC=0:DN=FNR(5)
  229. 20041  R1=R:ON RU GOSUB 50,90,120,170,210,240,290,330,370,410,470,510,550,590,625,650,700,740,780,820:IF R=R1 THEN 20041
  230. 20042  IF DN=RC+1 THEN 20050
  231. 20043  IF FNR(4)=2 THEN 20050
  232. 20044  GOTO 21000
  233. 20050  ON RU GOSUB 20062,20060,20064,20064,20066,20072,20074,20076,20078,20080,780,411,411,780,20084,411,411,780,470,20066
  234. 20055  GOTO 21000
  235. 20060  R=FNR(15)*5:S=FNR(100):T=R+10:RETURN
  236. 20062  GOSUB 30:R=N:S=R+4:T=S+4:RETURN
  237. 20064  R=FNR(30):S=FNR(30):T=R+S:RETURN
  238. 20065  R=FNR(40):S=R+FNR(10):T=S+FNR(10):RETURN
  239. 20066  N=FNR(10):IF N<>5 THEN S=N*N:R=S-2:T=S+2:RETURN ELSE RETURN
  240. 20070  RR=T:GOSUB 20100:T=RR
  241. 20072  R=FNR(C):S=FNR(R):T=C+(R+S):RETURN
  242. 20074  GOTO 20062
  243. 20076  GOSUB 20:R=N:S=R+2:T=S+2:RETURN
  244. 20078  R=FNR(80):T=FNR(80):S=T+2:T=S+2:RETURN
  245. 20080  GOSUB 20:R=N:GOSUB 30:S=N:T=R+S:RETURN
  246. 20084  R=FNR(10)*10:S=FNR(10)*10:T=R+S:RETURN
  247. 21000  GOSUB 10170:LINE (144,12)-(318,51),2,B:X=R:Y=S:Z=T
  248. 21010  AN=2:ON RU GOSUB 60,100,140,180,220,260,300,340,380,420,480,520,560,600,630,670,710,750,790,830:IF R+S+T>9999 THEN AF=8 ELSE AF=0
  249. 21015  YPOS=24:N$=STR$(R):XPOS=192+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(S):XPOS=248+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(T):XPOS=304+AF-LEN(N$)*8:GOSUB 4500
  250. 21020  GG=2:LOCATE 9,20:PRINT"Do these numbers fit":LOCATE 10,20:PRINT"the rule? ";:GOSUB 14000
  251. 21050  IF AN=1 AND AN$="Y" THEN 21300
  252. 21060  IF AN=2 AND AN$="N" THEN 21300
  253. 21100  LOCATE 13,20:PLAY NO$:PRINT"Wrong. You will have":LOCATE 14,20:PRINT"to try again.":IF L%<4 THEN KI=0
  254. 21105  GOSUB 13500:RC=0:RES=L:GOTO 27999
  255. 21300  PLAY YES$:IF RC<4 THEN LOCATE 13,20:PRINT"Right!":LOCATE 14,20:PRINT"You may continue the":LOCATE 15,20:PRINT"challenge...";:GOSUB 13500:RC=RC+1:GOTO 20041
  256. 21310  LOCATE 12,22:PRINT"Right! You have":LOCATE 13,22:PRINT"passed the quiz":LOCATE 14,22
  257. 21311  PRINT"and won a crown.";:KI=KI+1:PO=15:XPO=26:GOSUB 13500
  258. 21320  RC=0:GOSUB 10170:GOSUB 10200
  259. 21325  IF KI=3 THEN SR=SR+1:GOTO 21400
  260. 21330  ON KI GOSUB 8600,8700,0:GOSUB 10200:LOCATE 3,20:PRINT"You're pretty smart,":LOCATE 4,20:PRINT"but you still must":LOCATE 5,20:PRINT"pass ";:PRINT J$((3-KI)+4);" more riddle";:IF KI<>2 THEN PRINT"s";
  261. 21331  LOCATE 6,20:PRINT"before you become":LOCATE 7,20:PRINT"the new ruler."
  262. 21340  FL=0:GOSUB 13500:GOTO 15060
  263. 21400  GOSUB 8500:LOCATE 3,21:PRINT"Congratulations Your":LOCATE 4,21:PRINT"Highness! You have":LOCATE 5,21:PRINT"made it to the top.":GOSUB 10200:LOCATE 7,21:PRINT"This time...";
  264. 21410  PLAY FANFARE$:DEF SEG=PL%:POKE 0,L%:DEF SEG:GOSUB 13500
  265. 21420  GOSUB 10170:GOTO 29400
  266. 22000  PUT (XPO*8+2,PO*8),PRIZE,PSET:RETURN
  267. 23000  IF KI=1 THEN PO=11:XPO=26:GOSUB 22000:RETURN
  268. 23010  IF KI=2 THEN PO=14:XPO=21:GOSUB 22000:XPO=XPO+10:GOSUB 22000:RETURN
  269. 23020  PO=10:XPO=26:GOSUB 22000:PO=14:XPO=21:GOSUB 22000:XPO=XPO+10:GOSUB 22000:RETURN
  270. 27999  IF GG=3 AND ENOUGHMEMORY THEN CLS:GOSUB 5000:PUT (10,0),GUARD:GOSUB 5010 ELSE IF GG=3 THEN GOSUB 29600:GOSUB 5010 ELSE GOSUB 10170
  271. 28000  LOCATE 4,18:PRINT"Would you like:":LOCATE 6,18:PRINT"1. Same level,":LOCATE 7,21:PRINT"same rule":LOCATE 9,18:PRINT"2. Same level,":LOCATE 10,21:PRINT"different rule, or":LOCATE 12,18:PRINT"3. Return to the menu":G2=0
  272. 28010  LL=49:UL=51:LI=0:J=0:SW=J:QU$="off":RC=0:WH=0:LOCATE 15,18:PRINT"Enter selection:";:PO=15:XPO=35:WC$=CHR$(22)+" ":TL=2:FL=1:D=1:GOSUB 13000:A=VAL(N$)
  273. 28040  FL=0:IF A=1 THEN 15070
  274. 28050  IF A=2 THEN SV=RU:GOTO 28065
  275. 28060  IF A=3 THEN 29400
  276. 28065  RU=FNR(20):IF RU=SV THEN 28065
  277. 28070  IC=0:GOTO 15070
  278. 28999  '*** hint ***
  279. 29000  R1=R:S1=S:T1=T
  280. 29001  ON RU GOSUB 40,80,120,160,200,240,280,320,360,400,460,500,540,580,620,650,690,730,770,810:IF R=R1 THEN 29001
  281. 29002  HN=FNR(3)+3:LOCATE 2,3:PRINT EL$;
  282. 29010  GOSUB 29030:LOCATE 2,3:PRINT J$(FNR(4)):LOCATE 3,3:PRINT"these numbers also fit the rule:";
  283. 29020  GOSUB 4400:GOSUB 10000:R=R1:S=S1:T=T1:GOSUB 29030:GOSUB 10105:WH=0:RETURN
  284. 29030  LINE (16,8)-(304,46),0,BF:RETURN
  285. 29400  ON ERROR GOTO 16000:RUN "menu"
  286. 29500  DEFINT A-J,L-Q:R=18:DEF SEG:DIM RET%(26),TITLE%(242),N0(R),N1(R),N2(R),N3(R),N4(R),N5(R),N6(R),N7(R),N8(R),N9(R),MIN(R):DEF SEG:BLOAD "image.img",VARPTR(RET%(0))
  287. 29501  LD$="UNPACK.BLD":MAXIMUM%=16500
  288. 29502  DEF SEG=&H40:MEM%=PEEK(&H13)+256*PEEK(&H14)
  289. 29504  ASMPROG%=(MEM%*1024/16)-108
  290. 29506  SEGMENT%=INT((ASMPROG%*16-MAXIMUM%)/16)
  291. 29508  DEF SEG=ASMPROG%:BLOAD LD$,0
  292. 29510  UNPACKIT%=0:PACK%=0:DEF SEG
  293. 29512  IF MEM%>80 THEN ENOUGHMEMORY=1 ELSE ENOUGHMEMORY=0
  294. 29520  DIM Z1(92),Z2(92),Z3(92),Z4(92):IF ENOUGHMEMORY THEN DIM DIS(2520),GUARD(2822)
  295. 29525  DIM PRIZE(112),EYES(12),LOOK(12),WINK%(12),SMILE%(10)
  296. 29530  REM def seg=0:poke &h6c,84:poke &h6d,0:poke &h6e,0:poke &h6f,0:poke 84,&hcf:def seg:def seg=&h40:if peek (&h6b)<>&ha5 then 30000
  297. 29535  DEF SEG=&HF000:JR=(PEEK(&HFFFE)=&HFD)
  298. 29536  DEF SEG=0:PL%=INT((((PEEK(&H510)+256*PEEK(&H511))*16+VARPTR(#2))/16)+1):DEF SEG
  299. 29537  DEF SEG=&H40:MOFF%=PEEK(4)+256*PEEK(5):MSEG%=PEEK(6)+256*PEEK(7):DEF SEG
  300. 29540  DEF FNR(N)=1+INT(RND*N)
  301. 29545  EL$=STRING$(37,32)
  302. 29550  J$(1)="Just between you and me...":J$(2)="I shouldn't tell you this, but":J$(3)="Psst...Don't tell anyone, but":J$(4)="Shhh...Our secret...":J$(5)="one":J$(6)="two":GOTO 15000
  303. 29600  FILE1$="guard"+L$+".pak":DEF SEG=SEGMENT%:BLOAD FILE1$,0:DEF SEG=ASMPROG%:GOSUB 5000:CALL PACK%(SEGMENT%,UNPACKIT%):RETURN
  304. 29601  RETURN
  305. 30000  CLS:LOCATE 6,2,0:PRINT"Unauthorized copying of this diskette":PRINT:PRINT" is unlawful.":PRINT:PRINT" Violators will be prosecuted to the":PRINT:PRINT" full extent of the law."
  306. 30001  PRINT CHR$(7);:GOTO 30001
  307.