home *** CD-ROM | disk | FTP | other *** search
/ The Glitch Apple Disk Collection / 2014.glitch.apple.collection.zip / indexed / OTHELLO.DSK / OTHELLO--HIRES.int < prev    next >
Text File  |  2014-09-09  |  10KB  |  329 lines

  1. 0 LOMEM:6488
  2. 1 I=J=MVI=MVJ=MI=MJ=IF=IA=JA=L=GOC
  3. 2 PRINT "<CTRL-D>BLOAD OTHELLO-X"
  4. 5 GOSUB 20000
  5. 10 DIM B(100),DIR(240)
  6. 20 DIM DRSPON$(2),IAA(8),JAA(8),MOVESI(30),MOVESJ(30),LC(30),NFLIP(30)
  7. 30 DRSPON$="YN"
  8. 35 DIM OUT(3),POUT(100)
  9. 36 DIM NCI(4),NCJ(4)
  10. 37 OUT(1)=0:OUT(2)=12:OUT(3)=15
  11. 40 IAA(1)=-1:IAA(2)=-1:IAA(3)=-1:IAA(4)=0:IAA(5)=1:IAA(6)=1:IAA(7)=1:IAA(8)=0
  12. 50 JAA(1)=-1:JAA(2)=0:JAA(3)=1:JAA(4)=1:JAA(5)=1:JAA(6)=0:JAA(7)=-1:JAA(8)=-1
  13. 60 FOR I=1 TO 10
  14. 62 FOR J=1 TO 10
  15. 64 B(J+(I-1)*10)=0:IF I=1 OR I=10 THEN B(J+(I-1)*10)=100:IF J=1 OR J=10 THEN B(J+(I-1)*10)=100
  16. 66 NEXT J
  17. 68 NEXT I
  18. 70 B(45)=1:B(46)=-1:B(55)=-1:B(56)=1
  19. 74 GOSUB 12000
  20. 75 CALL -936:VTAB 23
  21. 80 NM=0:NHD=0:GOSUB 3500
  22. 90 PRINT "WELCOME TO THE GAME OF OTHELLO.":PRINT "DO YOU WISH TO GO FIRST?":PRINT "(YOU ARE WHITE IF YOU GO FIRST.)"
  23. 100 INPUT "ENTER Y OR N:",DRSPON$
  24. 110 OC=1
  25. 120 IF DRSPON$="N" THEN 340
  26. 130 GOSUB 10000
  27. 140 NM=NHD
  28. 150 IF NM=60 THEN 620
  29. 160 GOC=-OC:GOSUB 2000:OC=-GOC
  30. 170 REM 
  31. 180 IF IM=0 THEN 410
  32. 184 CALL -936:VTAB 22
  33. 185 CALL -198
  34. 190 PRINT :INPUT "YOUR MOVE (DOWN,ACROSS) ",MOVEI,MOVEJ
  35. 220 MOVEJ=MOVEJ+1
  36. 230 MOVEI=MOVEI+1
  37. 240 FOR I=1 TO IM
  38. 250 IF MOVESI(I)=MOVEI AND MOVESJ(I)=MOVEJ THEN 300
  39. 260 NEXT I
  40. 270 PRINT "MOVE INVALID. PLEASE RE-ENTER"
  41. 290 GOTO 190
  42. 300 NM=NM+1
  43. 310 IF=I:GOC=-OC:GOSUB 4000
  44. 320 GOSUB 3500
  45. 330 GOTO 440
  46. 340 OC=-1
  47. 350 GOSUB 10000
  48. 360 B(65)=1
  49. 370 B(55)=1
  50. 380 NM=NHD+1
  51. 390 GOSUB 3500
  52. 400 GOTO 150
  53. 410 PRINT "I CAN SEE NO MOVE FOR YOU,"
  54. 420 PRINT "SO I WILL MOVE IF I CAN"
  55. 440 IF NM=60 THEN 620
  56. 450 GOC=OC:GOSUB 2000:OC=GOC
  57. 452 CO=-OC
  58. 470 IF IM=0 THEN 570
  59. 480 GOSUB 4500
  60. 490 MOVEI=MOVESI(IF)-1
  61. 500 MOVEJ=MOVESJ(IF)-1
  62. 505 CALL -936:VTAB 22:CALL -198
  63. 510 PRINT "MY MOVE IS: ";MOVEI;",";MOVEJ
  64. 520 PRINT 
  65. 530 GOC=OC:GOSUB 4000:OC=GOC
  66. 540 NM=NM+1
  67. 550 GOSUB 3500
  68. 560 GOTO 150
  69. 570 INPUT "DO YOU HAVE A MOVE?",DRSPON$
  70. 600 IF DRSPON$="Y" THEN 150
  71. 610 IF IM#0 THEN 440
  72. 620 GOC=OC:GNOC=NOC:GOSUB 3000:NOC=GNOC:OC=GOC
  73. 630 GOC=-OC:GNOC=NC:GOSUB 3000:OC=-GOC:NC=GNOC
  74. 640 IF NOC<=NC THEN 670
  75. 650 PRINT "CONGRATULATIONS!":PRINT "YOU PLAYED WELL AND HAVE WON."
  76. 660 GOTO 710
  77. 670 IF NOC=NC THEN 690
  78. 680 PRINT "YOU PLAYED WELL.":PRINT "HOWEVER, YOUR LUCK WAS BAD":PRINT "AND I HAVE WON."
  79. 685 GOTO 710
  80. 690 PRINT "YOU PLAYED WELL AND WE HA        VE TIED.":PRINT "I WAS LUCKY."
  81. 710 INPUT "DO YOU WISH TO PLAY AGAIN?",DRSPON$
  82. 720 IF DRSPON$="Y" THEN 60
  83. 722 IF DRSPON$#"S" THEN 740
  84. 724 PRINT NOC;"-";NC:GOTO 710
  85. 740 END 
  86. 2000 REM  MOVEG SUBROUTINE
  87. 2040 FOR I=1 TO 30
  88. 2050 LC(I)=0
  89. 2060 NFLIP(I)=0:NEXT I
  90. 2070 IM=0
  91. 2080 FOR I=2 TO 9
  92. 2090 FOR J=2 TO 9
  93. 2100 IF B(J+(I-1)*10)#0 THEN 2340
  94. 2110 IC=0
  95. 2120 FOR L=1 TO 8
  96. 2130 IA=IAA(L)
  97. 2140 JA=JAA(L)
  98. 2150 IF B(J+JA+(I+IA-1)*10)#GOC THEN 2300
  99. 2160 IV=1
  100. 2170 IV=IV+1
  101. 2180 MVI=I+IV*IA
  102. 2190 MVJ=J+IV*JA
  103. 2200 IF B(MVJ+(MVI-1)*10)=0 THEN 2300
  104. 2210 IF B(MVJ+(MVI-1)*10)=100 THEN 2300
  105. 2220 IF B(MVJ+(MVI-1)*10)=GOC THEN 2170
  106. 2230 IF IC=1 THEN 2260
  107. 2240 IM=IM+1
  108. 2250 IC=1
  109. 2260 NFLIP(IM)=NFLIP(IM)+IV
  110. 2270 LC(IM)=LC(IM)+1
  111. 2280 LD=LC(IM)
  112. 2290 DIR(LD+(IM-1)*8)=L
  113. 2300 NEXT L
  114. 2310 IF IC=0 THEN 2340
  115. 2320 MOVESI(IM)=I
  116. 2330 MOVESJ(IM)=J
  117. 2340 NEXT J:NEXT I
  118. 2350 IF IM>0 THEN 2370
  119. 2360 IF OCA=GOC THEN PRINT "I HAVE NO MOVE AND MUST PASS."
  120. 2370 RETURN 
  121. 3000 REM  COUNT SUBROUTINE
  122. 3010 GNOC=0
  123. 3020 FOR I=2 TO 9
  124. 3030 FOR J=2 TO 9
  125. 3040 IF B(J+(I-1)*10)#GOC THEN 3060
  126. 3050 GNOC=GNOC+1
  127. 3060 NEXT J:NEXT I
  128. 3070 RETURN 
  129. 3500 REM  BOARDP SUBROUTINE
  130. 3520 NMP=NM-NHD
  131. 3530 PRINT "BOARD POSITION AFTER ";NMP;" MOVES"
  132. 3570 FOR I=1 TO 10
  133. 3580 FOR J=1 TO 10
  134. 3582 IF I#1 AND I#10 AND J#1 AND J#10 THEN 3590
  135. 3584 POUT(J+(I-1)*10)=4
  136. 3586 GOTO 3605
  137. 3590 IS=B(J+(I-1)*10)+2
  138. 3600 POUT(J+(I-1)*10)=OUT(IS)
  139. 3605 NEXT J:NEXT I
  140. 3606 V=8
  141. 3610 FOR I=2 TO 9
  142. 3640 FOR J=2 TO 9
  143. 3645 POT=POUT((I-1)*10+J):IF POT#0 AND POT#15 THEN 3670
  144. 3647  POKE 801,0: POKE 800,23+(J-2)*24: POKE 802,21+(I-2)*16:CALL 3761
  145. 3650  POKE 28,255*(POT=15)
  146. 3654  POKE 804,6333 MOD 256: POKE 805,6333/256
  147. 3660 CALL 3805
  148. 3670 NEXT J
  149. 3680 V=V+3
  150. 3690 NEXT I
  151. 3700 RETURN 
  152. 4000 REM  BOARDC SUBROUTINE
  153. 4010 MI=MOVESI(IF)
  154. 4020 MJ=MOVESJ(IF)
  155. 4030 B((MI-1)*10+MJ)=-GOC
  156. 4040 NDIR=LC(IF)
  157. 4050 FOR I=1 TO NDIR
  158. 4060 L=DIR((IF-1)*8+I)
  159. 4070 IA=IAA(L)
  160. 4080 JA=JAA(L)
  161. 4090 IV=0
  162. 4100 IV=IV+1
  163. 4110 MVI=MI+IV*IA
  164. 4120 MVJ=MJ+IV*JA
  165. 4130 IF B((MVI-1)*10+MVJ)=-GOC THEN 4160
  166. 4140 B((MVI-1)*10+MVJ)=-GOC
  167. 4150 GOTO 4100
  168. 4160 NEXT I
  169. 4170 RETURN 
  170. 4500 REM  MOVEE SUBROUTINE
  171. 4540 FOR I=1 TO IM
  172. 4560 MI=MOVESI(I)
  173. 4580 MJ=MOVESJ(I)
  174. 4600 IF MI#2 AND MI#9 THEN 5280
  175. 4620 IF MJ#2 AND MJ#9 THEN 4660
  176. 4640 NFLIP(I)=NFLIP(I)+50:GOTO 7080
  177. 4660 SR=1:SW=0:OK=0:SRP=0
  178. 4680 FOR P=MJ+1 TO 9
  179. 4700 XX=B((MI-1)*10+P)
  180. 4720 IF XX=CO THEN 4820
  181. 4740 IF XX#-CO OR SW=1 THEN 4780
  182. 4760 SR=-1:SW=1
  183. 4780 IF XX=-CO OR SW=1 THEN 4820
  184. 4800 SR=0:SW=1:SRP=P
  185. 4820 IF XX=-CO THEN OK=OK+1
  186. 4840 IF SR=-1 AND OK=P-MJ-1 AND OK>0 AND XX=CO THEN OK=10
  187. 4860 IF OK#10 THEN 4880:SR=1:SW=0
  188. 4880 NEXT P
  189. 4900 SL=1:SW=0:OK=0:SLP=0
  190. 4920 FOR P=MJ-1 TO 2 STEP -1
  191. 4940 XX=B((MI-1)*10+P)
  192. 4960 IF XX=CO THEN 5060
  193. 4980 IF XX#-CO OR SW=1 THEN 5020
  194. 5000 SL=-1:SW=1
  195. 5020 IF XX=-CO OR SW=1 THEN 5060
  196. 5040 SL=0:SW=1:SLP=P
  197. 5060 IF XX=-CO THEN OK=OK+1
  198. 5080 IF SL=-1 AND OK=MJ-P-1 AND OK>0 AND XX=CO THEN OK=10
  199. 5100 IF OK#10 THEN 5120:SL=1:SW=0
  200. 5120 NEXT P
  201. 5140 IF SL=0 AND SR=0 THEN NFLIP(I)=NFLIP(I)+30
  202. 5160 IF SL=-1 AND SR=-1 THEN NFLIP(I)=NFLIP(I)+40
  203. 5200 IF SL=1 THEN NFLIP(I)=NFLIP(I)+30
  204. 5220 IF SR=1 THEN NFLIP(I)=NFLIP(I)+30
  205. 5240 IF SL=0 AND SR=-1 OR SL=-1 AND SR=0 THEN NFLIP(I)=NFLIP(I)-30
  206. 5250 IF SL=0 AND SR=-1 AND (SLP=2 OR SLP=9) THEN NFLIP(I)=NFLIP(I)-20
  207. 5260 IF SR=0 AND SL=-1 AND (SRP=2 OR SRP=9) THEN NFLIP(I)=NFLIP(I)-20
  208. 5280 IF MJ#2 AND MJ#9 THEN 7000
  209. 5300 SD=1:SW=0:OK=0:SDP=0
  210. 5320 FOR P=MI+1 TO 9
  211. 5340 XX=B((P-1)*10+MJ)
  212. 5360 IF XX=CO THEN 5460
  213. 5380 IF XX#-CO OR SW=1 THEN 5420
  214. 5400 SD=-1:SW=1
  215. 5420 IF XX=-CO OR SW=1 THEN 5460
  216. 5440 SD=0:SW=1:SDP=P
  217. 5460 IF XX=-OC THEN OK=OK+1
  218. 5480 IF SD=-1 AND OK=P-MI-1 AND OK>0 AND XX=CO THEN OK=10
  219. 5500 IF OK#10 THEN 5520:SD=1:SW=0
  220. 5520 NEXT P
  221. 5540 SU=1:SW=0:OK=0:SUP=0
  222. 5560 FOR P=MI-1 TO 2 STEP -1
  223. 5580 XX=B((P-1)*10+MJ)
  224. 5600 IF XX=CO THEN 5700
  225. 5620 IF XX#-CO OR SW=1 THEN 5660
  226. 5640 SU=-1:SW=1
  227. 5660 IF XX=-CO OR SW=1 THEN 5700
  228. 5680 SU=0:SW=1:SUP=P
  229. 5700 IF XX=-C0 THEN OK=OK+1
  230. 5720 IF SU=-1 AND OK=MI-P-1 AND OK>0 AND XX=CO THEN OK=10
  231. 5740 IF OK#10 THEN 5760:SU=1:SW=0
  232. 5760 NEXT P
  233. 5780 IF SU=0 AND SD=0 THEN NFLIP(I)=NFLIP(I)+30
  234. 5800 IF SU=-1 AND SD=-1 THEN NFLIP(I)=NFLIP(I)+40
  235. 5820 IF SU=1 THEN NFLIP(I)=NFLIP(I)+30
  236. 5840 IF SD=1 THEN NFLIP(I)=NFLIP(I)+30
  237. 5860 IF SU=0 AND SD=-1 THEN NFLIP(I)=NFLIP(I)-30
  238. 5880 IF SU=-1 AND SD=0 THEN NFLIP(I)=NFLIP(I)-30
  239. 5890 IF SU=-1 AND SD=0 AND (SDP=2 OR SDP=9) THEN NFLIP(I)=NFLIP(I)-20
  240. 5900 IF SU=0 AND SD=-1 AND (SUP=2 OR SUP=9) THEN NFLIP(I)=NFLIP(I)-20
  241. 7000 IF MI#3 AND MI#8 THEN 7040
  242. 7020 NFLIP(I)=NFLIP(I)-23
  243. 7040 IF MJ#3 AND MJ#8 THEN 7080
  244. 7060 NFLIP(I)=NFLIP(I)-23
  245. 7080 IF MJ#2 AND MJ#9 THEN 7180
  246. 7100 IF MI=3 AND B(40+MJ)=CO AND B(30+MJ)=0 AND B(10+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
  247. 7120 IF MI=5 AND B(30+MJ)=0 AND B(20+MJ)=CO AND B(10+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
  248. 7140 IF MI=6 AND B(60+MJ)=0 AND B(70+MJ)=CO AND B(80+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
  249. 7160 IF MI=8 AND B(50+MJ)=CO AND B(60+MJ)=0 AND B(80+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
  250. 7180 IF MI#2 AND MI#9 THEN 7280
  251. 7200 IF MJ=3 AND B((MI-1)*10+2)=0 AND B((MI-1)*10+4)=0 AND B((MI-1)*10+5)=CO THEN NFLIP(I)=NFLIP(I)-40
  252. 7220 IF MJ=5 AND B((MI-1)*10+2)=0 AND B((MI-1)*10+3)=CO AND B((MI-1)*10+4)=0 THEN NFLIP(I)=NFLIP(I)-40
  253. 7240 IF MJ=6 AND B((MI-1)*10+7)=0 AND B((MI-1)*10+8)=CO AND B((MI-1)*10+9)=0 THEN NFLIP(I)=NFLIP(I)-40
  254. 7260 IF MJ=8 AND B((MI-1)*10+6)=CO AND B((MI-1)*10+7)=0 AND B((MI-1)*10+9)=0 THEN NFLIP(I)=NFLIP(I)-40
  255. 7280 NEXT I
  256. 8000 XFLIP=-200:XLC=0
  257. 8010 FOR I=1 TO IM
  258. 8020 IF NFLIP(I)<XFLIP THEN 8180
  259. 8040 IF NFLIP(I)=XFLIP THEN 8080
  260. 8060 XFLIP=NFLIP(I):IF=I:XLC=LC(I):GOTO 8180
  261. 8080 IF LC(I)<XLC THEN 8180
  262. 8100 IF LC(I)=XLC THEN 8140
  263. 8120 XFLIP=NFLIP(I):IF=I:XLC=LC(I):GOTO 8180
  264. 8140 XX= RND (2):IF XX=0 THEN 8180
  265. 8160 XFLIP=NFLIP(I):IF=I:XLC=LC(I)
  266. 8180 NEXT I
  267. 9000 RETURN 
  268. 10000 REM  HANDIC SUBROUTINE
  269. 10010 NHD=0
  270. 10020 INPUT "DO YOU WISH TO BE GIVEN A HANDICAP?",DRSPON$
  271. 10030 IF DRSPON$="Y" THEN 10120
  272. 10040 INPUT "DO YOU WISH TO GIVE ME A HANDICAP?",DRSPON$
  273. 10050 IF DRSPON$="N" THEN 10170
  274. 10060 NAH=-OC
  275. 10070 INPUT "HOW MANY CORNERS(1-4)",NHD
  276. 10080 IF NHD<1 OR NHD>4 THEN 10070
  277. 10090 GOSUB 11000
  278. 10100 SNM=NM:SNHD=NHD:NM=0:NHD=0:GOSUB 3500:NM=SNM:NHD=SNHD
  279. 10110 GOTO 10170
  280. 10120 NAH=OC
  281. 10130 INPUT "HOW MANY CORNERS(1-4)",NHD
  282. 10140 IF NHD<1 OR NHD>4 THEN 10130
  283. 10150 GOSUB 11000
  284. 10160 SNM=NM:SNHD=NHD:NM=0:NHD=0:GOSUB 3500:NM=SNM:NHD=SNHD
  285. 10170 RETURN 
  286. 11000 REM  HANDI SUBROUTINE
  287. 11010 NCI(1)=2:NCJ(1)=2:NCI(2)=9:NCJ(2)=9:NCI(3)=2:NCJ(3)=9:NCI(4)=9:NCJ(4)=2
  288. 11020 SIGN=-1
  289. 11030 IF NAH=OC THEN SIGN=1
  290. 11040 FOR I=1 TO NHD
  291. 11050 I1=NCI(I)
  292. 11060 I2=NCJ(I)
  293. 11070 B((I1-1)*10+I2)=SIGN*OC
  294. 11075 NEXT I
  295. 11080 RETURN 
  296. 12000 CALL 3072:CALL -936
  297. 12010  POKE 801,0: POKE 812,170: POKE 806,1: POKE 807,0
  298. 12020 FOR I=12 TO 156
  299. 12040  POKE 800,12: POKE 802,I:CALL 3780
  300. 12060  POKE 800,224:CALL 3786
  301. 12080 NEXT I
  302. 13000  POKE 812,0
  303. 13010 FOR I=20 TO 148 STEP 16
  304. 13020  POKE 800,22: POKE 802,I:CALL 3780
  305. 13040  POKE 800,214:CALL 3786
  306. 13060 NEXT I
  307. 13100 FOR I=21 TO 213 STEP 24
  308. 13110  POKE 800,I: POKE 802,20:CALL 3780
  309. 13130  POKE 802,148:CALL 3786
  310. 13150 NEXT I
  311. 13200 FOR I=1 TO 8
  312. 13220  POKE 800,2: POKE 802,20+(I-1)*16+5
  313. 13240 CALL 3761
  314. 13250  POKE 28,255: POKE 804,(5448+I*26) MOD 256: POKE 805,(5448+I*26)/256:CALL 3805
  315. 13260 NEXT I
  316. 13300 FOR I=1 TO 8
  317. 13310  POKE 800,22+(I-1)*24+8: POKE 802,2:CALL 3761
  318. 13340  POKE 28,255: POKE 804,(5448+I*26) MOD 256: POKE 805,(5448+I*26)/256:CALL 3805
  319. 13360 NEXT I
  320. 13990 RETURN 
  321. 20000 TEXT :CALL -936
  322. 20100 VTAB 2:CALL -384:TAB 8:PRINT "HIGH RESOLUTION OTHELLO":CALL -380
  323. 20200 PRINT :TAB 8:PRINT "CONCOCTED BY JIM HILGER"
  324. 20400 VTAB 15:PRINT "WARNING: THIS GAME SETS LOMEM TO A WEIRD";:PRINT "NUMBER.  IF YOU VALUE YOUR SANITY, RESET";
  325. 20500 PRINT "LOMEM TO 2048 WHEN OTHELLO IS THROUGH!"
  326. 20600 VTAB 20:PRINT "UNFORTUNATELY, THIS GAME HAS SNOB APPEAL";:PRINT "-- IT REQUIRES A 48K APPLE.  PLEASE"
  327. 20700 PRINT "GO BUY MORE CORE AT THIS TIME, IF YOU":PRINT "HAVE LESS THAN 48K."
  328. 20900 RETURN 
  329.