読者です 読者をやめる 読者になる 読者になる

よしなしごと.log

へたれSEの雑記帳

OXゲームバッチver2.0

以前公開したOXゲームバッチを改修しました。
改良点
・プレイヤーの誤入力対応。
・COMが一手目は必ず四隅のどこかに印を付ける。(その方が後々有利らしいので)
・COMが自分のリーチを判定して勝ちに行く。
・COMがプレイヤーのリーチを判定して邪魔をする。
・あいこ対応。
・他もろもろ
ファイル数がやたら多く(全9ファイル)なった。
ついでにコマンドソースを良い感じに表示する方法を覚えました。

OXGAME.bat
@echo off
setlocal
setlocal ENABLEDELAYEDEXPANSION

rem OXゲームバッチ

rem 変数を定義
set COM=AAA
set PLAY=AAA
set O=AAA
set X=AAA
set NUM=0
set VAL=0
set VALABC=3
set VAL123=3
set COMVALABC=0
set COMVAL123=AAA
set COMALFLG=0
set PLAYALFLG=0
set COMVAL=AAA
set PLAYVAL=AAA
set JUDGE=0
set A1=-
set A2=-
set A3=-
set B1=-
set B2=-
set B3=-
set C1=-
set C2=-
set C3=-
set A1FLG=0
set A2FLG=0
set A3FLG=0
set B1FLG=0
set B2FLG=0
set B3FLG=0
set C1FLG=0
set C2FLG=0
set C3FLG=0
set SEL1=A1
set SEL2=A2
set SEL3=A3
set SEL4=B1
set SEL5=B2
set SEL6=B3
set SEL7=C1
set SEL8=C2
set SEL9=C3
set COMREACHFLG=0
set PLAYREACHFLG=0

rem 先行/後攻決定
echo OXゲームをするよ!
echo 最初に先行・後攻を決めよう!
echo コインを投げるよ!表ならあなたが先行ね!
echo (ピンッ!)(効果音)
set NUM=%RANDOM%
set /a VAL=%NUM%%%2
if %VAL% equ 0 (
  echo コインは裏でした。
  echo あなたは後攻、印はXね!
  set COM=f
  set PLAY=s
  set O=COM
  set X=PLAY
) else (
  echo コインは表でした。
  echo あなたは先行、印はOね!
  set COM=s
  set PLAY=f
  set O=PLAY
  set X=COM
)
call :lbla

rem ★PLAY先行★
if !PLAY!==f (
rem 1手目(PLAY1)
  call PLAYDEC.bat
  call :lbla
rem 2手目(COM1)
  call COMDEC1.bat
  call :lbla
rem 3手目(PLAY2)
  call PLAYDEC.bat
  call :lbla
rem 4手目(COM2)
  call PLAYREACH.bat
  if !PLAYREACHFLG! equ 0 call COMDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 5手目(PLAY3)
  call PLAYDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 6手目(COM3)
  call COMREACH.bat
  if !COMREACHFLG! equ 0 (
    call PLAYREACH.bat
    if !PLAYREACHFLG! equ 0 call COMDEC.bat
  )
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 7手目(PLAY4)
  call PLAYDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 8手目(COM4)
  call COMREACH.bat
  if !COMREACHFLG! equ 0 (
    call PLAYREACH.bat
    if !PLAYREACHFLG! equ 0 call COMDEC.bat
  )
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 9手目(PLAY5)
  call PLAYDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 (
    goto endoffile
  ) else (
    echo 勝敗はつきませんでした。
    echo ゲームを終了します。
    goto endoffile
  )
rem ★COM先行★
) else if !COM!==f (
rem 1手目(COM1)
  call COMDEC1.bat
  call :lbla
rem 2手目(PLAY1)
  call PLAYDEC.bat
  call :lbla
rem 3手目(COM2)
  call COMDEC.bat
  call :lbla
rem 4手目(PLAY2)
  call PLAYDEC.bat
  call :lbla
rem 5手目(COM3)
  call COMREACH.bat
  if !COMREACHFLG! equ 0 (
    call PLAYREACH.bat
    if !PLAYREACHFLG! equ 0 call COMDEC.bat
  )
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 6手目(PLAY3)
  call PLAYDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 7手目(COM4)
  call COMREACH.bat
  if !COMREACHFLG! equ 0 (
    call PLAYREACH.bat
    if !PLAYREACHFLG! equ 0 call COMDEC.bat
  )
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 8手目(PLAY4)
  call PLAYDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 goto endoffile
rem 9手目(COM5)
  call COMDEC.bat
  call :lbla
  call JUDGE.bat
  if !JUDGE! equ 1 (
    goto endoffile
  ) else (
    echo 勝敗はつきませんでした。
    echo ゲームを終了します。
    goto endoffile
  )
)

:endoffile
endlocal
pause
exit

:lbla
echo ====
echo  ABC
echo 1!A1!!B1!!C1!
echo 2!A2!!B2!!C2!
echo 3!A3!!B3!!C3!
echo ====
PLAYDEC.bat
@echo off

rem PLAY側選択
if not !A1!==- set SEL1=-
if not !A2!==- set SEL2=-
if not !A3!==- set SEL3=-
if not !B1!==- set SEL4=-
if not !B2!==- set SEL5=-
if not !B3!==- set SEL6=-
if not !C1!==- set SEL7=-
if not !C2!==- set SEL8=-
if not !C3!==- set SEL9=-

:lblc
if !PLAY!==f (
  echo Oを付ける場所を選んでください。
  set /p PLAYVAL=!SEL1!/!SEL2!/!SEL3!/!SEL4!/!SEL5!/!SEL6!/!SEL7!/!SEL8!/!SEL9!を入力してください:
  call PLAYALCHK.bat
  if !PLAYALFLG! equ 1 (
    echo そこは選択出来ません。選び直してください。
    goto lblc
  )
  set !PLAYVAL!=O
  echo PLAYは!PLAYVAL!にOを書きました。
) else if !PLAY!==s (
  echo Xを付ける場所を選んでください。
  set /p PLAYVAL=!SEL1!/!SEL2!/!SEL3!/!SEL4!/!SEL5!/!SEL6!/!SEL7!/!SEL8!/!SEL9!を入力してください:
  call PLAYALCHK.bat
  if !PLAYALFLG! equ 1 (
    echo そこは選択出来ません。選び直してください。
    goto lblc
  )
  set !PLAYVAL!=X
  echo PLAYは!PLAYVAL!にXを書きました。
)
PLAYALCHK.bat
@echo off

rem PLAYの選択済確認

set PLAYALFLG=0

if !PLAYVAL!==A1 (
  if !A1FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !A1FLG! equ 0 (
    set A1FLG=1
  )
) else if !PLAYVAL!==A2 (
  if !A2FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !A2FLG! equ 0 (
    set A2FLG=1
  )
) else if !PLAYVAL!==A3 (
  if !A3FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !A3FLG! equ 0 (
    set A3FLG=1
  )
) else if !PLAYVAL!==B1 (
  if !B1FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !B1FLG! equ 0 (
    set B1FLG=1
  )
) else if !PLAYVAL!==B2 (
  if !B2FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !B2FLG! equ 0 (
    set B2FLG=1
  )
) else if !PLAYVAL!==B3 (
  if !B3FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !B3FLG! equ 0 (
    set B3FLG=1
  )
) else if !PLAYVAL!==C1 (
  if !C1FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !C1FLG! equ 0 (
    set C1FLG=1
  )
) else if !PLAYVAL!==C2 (
  if !C2FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !C2FLG! equ 0 (
    set C2FLG=1
  )
) else if !PLAYVAL!==C3 (
  if !C3FLG! equ 1 (
    set PLAYALFLG=1
  ) else if !C3FLG! equ 0 (
    set C3FLG=1
  )
) else set PLAYALFLG=1
COMDEC1.bat
@echo off

rem COM側選択
:lblb
set NUM=%RANDOM%
set /a VALABC=!NUM!%%2
if !VALABC! equ 0 set COMVALABC=A
if !VALABC! equ 1 set COMVALABC=C
set NUM=%RANDOM%
set /a VAL123=!NUM!%%2
if !VAL123! equ 0 set COMVAL123=1
if !VAL123! equ 1 set COMVAL123=3
set COMVAL=!COMVALABC!!COMVAL123!

call COMALCHK.bat
if !COMALFLG! equ 1 goto lblb

if !COM!==f (
  set !COMVAL!=O
  echo COMは!COMVAL!にOを書きました。
) else if !COM!==s (
  set !COMVAL!=X
  echo COMは!COMVAL!にXを書きました。
)
COMDEC.bat
@echo off

rem COM側選択
:lblb
set NUM=%RANDOM%
set /a VALABC=!NUM!%%3
if !VALABC! equ 0 set COMVALABC=A
if !VALABC! equ 1 set COMVALABC=B
if !VALABC! equ 2 set COMVALABC=C
set NUM=%RANDOM%
set /a VAL123=!NUM!%%3
if !VAL123! equ 0 set COMVAL123=1
if !VAL123! equ 1 set COMVAL123=2
if !VAL123! equ 2 set COMVAL123=3
set COMVAL=!COMVALABC!!COMVAL123!

call COMALCHK.bat
if !COMALFLG! equ 1 goto lblb

if !COM!==f (
  set !COMVAL!=O
  echo COMは!COMVAL!にOを書きました。
) else if !COM!==s (
  set !COMVAL!=X
  echo COMは!COMVAL!にXを書きました。
)
COMALCHK.bat
@echo off

rem COMの選択済確認

set COMALFLG=0

if !COMVAL!==A1 (
  if !A1FLG! equ 1 (
    set COMALFLG=1
  ) else if !A1FLG! equ 0 (
    set A1FLG=1
  )
) else if !COMVAL!==A2 (
  if !A2FLG! equ 1 (
    set COMALFLG=1
  ) else if !A2FLG! equ 0 (
    set A2FLG=1
  )
) else if !COMVAL!==A3 (
  if !A3FLG! equ 1 (
    set COMALFLG=1
  ) else if !A3FLG! equ 0 (
    set A3FLG=1
  )
) else if !COMVAL!==B1 (
  if !B1FLG! equ 1 (
    set COMALFLG=1
  ) else if !B1FLG! equ 0 (
    set B1FLG=1
  )
) else if !COMVAL!==B2 (
  if !B2FLG! equ 1 (
    set COMALFLG=1
  ) else if !B2FLG! equ 0 (
    set B2FLG=1
  )
) else if !COMVAL!==B3 (
  if !B3FLG! equ 1 (
    set COMALFLG=1
  ) else if !B3FLG! equ 0 (
    set B3FLG=1
  )
) else if !COMVAL!==C1 (
  if !C1FLG! equ 1 (
    set COMALFLG=1
  ) else if !C1FLG! equ 0 (
    set C1FLG=1
  )
) else if !COMVAL!==C2 (
  if !C2FLG! equ 1 (
    set COMALFLG=1
  ) else if !C2FLG! equ 0 (
    set C2FLG=1
  )
) else if !COMVAL!==C3 (
  if !C3FLG! equ 1 (
    set COMALFLG=1
  ) else if !C3FLG! equ 0 (
    set C3FLG=1
  )
)
PLAYREACH.bat
rem PLAYに対するリーチ判定、邪魔をする

set PLAYREACHFLG=0

if !PLAY!==f (
  if !A1!==O (
    if !B1!==O (
      if !C1!==- (
        set C1=X
        set C1FLG=1
        echo COMはC1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    ) 
  )
 
  if !A1!==O (
    if !B2!==O (
      if !C3!==- (
        set C3=X
        set C3FLG=1
        echo COMはC3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==O (
    if !A2!==O (
      if !A3!==- (
        set A3=X
        set A3FLG=1
        echo COMはA3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==O (
    if !C1!==O (
      if !B1!==- (
        set B1=X
        set B1FLG=1
        echo COMはB1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==O (
    if !C3!==O (
      if !B2!==- (
        set B2=X
        set B2FLG=1
        echo COMはB2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==O (
    if !A3!==O (
      if !A2!==- (
        set A2=X
        set A2FLG=1
        echo COMはA2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A2!==O (
    if !B2!==O (
      if !C2!==- (
        set C2=X
        set C2FLG=1
        echo COMはC2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A2!==O (
    if !C2!==O (
      if !B2!==- (
        set B2=X
        set B2FLG=1
        echo COMはB2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A2!==O (
    if !A3!==O (
      if !A1!==- (
        set A1=X
        set A1FLG=1
        echo COMはA1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==O (
    if !B2!==O (
      if !C1!==- (
        set C1=X
        set C1FLG=1
        echo COMはC1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==O (
    if !C1!==O (
      if !B2!==- (
        set B2=X
        set B2FLG=1
        echo COMはB2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==O (
    if !B3!==O (
      if !C3!==- (
        set C3=X
        set C3FLG=1
        echo COMはC3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==O (
    if !C3!==O (
      if !B3!==- (
        set B3=X
        set B3FLG=1
        echo COMはB3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B1!==O (
    if !B2!==O (
      if !B3!==- (
        set B3=X
        set B3FLG=1
        echo COMはB3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B1!==O (
    if !B3!==O (
      if !B2!==- (
        set B2=X
        set B2FLG=1
        echo COMはB2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B1!==O (
    if !C1!==O (
      if !A1!==- (
        set A1=X
        set A1FLG=1
        echo COMはA1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B2!==O (
    if !B3!==O (
      if !B1!==- (
        set B1=X
        set B1FLG=1
        echo COMはB1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B2!==O (
    if !C1!==O (
      if !A3!==- (
        set A3=X
        set A3FLG=1
        echo COMはA3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B2!==O (
    if !C3!==O (
      if !A1!==- (
        set A1=X
        set A1FLG=1
        echo COMはA1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B2!==O (
    if !C2!==O (
      if !A2!==- (
        set A2=X
        set A2FLG=1
        echo COMはA2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B3!==O (
    if !C3!==O (
      if !A3!==- (
        set A3=X
        set A3FLG=1
        echo COMはA3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !C1!==O (
    if !C2!==O (
      if !C3!==- (
        set C3=X
        set C3FLG=1
        echo COMはC3にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !C1!==O (
    if !C3!==O (
      if !C2!==- (
        set C2=X
        set C2FLG=1
        echo COMはC2にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !C2!==O (
    if !C3!==O (
      if !C1!==- (
        set C1=X
        set C1FLG=1
        echo COMはC1にXを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
)

if !COM!==f (
  if !A1!==X (
    if !B1!==X (
      if !C1!==- (
        set C1=O
        set C1FLG=1
        echo COMはC1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    ) 
  )
 
  if !A1!==X (
    if !B2!==X (
      if !C3!==- (
        set C3=O
        set C3FLG=1
        echo COMはC3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==X (
    if !A2!==X (
      if !A3!==- (
        set A3=O
        set A3FLG=1
        echo COMはA3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==X (
    if !C1!==X (
      if !B1!==- (
        set B1=O
        set B1FLG=1
        echo COMはB1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==X (
    if !C3!==X (
      if !B2!==- (
        set B2=O
        set B2FLG=1
        echo COMはB2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A1!==X (
    if !A3!==X (
      if !A2!==- (
        set A2=O
        set A2FLG=1
        echo COMはA2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A2!==X (
    if !B2!==X (
      if !C2!==- (
        set C2=O
        set C2FLG=1
        echo COMはC2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A2!==X (
    if !C2!==X (
      if !B2!==- (
        set B2=O
        set B2FLG=1
        echo COMはB2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A2!==X (
    if !A3!==X (
      if !A1!==- (
        set A1=O
        set A1FLG=1
        echo COMはA1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==X (
    if !B2!==X (
      if !C1!==- (
        set C1=O
        set C1FLG=1
        echo COMはC1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==X (
    if !C1!==X (
      if !B2!==- (
        set B2=O
        set B2FLG=1
        echo COMはB2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==X (
    if !B3!==X (
      if !C3!==- (
        set C3=O
        set C3FLG=1
        echo COMはC3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !A3!==X (
    if !C3!==X (
      if !B3!==- (
        set B3=O
        set B3FLG=1
        echo COMはB3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B1!==X (
    if !B2!==X (
      if !B3!==- (
        set B3=O
        set B3FLG=1
        echo COMはB3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B1!==X (
    if !B3!==X (
      if !B2!==- (
        set B2=O
        set B2FLG=1
        echo COMはB2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  goto lbld
  
  if !B1!==X (
    if !C1!==X (
      if !A1!==- (
        set A1=O
        set A1FLG=1
        echo COMはA1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B2!==X (
    if !B3!==X (
      if !B1!==- (
        set B1=O
        set B1FLG=1
        echo COMはB1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B2!==X (
    if !C1!==X (
      if !A3!==- (
        set A3=O
        set A3FLG=1
        echo COMはA3にOを書きました。
        set PLAYREACHFLG=1
          goto lbld
      )
    )
  )
  
  if !B2!==X (
    if !C3!==X (
      if !A1!==- (
        set A1=O
        set A1FLG=1
        echo COMはA1にOを書きました。
        set PLAYREACHFLG=1
          goto lbld
      )
    )
  )
  
  if !B2!==X (
    if !C2!==X (
      if !A2!==- (
        set A2=O
        set A2FLG=1
        echo COMはA2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !B3!==X (
    if !C3!==X (
      if !A3!==- (
        set A3=O
        set A3FLG=1
        echo COMはA3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !C1!==X (
    if !C2!==X (
      if !C3!==- (
        set C3=O
        set C3FLG=1
        echo COMはC3にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !C1!==X (
    if !C3!==X (
      if !C2!==- (
        set C2=O
        set C2FLG=1
        echo COMはC2にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
  
  if !C2!==X (
    if !C3!==X (
      if !C1!==- (
        set C1=O
        set C1FLG=1
        echo COMはC1にOを書きました。
        set PLAYREACHFLG=1
        goto lbld
      )
    )
  )
)

:lbld
COMREACH.bat
rem 自分のリーチ判定、勝ちに行く

set COMREACHFLG=0

if !PLAY!==f (
  if !A1!==X (
    if !B1!==X (
      if !C1FLG! equ 0 (
        set COMVAL=C1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !B2!==X (
      if !C3FLG! equ 0 (
        set COMVAL=C3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !A2!==X (
      if !A3FLG! equ 0 (
        set COMVAL=A3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C1!==X (
      if !B1FLG! equ 0 (
        set COMVAL=B1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C3!==X (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !A3!==X (
      if !A2FLG! equ 0 (
        set COMVAL=A2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !A2!==X (
    if !B2!==X (
      if !C2FLG! equ 0 (
        set COMVAL=C2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C2!==X (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !A3!==X (
      if !A1FLG! equ 0 (
        set COMVAL=A1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !A3!==X (
    if !B2!==X (
      if !C1FLG! equ 0 (
        set COMVAL=C1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C1!==X (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !B3!==X (
      if !C3FLG! equ 0 (
        set COMVAL=C3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C3!==X (
      if !B3FLG! equ 0 (
        set COMVAL=B3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !B1!==X (
    if !B2!==X (
      if !B3FLG! equ 0 (
        set COMVAL=B3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !B3!==X (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C1!==X (
      if !A1FLG! equ 0 (
        set COMVAL=A1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !B2!==X (
    if !B3!==X (
      if !B1FLG! equ 0 (
        set COMVAL=B1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
       set COMREACHFLG=1
      )
    ) else if !C1!==X (
      if !A3FLG! equ 0 (
        set COMVAL=A3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C3!==X (
      if !A1FLG! equ 0 (
        set COMVAL=A1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    ) else if !C2!==X (
      if !A2FLG! equ 0 (
        set COMVAL=A2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !B3!==X (
    if !C3!==X (
      if !A3FLG! equ 0 (
        set COMVAL=A3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
       set COMREACHFLG=1
      )
    )
  ) else if !C1!==X (
    if !C2!==X (
      if !C3FLG! equ 0 (
        set COMVAL=C3
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
       set COMREACHFLG=1
      )
    ) else if !C3!==X (
      if !C2FLG! equ 0 (
        set COMVAL=C2
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
       set COMREACHFLG=1
      )
    )
  ) else if !C2!==X (
    if !C3!==X (
      if !C1FLG! equ 0 (
        set COMVAL=C1
        set !COMVAL!=X
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にXを書きました。
       set COMREACHFLG=1
      )
    )
  )
) else if !COM!==f (
  if !A1!==O (
    if !B1!==O (
      if !C1FLG! equ 0 (
        set COMVAL=C1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !B2!==O (
      if !C3FLG! equ 0 (
        set COMVAL=C3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !A2!==O (
      if !A3FLG! equ 0 (
        set COMVAL=A3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C1!==O (
      if !B1FLG! equ 0 (
        set COMVAL=B1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C3!==O (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !A3!==O (
      if !A2FLG! equ 0 (
        set COMVAL=A2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !A2!==O (
    if !B2!==O (
      if !C2FLG! equ 0 (
        set COMVAL=C2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C2!==O (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !A3!==O (
      if !A1FLG! equ 0 (
        set COMVAL=A1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !A3!==O (
    if !B2!==O (
      if !C1FLG! equ 0 (
        set COMVAL=C1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C1!==O (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !B3!==O (
      if !C3FLG! equ 0 (
        set COMVAL=C3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C3!==O (
      if !B3FLG! equ 0 (
        set COMVAL=B3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !B1!==O (
    if !B2!==O (
      if !B3FLG! equ 0 (
        set COMVAL=B3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !B3!==O (
      if !B2FLG! equ 0 (
        set COMVAL=B2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C1!==O (
      if !A1FLG! equ 0 (
        set COMVAL=A1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !B2!==O (
    if !B3!==O (
      if !B1FLG! equ 0 (
        set COMVAL=B1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
       set COMREACHFLG=1
      )
    ) else if !C1!==O (
      if !A3FLG! equ 0 (
        set COMVAL=A3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C3!==O (
      if !A1FLG! equ 0 (
        set COMVAL=A1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    ) else if !C2!==O (
      if !A2FLG! equ 0 (
        set COMVAL=A2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
        set COMREACHFLG=1
      )
    )
  ) else if !B3!==O (
    if !C3!==O (
      if !A3FLG! equ 0 (
        set COMVAL=A3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
       set COMREACHFLG=1
      )
    )
  ) else if !C1!==O (
    if !C2!==O (
      if !C3FLG! equ 0 (
        set COMVAL=C3
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
       set COMREACHFLG=1
      )
    ) else if !C3!==O (
      if !C2FLG! equ 0 (
        set COMVAL=C2
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
       set COMREACHFLG=1
      )
    )
  ) else if !C2!==O (
    if !C3!==O (
      if !C1FLG! equ 0 (
        set COMVAL=C1
        set !COMVAL!=O
        set !COMVAL!FLG=1
        echo COMは!COMVAL!にOを書きました。
       set COMREACHFLG=1
      )
    )
  )
)
JUDGE.bat
@ echo off

rem 勝敗判定

rem Oの勝ち
if !A1!==O (
  if !A2!==O (
    if !A3!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
  if !B1!==O (
    if !C1!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
  if !B2!==O (
    if !C3!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !B1!==O (
  if !B2!==O (
    if !B3!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !C1!==O (
  if !C2!==O (
    if !C3!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
  if !B2!==O (
    if !A3!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !A2!==O (
  if !B2!==O (
    if !C2!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !A3!==O (
  if !B3!==O (
    if !C3!==O (
      echo %O%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)

rem Xの勝ち
if !A1!==X (
  if !A2!==X (
    if !A3!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
  if !B1!==X (
    if !C1!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
  if !B2!==X (
    if !C3!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !B1!==X (
  if !B2!==X (
    if !B3!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !C1!==X (
  if !C2!==X (
    if !C3!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
  if !B2!==X (
    if !A3!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !A2!==X (
  if !B2!==X (
    if !C2!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)
if !A3!==X (
  if !B3!==X (
    if !C3!==X (
      echo %X%の勝ちです。
      echo ゲームを終了します。
      set JUDGE=1
    )
  )
)