マルバツゲーム
マルバツゲーム
概要
IchigoJam BASIC用のマルバツゲームです。 カーソルキーでカーソルを動かし、スペースキーであいているマスに、〇または×を置いてください。 先手(〇)、後手(×)はゲーム開始時にランダムに決まります。
プログラムリスト
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!"
解説
変数 | 説明 |
---|---|
C | コンピュータの番手 -1が先手で1が後手 |
H | ユーザカーソルの横方向の移動用 |
I | 盤面の評価用ポインタ |
J | コンピュータの指し手 |
K | キー変数 |
N | 番手 |
O | ユーザ指し手チェック用ポインタ |
V | ユーザカーソルの縦方向移動用 |
W | 三目チェック |
X | ユーザのカーソル位置 |
Y | ユーザのカーソル位置 |
[0]~[8] | 盤面(-1先手/1後手/0あき) |
1行目は初期化です。先手後手を決め、盤面を表示します。
2行目は番手のチェックです。コンピュータの番なら4行目に飛ばします。
3行目はユーザの入力処理です。カーソルを動かし、〇を書きます。〇を書いたら三目チェック(8行目)に行きますH, Vは1または2をとります。1または-1ではありません。これはリング状のポインター移動ではよくあるやり方です。
4~7行目はコンピュータの思考ルーチンwです。ここをいじると強くも弱くもなります。
8~11行目は三目判定です。三目成立なら13行目の勝ち負け判定へ進みます。
12行目は番手を進める処理です。引き分けチェックもしています。
13行目はどっちが勝ったのかをチェックしています。
マルバツゲーム.txt · 最終更新: 2020/11/24 21:20 by araki