home *** CD-ROM | disk | FTP | other *** search
/ Loadstar 194 / 194.d81 / z.gomoko+ (.txt) < prev   
Commodore BASIC  |  2022-08-26  |  17KB  |  770 lines

  1. 1 rem "z.gomoko" 2000.05.31                   zip basic 2.0 source
  2. 10 x=176
  3. 12 gosub674
  4. 14 v=a
  5. 16 y=peek(178)
  6. 18 ify=1then42
  7. 20 ify=2then38
  8. 22 ify=3then34
  9. 24 ify=4then30
  10. 26 gosub584
  11. 28 goto999
  12. 30 gosub554
  13. 32 goto999
  14. 34 gosub278
  15. 36 goto999
  16. 38 gosub252
  17. 40 goto999
  18. 42 gosub102
  19. 44 goto999
  20. 100 rem ------------------------------
  21. 102 rem max line move                           in-p,r,t; out-g,l
  22. 104 rem ------------------------------
  23. 106 x=v+436
  24. 108 t=peek(x)
  25. 110 x=v+437
  26. 112 p=peek(x)
  27. 114 x=v+438
  28. 116 r=peek(x)
  29. 118 rem ---
  30. 120 x=v+426
  31. 122 gosub674
  32. 124 b=a
  33. 126 x=v+428
  34. 128 gosub674
  35. 130 q=a
  36. 132 g=0
  37. 134 l=0
  38. 136 u=0
  39. 138 h=0
  40. 140 w=0
  41. 142 fora=btoq
  42. 144 o=0
  43. 146 m=0
  44. 148 e=a
  45. 150 gosub642
  46. 152 x=fand4
  47. 154 ifx=0then234
  48. 156 fori=422to425
  49. 158 x=v+i
  50. 160 d=peek(x)
  51. 162 gosub432
  52. 164 ifk<4then232
  53. 166 gosub320
  54. 168 ifk<lthen232
  55. 170 ift<4then174
  56. 172 gosub476
  57. 174 ifk>lthen200
  58. 176 ift=1then232
  59. 178 o=o+n
  60. 180 ifo<uthen232
  61. 182 m=m+1
  62. 184 ifo>uthen204
  63. 186 ift=2then232
  64. 188 ifm<hthen232
  65. 190 ifm>hthen204
  66. 192 ift=3then232
  67. 194 ifs<wthen232
  68. 196 ifs>wthen204
  69. 198 goto232
  70. 200 m=1
  71. 202 o=n
  72. 204 w=s
  73. 206 h=m
  74. 208 u=o
  75. 210 l=k
  76. 212 g=a
  77. 214 ifl<4then232
  78. 216 ift=1then228
  79. 218 ifp=rthen228
  80. 220 ift=4then232
  81. 222 ifu<8then232
  82. 224 ift=2then228
  83. 226 ifh<4then232
  84. 228 i=425
  85. 230 a=q
  86. 232 next
  87. 234 next
  88. 236 rem ---
  89. 238 a=g
  90. 240 x=v+434
  91. 242 gosub654
  92. 244 x=v+440
  93. 246 pokex,l
  94. 248 return
  95. 250 rem ------------------------------
  96. 252 rem single move points                      in-a,p; out-s
  97. 254 rem ------------------------------
  98. 256 x=v+434
  99. 258 gosub674
  100. 260 x=v+437
  101. 262 p=peek(x)
  102. 264 rem ---
  103. 266 gosub476
  104. 268 rem ---
  105. 270 x=v+441
  106. 272 pokex,s
  107. 274 return
  108. 276 rem ------------------------------
  109. 278 rem square max line                         in-a,r; out-l
  110. 280 rem win(l>=4)
  111. 282 rem ------------------------------
  112. 284 x=v+434
  113. 286 gosub674
  114. 288 x=v+438
  115. 290 r=peek(x)
  116. 292 rem ---
  117. 294 l=0
  118. 296 fori=422to425
  119. 298 x=v+i
  120. 300 d=peek(x)
  121. 302 gosub320
  122. 304 ifk<lthen308
  123. 306 l=k
  124. 308 next
  125. 310 rem ---
  126. 312 x=v+440
  127. 314 pokex,l
  128. 316 return
  129. 318 rem ------------------------------
  130. 320 rem direction max line                      in-a,d,r,t; out-k,n
  131. 322 rem k=markers(0-4) n=free ends(0-2)
  132. 324 rem ------------------------------
  133. 326 k=0
  134. 328 n=0
  135. 330 e=a
  136. 332 e=e+d
  137. 334 gosub642
  138. 336 x=fandr
  139. 338 ifx=0then344
  140. 340 k=k+1
  141. 342 goto332
  142. 344 x=fand4
  143. 346 ifx=0then350
  144. 348 n=n+1
  145. 350 e=a
  146. 352 e=e-d
  147. 354 gosub642
  148. 356 x=fandr
  149. 358 ifx=0then364
  150. 360 k=k+1
  151. 362 goto352
  152. 364 x=fand4
  153. 366 ifx=0then370
  154. 368 n=n+1
  155. 370 rem --- (.ox.o.)=(.oxo.)
  156. 372 ift<3then428
  157. 374 ifk>1then428
  158. 376 ifk<1then428
  159. 378 ifn<2then428
  160. 380 e=a
  161. 382 e=e+d
  162. 384 gosub642
  163. 386 x=fand4
  164. 388 ifx=0then408
  165. 390 e=e+d
  166. 392 gosub642
  167. 394 x=fandr
  168. 396 ifx=0then428
  169. 398 e=e+d
  170. 400 gosub642
  171. 402 x=fand4
  172. 404 ifx=0then428
  173. 406 goto426
  174. 408 e=a
  175. 410 e=e-d
  176. 412 gosub642
  177. 414 x=fandr
  178. 416 ifx=0then428
  179. 418 e=e-d
  180. 420 gosub642
  181. 422 x=fand4
  182. 424 ifx=0then428
  183. 426 k=2
  184. 428 return
  185. 430 rem ------------------------------
  186. 432 rem direction potential line?               in-a,d,r; out-k
  187. 434 rem no(k<4); yes(k=4)
  188. 436 rem ------------------------------
  189. 438 c=ror4
  190. 440 k=0
  191. 442 e=a
  192. 444 e=e+d
  193. 446 gosub642
  194. 448 x=fandc
  195. 450 ifx=0then458
  196. 452 k=k+1
  197. 454 ifk=4then472
  198. 456 goto444
  199. 458 e=a
  200. 460 e=e-d
  201. 462 gosub642
  202. 464 x=fandc
  203. 466 ifx=0then472
  204. 468 k=k+1
  205. 470 ifk<4then460
  206. 472 return
  207. 474 rem ------------------------------
  208. 476 rem square points                           in-a,p; out-s
  209. 478 rem ------------------------------
  210. 480 s=0
  211. 482 forj=422to425
  212. 484 x=v+j
  213. 486 d=peek(x)
  214. 488 n=0
  215. 490 y=0
  216. 492 c=16
  217. 494 e=a
  218. 496 e=e+d
  219. 498 gosub642
  220. 500 x=c
  221. 502 iff=pthen510
  222. 504 x=fand4
  223. 506 ifx=0then518
  224. 508 x=1
  225. 510 n=n+1
  226. 512 y=y+x
  227. 514 c=c/2
  228. 516 ifc>1then496
  229. 518 c=16
  230. 520 e=a
  231. 522 e=e-d
  232. 524 gosub642
  233. 526 x=c
  234. 528 iff=pthen536
  235. 530 x=fand4
  236. 532 ifx=0then544
  237. 534 x=1
  238. 536 n=n+1
  239. 538 y=y+x
  240. 540 c=c/2
  241. 542 ifc>1then522
  242. 544 ifn<4then548
  243. 546 s=s+y
  244. 548 next
  245. 550 return
  246. 552 rem ------------------------------
  247. 554 rem initial board
  248. 556 rem ------------------------------
  249. 558 x=v+421
  250. 560 n=peek(x)
  251. 562 m=n+1
  252. 564 fori=1ton
  253. 566 forj=1ton
  254. 568 a=i*m
  255. 570 a=a+j
  256. 572 x=v+a
  257. 574 pokex,4
  258. 576 next
  259. 578 next
  260. 580 return
  261. 582 rem ------------------------------
  262. 584 rem board boundaries
  263. 586 rem ------------------------------
  264. 588 x=v+421
  265. 590 n=peek(x)
  266. 592 m=n+1
  267. 594 j=m*m
  268. 596 fora=1ton
  269. 598 x=v+a
  270. 600 pokex,0
  271. 602 x=j+x
  272. 604 pokex,0
  273. 606 next
  274. 608 a=n+2
  275. 610 x=v+426
  276. 612 gosub654
  277. 614 x=v+432
  278. 616 gosub654
  279. 618 a=j-1
  280. 620 x=v+428
  281. 622 gosub654
  282. 624 x=v+430
  283. 626 gosub654
  284. 628 j=j+m
  285. 630 fora=0tojstepm
  286. 632 x=v+a
  287. 634 pokex,0
  288. 636 next
  289. 638 return
  290. 640 rem ------------------------------
  291. 642 rem square status                           in-e; out-f
  292. 644 rem ------------------------------
  293. 646 x=v+e
  294. 648 f=peek(x)
  295. 650 return
  296. 652 rem ------------------------------
  297. 654 rem square number high/low byte             in-a,x
  298. 656 rem ------------------------------
  299. 658 h=a/256
  300. 660 pokex,h
  301. 662 h=h*256
  302. 664 h=a-h
  303. 666 x=x+1
  304. 668 pokex,h
  305. 670 return
  306. 672 rem ------------------------------
  307. 674 rem 2 byte number                           in-x; out-a
  308. 676 rem ------------------------------
  309. 678 h=peek(x)
  310. 680 h=h*256
  311. 682 x=x+1
  312. 684 a=peek(x)
  313. 686 a=a+h
  314. 688 return
  315. 999 end
  316. 1000 poke56,100:clr:bs=100*256:goto1630
  317. 1010 b=peek(ad):ad=ad+1:ifb=32then1010
  318. 1020 return
  319. 1030 aa=ad
  320. 1040 b=peek(aa):aa=aa+1:ifb=32then1040
  321. 1050 return
  322. 1060 gosub1010:ifb<>0thenprintb:goto1730
  323. 1070 return
  324. 1080 n=0
  325. 1090 gosub1010:ifb<48 or b>57 then return
  326. 1100 n=n*10+(b-48):goto1090
  327. 1110 nh=int(nn/256):nl=nn-(nh*256):return
  328. 1120 gosub1110:print mid$(hx$,(nhand240)/16+1,1);mid$(hx$,(nhand15)+1,1);
  329. 1130 printmid$(hx$,(nland240)/16+1,1);mid$(hx$,(nland15)+1,1);:return
  330. 1140 bx=bx+1:ifp<>3 then ml=ml+1:return
  331. 1150 poke ml,z:ml=ml+1:return
  332. 1160 ifp<>1thensp=sp+1:sl=sl+1:return
  333. 1170 pokesp,z:sp=sp+1:sl=sl+1:return
  334. 1180 ifp<>3thenreturn
  335. 1190 dx=dx+1:poke dw,nl:poke dw+1,nh:dw=dw+2:return
  336. 1200 gosub1010:ifb>64then1220
  337. 1210 g=1:ad=ad-1:gosub1080:ad=ad-1:nn=n:goto1240
  338. 1220 gosub1250
  339. 1230 g=0:b=b-65:nn=(b*2)+679
  340. 1240 b=peek(ad):gosub1110:return
  341. 1250 if(b<65 or b>90)then5360
  342. 1260 return
  343. 1270 z=173:gosub1140:z=nl:gosub1140:z=nh:goto1140
  344. 1280 z=173:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
  345. 1290 z=141:gosub1140:z=nl:gosub1140:z=nh:goto1140
  346. 1300 z=141:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
  347. 1310 z=169:gosub1140:z=nl:goto1140
  348. 1320 z=169:gosub1140:z=nh:goto1140
  349. 1330 z=173:gosub1140:z=vl:gosub1140:z=vh:goto1140
  350. 1340 z=173:gosub1140:z=vl+1:gosub1140:z=vh:goto1140
  351. 1350 z=141:gosub1140:z=vl:gosub1140:z=vh:goto1140
  352. 1360 z=141:gosub1140:z=vl+1:gosub1140:z=vh:goto1140
  353. 1370 nl=ms(h,0):nh=ms(h,1):return
  354. 1380 gosub1140:z=nl:gosub1140:z=nh:goto1140
  355. 1390 gosub1140:z=nl+1:gosub1140:z=nh:goto1140
  356. 1400 gosub1140:z=nl:goto1140
  357. 1410 gosub1140:z=nh:goto1140
  358. 1420 z=165:gosub1140:z=y:goto1140
  359. 1430 z=162:gosub1140:z=y:goto1140
  360. 1440 z=161:gosub1140:z=y:goto1140
  361. 1450 z=145:gosub1140:z=y:goto1140
  362. 1460 z=160:gosub1140:z=y:goto1140
  363. 1470 z=133:gosub1140:z=y:goto1140
  364. 1480 z=56:goto1140
  365. 1490 z=24:goto1140
  366. 1500 z=32:gosub1140:z=yl:gosub1140:z=yh:goto1140
  367. 1510 z=76:gosub1140:z=yl:gosub1140:z=yh:goto1140
  368. 1520 z=233:gosub1140:z=nl:goto1140
  369. 1530 z=233:gosub1140:z=nh:goto1140
  370. 1540 z=105:gosub1140:z=nl:goto1140
  371. 1550 z=105:gosub1140:z=nh:goto1140
  372. 1560 z=237:gosub1140:z=nl:gosub1140:z=nh:goto1140
  373. 1570 z=237:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
  374. 1580 z=109:gosub1140:z=nl:gosub1140:z=nh:goto1140
  375. 1590 z=109:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
  376. 1600 z=y1:gosub1140:z=y2:goto1140
  377. 1610 z=y1:gosub1140:z=y2:gosub1140:z=y3:goto1140
  378. 1620 z=169:gosub1140:z=y:goto1140
  379. 1630 lx=3:xx=0:zp=bs+80:p=1:zm=zp:sk=-1
  380. 1640 dim ll(511,1),fs(6,4),li%(lx,5),ms(5,3),oc%(3,1)
  381. 1650 gosub5440:sys828,232,3
  382. 1660 fori=0tolx:forj=0to5:readli%(i,j):next:next:bx=0:dx=0:f2=0
  383. 1670 ad=peek(43)+peek(44)*256:print"[147]          ***** pass";p;" *****"
  384. 1680 sp=zp:ml=zm
  385. 1690 nm=peek(ad)+peek(ad+1)*256
  386. 1700 ln=peek(ad+2)+peek(ad+3)*256:ifln>999then1740
  387. 1710 print"          compiling line #"mid$(str$(ln),2)
  388. 1720 ifp=2thenll(xx,0)=ln:ll(xx,1)=ml:xx=xx+1
  389. 1730 ad=ad+4:gosub1010:goto1790
  390. 1740 ifp=1thenp=2:zm=sp:r1=zm:la=sp:u1=bx:bx=0:goto1670
  391. 1750 ifp=2thenp=3:zm=la:r2=zm:gosub5420:db=la+bx+4:dw=db:u2=bx:bx=0:goto1670
  392. 1760 u3=bx:gosub4760:print"done!":print:gosub4580
  393. 1770 ifpeek(ml-1)<>96thenz=96:gosub1140
  394. 1780 end
  395. 1790 ifb=136then3610:rem let
  396. 1800 ifb=153then2020:rem print
  397. 1810 ifb=128then2300:rem end
  398. 1820 ifb=137then2170:rem goto
  399. 1830 ifb=14