home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Loadstar 194
/
194.d81
/
z.gomoko+
(
.txt
)
< prev
Wrap
Commodore BASIC
|
2022-08-26
|
17KB
|
770 lines
1 rem "z.gomoko" 2000.05.31 zip basic 2.0 source
10 x=176
12 gosub674
14 v=a
16 y=peek(178)
18 ify=1then42
20 ify=2then38
22 ify=3then34
24 ify=4then30
26 gosub584
28 goto999
30 gosub554
32 goto999
34 gosub278
36 goto999
38 gosub252
40 goto999
42 gosub102
44 goto999
100 rem ------------------------------
102 rem max line move in-p,r,t; out-g,l
104 rem ------------------------------
106 x=v+436
108 t=peek(x)
110 x=v+437
112 p=peek(x)
114 x=v+438
116 r=peek(x)
118 rem ---
120 x=v+426
122 gosub674
124 b=a
126 x=v+428
128 gosub674
130 q=a
132 g=0
134 l=0
136 u=0
138 h=0
140 w=0
142 fora=btoq
144 o=0
146 m=0
148 e=a
150 gosub642
152 x=fand4
154 ifx=0then234
156 fori=422to425
158 x=v+i
160 d=peek(x)
162 gosub432
164 ifk<4then232
166 gosub320
168 ifk<lthen232
170 ift<4then174
172 gosub476
174 ifk>lthen200
176 ift=1then232
178 o=o+n
180 ifo<uthen232
182 m=m+1
184 ifo>uthen204
186 ift=2then232
188 ifm<hthen232
190 ifm>hthen204
192 ift=3then232
194 ifs<wthen232
196 ifs>wthen204
198 goto232
200 m=1
202 o=n
204 w=s
206 h=m
208 u=o
210 l=k
212 g=a
214 ifl<4then232
216 ift=1then228
218 ifp=rthen228
220 ift=4then232
222 ifu<8then232
224 ift=2then228
226 ifh<4then232
228 i=425
230 a=q
232 next
234 next
236 rem ---
238 a=g
240 x=v+434
242 gosub654
244 x=v+440
246 pokex,l
248 return
250 rem ------------------------------
252 rem single move points in-a,p; out-s
254 rem ------------------------------
256 x=v+434
258 gosub674
260 x=v+437
262 p=peek(x)
264 rem ---
266 gosub476
268 rem ---
270 x=v+441
272 pokex,s
274 return
276 rem ------------------------------
278 rem square max line in-a,r; out-l
280 rem win(l>=4)
282 rem ------------------------------
284 x=v+434
286 gosub674
288 x=v+438
290 r=peek(x)
292 rem ---
294 l=0
296 fori=422to425
298 x=v+i
300 d=peek(x)
302 gosub320
304 ifk<lthen308
306 l=k
308 next
310 rem ---
312 x=v+440
314 pokex,l
316 return
318 rem ------------------------------
320 rem direction max line in-a,d,r,t; out-k,n
322 rem k=markers(0-4) n=free ends(0-2)
324 rem ------------------------------
326 k=0
328 n=0
330 e=a
332 e=e+d
334 gosub642
336 x=fandr
338 ifx=0then344
340 k=k+1
342 goto332
344 x=fand4
346 ifx=0then350
348 n=n+1
350 e=a
352 e=e-d
354 gosub642
356 x=fandr
358 ifx=0then364
360 k=k+1
362 goto352
364 x=fand4
366 ifx=0then370
368 n=n+1
370 rem --- (.ox.o.)=(.oxo.)
372 ift<3then428
374 ifk>1then428
376 ifk<1then428
378 ifn<2then428
380 e=a
382 e=e+d
384 gosub642
386 x=fand4
388 ifx=0then408
390 e=e+d
392 gosub642
394 x=fandr
396 ifx=0then428
398 e=e+d
400 gosub642
402 x=fand4
404 ifx=0then428
406 goto426
408 e=a
410 e=e-d
412 gosub642
414 x=fandr
416 ifx=0then428
418 e=e-d
420 gosub642
422 x=fand4
424 ifx=0then428
426 k=2
428 return
430 rem ------------------------------
432 rem direction potential line? in-a,d,r; out-k
434 rem no(k<4); yes(k=4)
436 rem ------------------------------
438 c=ror4
440 k=0
442 e=a
444 e=e+d
446 gosub642
448 x=fandc
450 ifx=0then458
452 k=k+1
454 ifk=4then472
456 goto444
458 e=a
460 e=e-d
462 gosub642
464 x=fandc
466 ifx=0then472
468 k=k+1
470 ifk<4then460
472 return
474 rem ------------------------------
476 rem square points in-a,p; out-s
478 rem ------------------------------
480 s=0
482 forj=422to425
484 x=v+j
486 d=peek(x)
488 n=0
490 y=0
492 c=16
494 e=a
496 e=e+d
498 gosub642
500 x=c
502 iff=pthen510
504 x=fand4
506 ifx=0then518
508 x=1
510 n=n+1
512 y=y+x
514 c=c/2
516 ifc>1then496
518 c=16
520 e=a
522 e=e-d
524 gosub642
526 x=c
528 iff=pthen536
530 x=fand4
532 ifx=0then544
534 x=1
536 n=n+1
538 y=y+x
540 c=c/2
542 ifc>1then522
544 ifn<4then548
546 s=s+y
548 next
550 return
552 rem ------------------------------
554 rem initial board
556 rem ------------------------------
558 x=v+421
560 n=peek(x)
562 m=n+1
564 fori=1ton
566 forj=1ton
568 a=i*m
570 a=a+j
572 x=v+a
574 pokex,4
576 next
578 next
580 return
582 rem ------------------------------
584 rem board boundaries
586 rem ------------------------------
588 x=v+421
590 n=peek(x)
592 m=n+1
594 j=m*m
596 fora=1ton
598 x=v+a
600 pokex,0
602 x=j+x
604 pokex,0
606 next
608 a=n+2
610 x=v+426
612 gosub654
614 x=v+432
616 gosub654
618 a=j-1
620 x=v+428
622 gosub654
624 x=v+430
626 gosub654
628 j=j+m
630 fora=0tojstepm
632 x=v+a
634 pokex,0
636 next
638 return
640 rem ------------------------------
642 rem square status in-e; out-f
644 rem ------------------------------
646 x=v+e
648 f=peek(x)
650 return
652 rem ------------------------------
654 rem square number high/low byte in-a,x
656 rem ------------------------------
658 h=a/256
660 pokex,h
662 h=h*256
664 h=a-h
666 x=x+1
668 pokex,h
670 return
672 rem ------------------------------
674 rem 2 byte number in-x; out-a
676 rem ------------------------------
678 h=peek(x)
680 h=h*256
682 x=x+1
684 a=peek(x)
686 a=a+h
688 return
999 end
1000 poke56,100:clr:bs=100*256:goto1630
1010 b=peek(ad):ad=ad+1:ifb=32then1010
1020 return
1030 aa=ad
1040 b=peek(aa):aa=aa+1:ifb=32then1040
1050 return
1060 gosub1010:ifb<>0thenprintb:goto1730
1070 return
1080 n=0
1090 gosub1010:ifb<48 or b>57 then return
1100 n=n*10+(b-48):goto1090
1110 nh=int(nn/256):nl=nn-(nh*256):return
1120 gosub1110:print mid$(hx$,(nhand240)/16+1,1);mid$(hx$,(nhand15)+1,1);
1130 printmid$(hx$,(nland240)/16+1,1);mid$(hx$,(nland15)+1,1);:return
1140 bx=bx+1:ifp<>3 then ml=ml+1:return
1150 poke ml,z:ml=ml+1:return
1160 ifp<>1thensp=sp+1:sl=sl+1:return
1170 pokesp,z:sp=sp+1:sl=sl+1:return
1180 ifp<>3thenreturn
1190 dx=dx+1:poke dw,nl:poke dw+1,nh:dw=dw+2:return
1200 gosub1010:ifb>64then1220
1210 g=1:ad=ad-1:gosub1080:ad=ad-1:nn=n:goto1240
1220 gosub1250
1230 g=0:b=b-65:nn=(b*2)+679
1240 b=peek(ad):gosub1110:return
1250 if(b<65 or b>90)then5360
1260 return
1270 z=173:gosub1140:z=nl:gosub1140:z=nh:goto1140
1280 z=173:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1290 z=141:gosub1140:z=nl:gosub1140:z=nh:goto1140
1300 z=141:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1310 z=169:gosub1140:z=nl:goto1140
1320 z=169:gosub1140:z=nh:goto1140
1330 z=173:gosub1140:z=vl:gosub1140:z=vh:goto1140
1340 z=173:gosub1140:z=vl+1:gosub1140:z=vh:goto1140
1350 z=141:gosub1140:z=vl:gosub1140:z=vh:goto1140
1360 z=141:gosub1140:z=vl+1:gosub1140:z=vh:goto1140
1370 nl=ms(h,0):nh=ms(h,1):return
1380 gosub1140:z=nl:gosub1140:z=nh:goto1140
1390 gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1400 gosub1140:z=nl:goto1140
1410 gosub1140:z=nh:goto1140
1420 z=165:gosub1140:z=y:goto1140
1430 z=162:gosub1140:z=y:goto1140
1440 z=161:gosub1140:z=y:goto1140
1450 z=145:gosub1140:z=y:goto1140
1460 z=160:gosub1140:z=y:goto1140
1470 z=133:gosub1140:z=y:goto1140
1480 z=56:goto1140
1490 z=24:goto1140
1500 z=32:gosub1140:z=yl:gosub1140:z=yh:goto1140
1510 z=76:gosub1140:z=yl:gosub1140:z=yh:goto1140
1520 z=233:gosub1140:z=nl:goto1140
1530 z=233:gosub1140:z=nh:goto1140
1540 z=105:gosub1140:z=nl:goto1140
1550 z=105:gosub1140:z=nh:goto1140
1560 z=237:gosub1140:z=nl:gosub1140:z=nh:goto1140
1570 z=237:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1580 z=109:gosub1140:z=nl:gosub1140:z=nh:goto1140
1590 z=109:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1600 z=y1:gosub1140:z=y2:goto1140
1610 z=y1:gosub1140:z=y2:gosub1140:z=y3:goto1140
1620 z=169:gosub1140:z=y:goto1140
1630 lx=3:xx=0:zp=bs+80:p=1:zm=zp:sk=-1
1640 dim ll(511,1),fs(6,4),li%(lx,5),ms(5,3),oc%(3,1)
1650 gosub5440:sys828,232,3
1660 fori=0tolx:forj=0to5:readli%(i,j):next:next:bx=0:dx=0:f2=0
1670 ad=peek(43)+peek(44)*256:print"[147] ***** pass";p;" *****"
1680 sp=zp:ml=zm
1690 nm=peek(ad)+peek(ad+1)*256
1700 ln=peek(ad+2)+peek(ad+3)*256:ifln>999then1740
1710 print" compiling line #"mid$(str$(ln),2)
1720 ifp=2thenll(xx,0)=ln:ll(xx,1)=ml:xx=xx+1
1730 ad=ad+4:gosub1010:goto1790
1740 ifp=1thenp=2:zm=sp:r1=zm:la=sp:u1=bx:bx=0:goto1670
1750 ifp=2thenp=3:zm=la:r2=zm:gosub5420:db=la+bx+4:dw=db:u2=bx:bx=0:goto1670
1760 u3=bx:gosub4760:print"done!":print:gosub4580
1770 ifpeek(ml-1)<>96thenz=96:gosub1140
1780 end
1790 ifb=136then3610:rem let
1800 ifb=153then2020:rem print
1810 ifb=128then2300:rem end
1820 ifb=137then2170:rem goto
1830 ifb=14