212 lines
4.6 KiB
QBasic
212 lines
4.6 KiB
QBasic
10 REM - OTHELLO -
|
|
15 REM
|
|
20 A=53184:CO=79:CX=88
|
|
21 POKE11,0:POKE12,253
|
|
25 PL=1
|
|
30 GOSUB9000
|
|
40 DIMB(8,8)
|
|
50 B(4,5)=1:B(5,5)=2:B(4,4)=2:B(5,4)=1
|
|
60 GOSUB8000
|
|
70 GOSUB7000
|
|
80 GOSUB6000
|
|
90 GOSUB5000
|
|
100 GOSUB4000
|
|
110 GOTO60
|
|
999 END
|
|
4000 REM - MAKE MOVE IN TABLE -
|
|
4010 IFUP=0ANDDN=0ANDLF=0ANDRT=0ANDUL=0ANDUR=0ANDLL=0ANDLR=0THEN4990
|
|
4020 B(C,R)=PL
|
|
4030 IFUP=0THEN4100
|
|
4040 FORZ=1TOUP
|
|
4050 B(C,R+Z)=PL
|
|
4060 NEXT
|
|
4100 IFDN=0THEN4200
|
|
4110 FORZ=1TODN
|
|
4120 B(C,R-Z)=PL
|
|
4130 NEXT
|
|
4200 IFLF=0THEN4300
|
|
4210 FORZ=1TOLF
|
|
4220 B(C-Z,R)=PL
|
|
4230 NEXT
|
|
4300 IFRT=0THEN4400
|
|
4310 FORZ=1TORT
|
|
4320 B(C+Z,R)=PL
|
|
4330 NEXT
|
|
4400 IFUL=0THEN4500
|
|
4410 FORZ=1TOUL
|
|
4420 B(C-Z,R+Z)=PL
|
|
4430 NEXT
|
|
4500 IFUR=0THEN4600
|
|
4510 FORZ=1TOUR
|
|
4520 B(C+Z,R+Z)=PL
|
|
4530 NEXT
|
|
4600 IFLL=0THEN4700
|
|
4610 FORZ=1TOLL
|
|
4620 B(C-Z,R-Z)=PL
|
|
4630 NEXT
|
|
4700 IFLR=0THEN4900
|
|
4710 FORZ=1TOLR
|
|
4720 B(C+Z,R-Z)=PL
|
|
4730 NEXT
|
|
4900 PL=3-PL
|
|
4990 RETURN
|
|
5000 REM - LEGAL MOVE? -
|
|
5010 UP=0:DN=0:LF=0:RT=0:UL=0:UR=0:LL=0:LR=0
|
|
5020 IFB(C,R)<>0THENGOTO5990
|
|
5030 FORTR=R-1TO1STEP-1
|
|
5040 IFTR<1THENDN=0:GOTO5100
|
|
5045 IFB(C,TR)=0THENDN=0:GOTO5100
|
|
5050 IFB(C,TR)=3-PLANDTR>1THENDN=DN+1
|
|
5060 IFB(C,TR)=PLTHENGOTO5100
|
|
5070 NEXT
|
|
5080 DN=0
|
|
5100 FORTR=R+1TO8
|
|
5110 IFTR>8THENUP=0:GOTO5200
|
|
5115 IFB(C,TR)=0THENUP=0:GOTO5200
|
|
5120 IFB(C,TR)=(3-PL)ANDTR<8THENUP=UP+1
|
|
5130 IFB(C,TR)=PLTHENGOTO5200
|
|
5140 NEXT
|
|
5150 UP=0
|
|
5200 FORTC=C-1TO1STEP-1
|
|
5210 IFTC<1THENLF=0:GOTO5300
|
|
5215 IFB(TC,R)=0THENLF=0:GOTO5300
|
|
5220 IFB(TC,R)=(3-PL)ANDTC>1THENLF=LF+1
|
|
5230 IFB(TC,R)=PLTHENGOTO5300
|
|
5240 NEXT
|
|
5250 LF=0
|
|
5300 FORTC=C+1TO8
|
|
5310 IFTC>8THENRT=0:GOTO5400
|
|
5315 IFB(TC,R)=0THENRT=0:GOTO5400
|
|
5320 IFB(TC,R)=(3-PL)ANDTC<8THENRT=RT+1
|
|
5330 IFB(TC,R)=PLTHENGOTO5400
|
|
5340 NEXT
|
|
5350 RT=0
|
|
5400 TC=C-1
|
|
5410 FORTR=R+1TO8
|
|
5420 IFTR>8ORTC<1THENUL=0:GOTO5500
|
|
5425 IFB(TC,TR)=0THENUL=0:GOTO5500
|
|
5430 IFB(TC,TR)=(3-PL)ANDTR<8ANDTC>1THENUL=UL+1
|
|
5440 IFB(TC,TR)=PLTHENGOTO5500
|
|
5450 TC=TC-1
|
|
5460 NEXT
|
|
5470 UL=0
|
|
5500 TC=C+1
|
|
5510 FORTR=R+1TO8
|
|
5520 IFTR>8ORTC>8THENUR=0:GOTO5600
|
|
5525 IFB(TC,TR)=0THENUR=0:GOTO5600
|
|
5530 IFB(TC,TR)=(3-PL)ANDTR<8ANDTC<8THENUR=UR+1
|
|
5540 IFB(TC,TR)=PLTHENGOTO5600
|
|
5550 TC=TC+1
|
|
5560 NEXT
|
|
5570 UR=0
|
|
5600 TC=C-1
|
|
5610 FORTR=R-1TO1STEP-1
|
|
5620 IFTR<1ORTC<1THENLL=0:GOTO5700
|
|
5625 IFB(TC,TR)=0THENLL=0:GOTO5700
|
|
5630 IFB(TC,TR)=(3-PL)ANDTR>1ANDTC>1THENLL=LL+1
|
|
5640 IFB(TC,TR)=PLTHENGOTO5700
|
|
5650 TC=TC-1
|
|
5660 NEXT
|
|
5670 LL=0
|
|
5700 TC=C+1
|
|
5710 FORTR=R-1TO1STEP-1
|
|
5720 IFTR<1ORTC>8THENLR=0:GOTO5990
|
|
5725 IFB(TC,TR)=0THENLR=0:GOTO5990
|
|
5730 IFB(TC,TR)=(3-PL)ANDTR>1ANDTC<8THENLR=LR+1
|
|
5740 IFB(TC,TR)=PLTHENGOTO5990
|
|
5750 TC=TC+1
|
|
5760 NEXT
|
|
5770 LR=0
|
|
5990 RETURN
|
|
6000 REM - CHECK INPUT -
|
|
6010 REM - AND SET UP -
|
|
6020 REM - R (ROW) AND -
|
|
6030 REM - C (COLUMN) -
|
|
6040 IFLEN(I$)<>2THENGOSUB7000:GOTO6040
|
|
6050 C1=ASC(LEFT$(I$,1)):C2=ASC(RIGHT$(I$,1))
|
|
6060 IF(C1>=65)AND(C1<=72)THENR=C1:GOTO6080
|
|
6070 IF(C2>=65)AND(C2<=72)THENR=C2:GOTO6090
|
|
6075 GOSUB7000:GOTO6040
|
|
6080 IF(C2<49)OR(C2>56)THENGOSUB7000:GOTO6040
|
|
6085 C=C2:GOTO6100
|
|
6090 IF(C1<49)OR(C1>56)THENGOSUB7000:GOTO6040
|
|
6095 C=C1
|
|
6100 C=C-48:R=R-64
|
|
6990 RETURN
|
|
7000 REM - INPUT MOVE -
|
|
7001 POKE(A+256+20*32+18),(PL+48)
|
|
7005 I$="":T2=A+256+21*32+7
|
|
7006 FORX=1TO20:POKE(T2+X),32:NEXT
|
|
7009 POKET2,63:T2=T2+1:POKET2,161
|
|
7010 T1=USR(T1):T1=PEEK(531)
|
|
7011 IFT1=13THEN7030
|
|
7012 IFT1<>127THEN7019
|
|
7013 IFI$=""THEN7010
|
|
7015 POKET2,32:T2=T2-1:POKET2,161
|
|
7017 IFLEN(I$)=1THENI$="":GOTO7010
|
|
7018 I$=LEFT$(I$,LEN(I$)-1):GOTO7010
|
|
7019 I$=I$+CHR$(T1)
|
|
7020 POKET2,T1:T2=T2+1:POKET2,161
|
|
7023 IFLEN(I$)>10THENGOTO7000
|
|
7025 GOTO7010
|
|
7030 FORY=1TO8
|
|
7990 RETURN
|
|
8000 REM - MAKE MOVE -
|
|
8010 S=A+8*32+7
|
|
8020 FORX=1TO8
|
|
8030 FORY=1TO8
|
|
8040 P=S+2*X+2*32*(8-Y)
|
|
8050 IFB(X,Y)=1THENPOKEP,CX
|
|
8060 IFB(X,Y)=2THENPOKEP,CO
|
|
8080 NEXTY,X
|
|
8990 RETURN
|
|
9000 REM - FRAME -
|
|
9010 T1=A+256
|
|
9020 FORY=1TO24
|
|
9030 PRINT
|
|
9040 NEXT
|
|
9050 FORX=1TO16
|
|
9060 POKE(A+224+X+7),128
|
|
9070 NEXT
|
|
9080 FORY=1TO16STEP2
|
|
9090 FORX=1TO8
|
|
9100 T2=2*(X-1)
|
|
9110 POKE(T1+(Y-1)*32+8+T2),136
|
|
9120 POKE(T1+Y*32+8+T2),209
|
|
9130 POKE(T1+Y*32+9+T2),128
|
|
9140 NEXTX
|
|
9150 POKE(T1+(Y-1)*32+8+2*(X-1)),136
|
|
9160 POKE(T1+Y*32+8+2*(X-1)),136
|
|
9170 NEXTY
|
|
9180 T3=T1+6
|
|
9190 T4=T3+577
|
|
9200 FORZ=1TO8
|
|
9210 POKE(T3+2*(8-Z)*32),((Z-1)+65)
|
|
9220 POKE(T4+2*Z),((Z-1)+49)
|
|
9230 NEXT
|
|
9240 T2=A+903
|
|
9250 POKET2,ASC("P"):T2=T2+1
|
|
9260 POKET2,ASC("L"):T2=T2+1
|
|
9270 POKET2,ASC("A"):T2=T2+1
|
|
9280 POKET2,ASC("Y"):T2=T2+1
|
|
9290 POKET2,ASC("E"):T2=T2+1
|
|
9300 POKET2,ASC("R"):T2=T2+1
|
|
9310 T2=T2+1
|
|
9320 POKET2,ASC("N"):T2=T2+1
|
|
9330 POKET2,ASC("O"):T2=T2+1
|
|
9340 POKET2,ASC("."):T2=T2+3
|
|
9350 POKET2,ASC(":"):T2=T2+1
|
|
9990 RETURN
|
|
10000 REM - FUN -
|
|
10005 A=53248
|
|
10010 FORX=1TO24:PRINT:NEXT:T1=A+263
|
|
10020 FORX=1TO16
|
|
10025 FORY=1TO8
|
|
10026 POKET1+(X-2)*32,32
|
|
10035 NEXTY,X
|
|
10040 FORX=16TO1STEP-1
|
|
10045 FORY=8TO1STEP-1
|
|
10046 POKET1+X*32,32
|
|
10050 POKET1+(X-1)*32,(9-Y)+127
|
|
10055 NEXTY,X
|
|
10060 GOTO10020
|