10 'Pocket Reversi 20 DIM B0(9,9),B1(9,9),G$(2),XP(7),YP(7),F1(7),TB(9,9),SC(64),XB(64),YB(64) 30 FOR X=1 TO 8:FOR Y=1 TO 8:READ TB(X,Y):NEXT:NEXT 40 B1=TB(2,1):B2=TB(2,2) 50 T1=30:T2=10 60 XP(0)=-1:YP(0)=-1:XP(1)= 0:YP(1)=-1:XP(2)= 1:YP(2)=-1 70 XP(3)=-1:YP(3)= 0: XP(4)= 1:YP(4)= 0 80 XP(5)=-1:YP(5)= 1:XP(6)= 0:YP(6)= 1:XP(7)= 1:YP(7)= 1 90 ' 100 *START 110 CLS 120 LOCATE 2,0:PRINT "Pocket Reversi V1.0" 130 LOCATE 6,2:PRINT "1:YOU vs CPU" 140 LOCATE 6,3:PRINT "2:CPU vs YOU" 150 LOCATE 2,5:PRINT "Program By TOMOKAZU"; 160 *ST1 170 GOSUB *KEYWAIT 180 IF A<49 OR A>50 THEN *ST1 190 CLS 200 FOR X=1 TO 8:FOR Y=1 TO 8:B1(X,Y)=0:NEXT:NEXT 210 FOR I=0 TO 9:B1(I,0)=3:B1(I,9)=3:B1(0,I)=3:B1(9,I)=3:NEXT 220 B1(4,4)=-1:B1(5,4)=1:B1(4,5)=1:B1(5,5)=-1 230 FOR X1=4 TO 5:FOR Y1=4 TO 5:GOSUB *PRTST:NEXT:NEXT 240 X1=1:Y1=1 250 LINE(49,0)-(49,48) 260 X=54 270 Y=25:B= 1:GOSUB *PRTS2 280 Y=33:B=-1:GOSUB *PRTS2 290 GOSUB *PRT 300 CL=1:PS=0 'color,pass 310 IF A=50 THEN CY=-1:GOTO *M1 ELSE CY=1 320 ' 330 *MAIN 340 ' 350 'MAN 360 GOSUB *PSCHECK 370 IF F=0 THEN 380 PS=PS+1:IF PS>=2 THEN *QUIT 390 LOCATE 9,1:PRINT "You Pass!" 400 LOCATE 9,2:PRINT "Hit Any Key":GOSUB *KEYWAIT 410 ELSE 420 LOCATE 9,0:PRINT "You (";:GOSUB *PRTWB 430 GOSUB *INP2 440 ENDIF 450 IF S1+S2=64 THEN *QUIT 460 CL=-CL 470 GOSUB *MSGCLR 480 ' 490 'CPU 500 *M1 510 LOCATE 9,0:PRINT "CPU (";:GOSUB *PRTWB 520 GOSUB *CPU :CL=-CL 530 IF S1+S2=64 THEN *QUIT 540 GOTO *MAIN 550 ' 560 *QUIT 570 'S1:Black(1) S2:White(-1) 580 GOSUB *MSGCLR 590 LOCATE 9,1 600 ' 610 IF S1=S2 THEN 620 PRINT "DRAW" 630 ELSE 640 IF S1>S2 THEN 650 IF CY=1 THEN PRINT "You Win" ELSE PRINT "You Lose" 660 ELSE 670 IF CY=1 THEN PRINT "You Lose" ELSE PRINT "You Win" 680 ENDIF 690 ENDIF 700 ' 710 GOSUB *KEYWAIT 'OUT A 720 GOTO *START 730 END 740 ' 750 *INP 760 GOSUB *KEYWAIT 'OUT A 770 IF A= 4 AND Y1>1 THEN Y1=Y1-1 780 IF A= 5 AND Y1<8 THEN Y1=Y1+1 790 IF A=14 AND X1<8 THEN X1=X1+1 800 IF A=15 AND X1>1 THEN X1=X1-1 810 IF A=13 AND B1(X1,Y1)=0 THEN 820 GOSUB *CHECK 830 IF F>0 THEN 840 PS=0 850 LINE((X1-1)*6,(Y1-1)*6)-((X1-1)*6+6,(Y1-1)*6+6),R,B 860 B1(X1,Y1)=CL:GOSUB *PRTST:GOSUB *REV:GOSUB *PRT 870 RETURN 880 ENDIF 890 ENDIF 900 *INP2 910 IF X1<>X2 OR Y1<>Y2 THEN 920 LINE((X2-1)*6,(Y2-1)*6)-((X2-1)*6+6,(Y2-1)*6+6),R,B 930 LINE((X1-1)*6,(Y1-1)*6)-((X1-1)*6+6,(Y1-1)*6+6),S,B 940 ENDIF 950 X2=X1:Y2=Y1 960 GOTO *INP 970 ' 980 *CPU 990 X3=X1:Y3=Y1 1000 FOR I=1 TO 8:FOR J=1 TO 8:B0(I,J)=B1(I,J):NEXT:NEXT 'BACKUP 1010 CT=0 1020 FOR X1=1 TO 8:FOR Y1=1 TO 8 1030 F=0:IF B1(X1,Y1)=0 THEN GOSUB *CHECK 1040 IF F>0 THEN 1050 CT=CT+1 1060 B1(X1,Y1)=CL:GOSUB *REV 1070 GOSUB *CALC 1080 SC(CT)=SC 1090 XB(CT)=X1:YB(CT)=Y1 1100 FOR I=1 TO 8:FOR J=1 TO 8:B1(I,J)=B0(I,J):NEXT:NEXT 'RESTORE 1110 ENDIF 1120 NEXT:NEXT 1130 X1=X3:Y1=Y3 1140 IF CT=0 THEN 1150 PS=PS+1:LOCATE 9,1:PRINT "CPU PASS" 1160 LINE((X1-1)*6,(Y1-1)*6)-((X1-1)*6+6,(Y1-1)*6+6),S,B 1170 X2=X1:Y2=Y1 1180 RETURN 'PASS 1190 ENDIF 1200 ' 1210 PS=0:SC=-10000:J=1 1220 FOR I=1 TO CT 1230 IF SC(I)>SC THEN J=I:SC=SC(I) 1240 NEXT 1250 X1=XB(J):Y1=YB(J):B1(X1,Y1)=CL:GOSUB *PRTST:GOSUB *CHECK:GOSUB *REV 1260 GOSUB *PRT 1270 RETURN 1280 ' 1290 *CALC 1300 SC=0 1310 IF B1(1,1)<>0 THEN TB(2,1)=T1:TB(1,2)=T1:TB(2,2)=T2 1320 IF B1(1,8)<>0 THEN TB(2,8)=T1:TB(1,7)=T1:TB(2,7)=T2 1330 IF B1(8,1)<>0 THEN TB(8,2)=T1:TB(7,1)=T1:TB(7,2)=T2 1340 IF B1(8,8)<>0 THEN TB(7,8)=T1:TB(8,7)=T1:TB(7,7)=T2 1350 ' 1360 FOR I=1 TO 8:FOR J=1 TO 8:B=B1(I,J) 1370 IF B<>0 THEN SC=SC+TB(I,J)*(B*CL) 1380 NEXT:NEXT 1390 ' 1400 IF B1(1,1)<>0 THEN TB(2,1)=B1:TB(1,2)=B1:TB(2,2)=B2 1410 IF B1(1,8)<>0 THEN TB(2,8)=B1:TB(1,7)=B1:TB(2,7)=B2 1420 IF B1(8,1)<>0 THEN TB(8,2)=B1:TB(7,1)=B1:TB(7,2)=B2 1430 IF B1(8,8)<>0 THEN TB(7,8)=B1:TB(8,7)=B1:TB(7,7)=B2 1440 ' 1450 RETURN 1460 ' 1470 *CHECK 1480 F=0 1490 FOR I=0 TO 7:X=X1:Y=Y1:F1(I)=0:X=X+XP(I):Y=Y+YP(I) 1500 IF B1(X,Y)=-CL THEN F1=1:GOSUB *CHE01 1510 NEXT 1520 RETURN 1530 *CHE01 1540 X=X+XP(I):Y=Y+YP(I) 1550 IF B1(X,Y)=-CL THEN F1=F1+1:GOTO *CHE01 1560 IF B1(X,Y)= CL THEN F=F+1:F1(I)=F1 1570 RETURN 1580 ' 1590 *CHECK2 1600 F=0 1610 FOR I=0 TO 7:X=X1:Y=Y1:X=X+XP(I):Y=Y+YP(I) 1620 IF B1(X,Y)=-CL THEN GOSUB *CHE02 1630 IF F>0 THEN I=99 1640 NEXT 1650 RETURN 1660 *CHE02 1670 X=X+XP(I):Y=Y+YP(I) 1680 IF B1(X,Y)=-CL THEN *CHE02 1690 IF B1(X,Y)= CL THEN F=1 1700 RETURN 1710 ' 1720 *PSCHECK 1730 X3=X1:Y3=Y1 1740 FOR C=3 TO 1 STEP -1:D=(4-C)*2 1750 FOR E=0 TO D 1760 X1=C+E :Y1=C :F=0:IF B1(X1,Y1)=0 THEN GOSUB *CHECK2:IF F>0 THEN E=9:C=0:GOTO *PS1 1770 X1=9-C :Y1=C+E :F=0:IF B1(X1,Y1)=0 THEN GOSUB *CHECK2:IF F>0 THEN E=9:C=0:GOTO *PS1 1780 X1=9-C-E:Y1=9-C :F=0:IF B1(X1,Y1)=0 THEN GOSUB *CHECK2:IF F>0 THEN E=9:C=0:GOTO *PS1 1790 X1=C :Y1=9-C-E:F=0:IF B1(X1,Y1)=0 THEN GOSUB *CHECK2:IF F>0 THEN E=9:C=0 1800 *PS1 1810 NEXT 1820 NEXT 1830 X1=X3:Y1=Y3 1840 RETURN 1850 ' 1860 *REV 1870 FOR I=0 TO 7:X=X1:Y=Y1 1880 IF F1(I)>0 THEN FOR J=1 TO F1(I):X=X+XP(I):Y=Y+YP(I):B1(X,Y)=CL:NEXT 1890 NEXT 1900 RETURN 1910 ' 1920 *PRT ' 1930 S1=0:S2=0 1940 FOR I=1 TO 8:X=(I-1)*6+2 1950 FOR J=1 TO 8:Y=(J-1)*6+2 1960 IF B1(I,J)<>0 THEN 1970 IF B1(I,J)=1 THEN LINE(X,Y)-(X+2,Y+2),S,BF:S1=S1+1 ELSE LINE(X,Y)-(X+2,Y+2),R,BF:S2=S2+1 1980 ENDIF 1990 NEXT 2000 NEXT 2010 LOCATE 10,3:B=S1:GOSUB *NUMPRT 2020 LOCATE 10,4:B=S2:GOSUB *NUMPRT 2030 RETURN 2040 ' 2050 *PRTST 2060 'IN X1,Y1 2070 X=(X1-1)*6+1:Y=(Y1-1)*6+1:B=B1(X1,Y1) 2080 GOSUB *PRTS2 2090 RETURN 2100 ' 2110 *PRTS2 2120 'IN X,Y,B 2130 LINE(X+1,Y)-(X+3,Y) 2140 LINE(X,Y+1)-(X,Y+3) 2150 LINE(X+4,Y+1)-(X+4,Y+3) 2160 LINE(X+1,Y+4)-(X+3,Y+4) 2170 IF B=1 THEN LINE(X+1,Y+1)-(X+3,Y+3),S,BF ELSE LINE(X+1,Y+1)-(X+3,Y+3),R,BF 2180 RETURN 2190 ' 2200 *NUMPRT 2210 'IN B 2220 V$=STR$(B):V$=LEFT$(" ",2-LEN(V$))+V$:PRINT V$; 2230 RETURN 2240 ' 2250 *KEYWAIT 2260 'OUT A 2270 I$=INKEY$ :IF I$="" THEN A1=0:KB=0:GOTO *KEYWAIT 2280 A= ASC (I$):IF A=A1 THEN KB=KB+1:IF KB<50 THEN GOTO *KEYWAIT 2290 A1=A 2300 RETURN 2310 ' 2320 *MSGCLR 2330 LOCATE 9,1:PRINT " "; 2340 LOCATE 9,2:PRINT " "; 2350 RETURN 2360 ' 2370 *PRTWB 2380 IF CL=-1 THEN PRINT "White)"; ELSE PRINT "Black)"; 2390 RETURN 2400 ' 2410 'table 2420 DATA 60,-20, 0, -2, -2, 0,-20, 60 2430 DATA -20,-40, -3, -3, -3, -3,-40,-20 2440 DATA 0, -3, 0, -1, -1, 0, -3, 0 2450 DATA -2, -3, -1, -1, -1, -1, -3, -2 2460 DATA -2, -3, -1, -1, -1, -1, -3, -2 2470 DATA 0, -3, 0, -1, -1, 0, -3, 0 2480 DATA -20,-40, -3, -3, -3, -3,-40,-20 2490 DATA 60,-20, 0, -2, -2, 0,-20, 60