少し賢くなったマルバツ

  • 投稿日:
  • by
  • カテゴリ:

先に公開したマルバツは、ちょっと間抜けでしたが、当初は容量の関係もあって、それでよいことにしていました。

具体的に、同間抜けだったかというと、お互いがリーチを掛け合っている状況で、コンピュータの番になったとき、コンピュータのリーチを埋めれば勝ちなのに、相手のリーチを潰してしまう場合があったのです。

容量については、かなり削り込んだこともあり、詰め込めそうなので、自分の勝ち筋を先にチェックするように、思考ルーチンを強化してみました。

1 CLS:CLV:SRND TICK():C=2*RND(2)-1:LC0,0:?" | | ":?"-+-+-":?" | | ":?"-+-+-":?" | | "
2 IFC=(N%2)*2-1I=0:E=2*C:GOTO4ELSEJ=-1
3 LCX*2,5:?"^":LC5,Y*2:?"<":O=X+3*Y:K=INKEY():IF!KCONTELSEIFK=32AND![O][O]=-C:LC2*X,2*Y:?"O":GOTO8ELSEH=(K=29)+2*(K=28):V=(K=31)+2*(K=30):LCX*2,5:?" ":LC5,Y*2:?" ":X=(X+H)%3:Y=(Y+V)%3:CONT
4 IF[I]+[I+3]+[I+6]=EJ=I+![I+3]*3+![I+6]*6:GOTO8ELSEI=I+1:IFI<3CONTELSEI=0
5 IF[I]+[I+1]+[I+2]=EJ=I+![I+1]+![I+2]*2:GOTO8ELSEI=I+3:IFI<9CONT
6 IF[0]+[4]+[8]=EJ=![4]*4+![8]*8:GOTO8ELSEIF[2]+[4]+[6]=EJ=![2]*2+![4]*4+![6]*6:GOTO8ELSEIFE=2*CE=-E:I=0:GOTO4
7 J=RND(9):IF[J]CONT
8 I=0:IFJ>=0[J]=C:LC2*(J%3),2*(J/3):?"X"
9 W=[I]+[I+3]+[I+6]:IFABS(W)=3GOTO13ELSEI=I+1:IFI<3CONTELSEI=0
10 W=[I]+[I+1]+[I+2]:IFABS(W)=3GOTO13ELSEI=I+3:IFI<9CONT
11 W=[0]+[4]+[8]:IFABS(W)=3GOTO13ELSEW=[2]+[4]+[6]:IFABS(W)=3GOTO13
12 IFN=8LC0,6:?"DRAW":ENDELSEN=N+1:GOTO2
13 LC0,6:IFC*W>0?"COM WIN!"ELSE?"YOU WIN!"

変更点は、下線部です。あんまり変わってないですね。でも、これで間抜けな挙動は少し減ります。