OXゲームバッチver1.0
windowsバッチでOXゲームを作りました。
三目並べともいうらしいですね。こういう↓二人で順番に印付けていって印が3つ並んだら勝ちのゲームです。
OXO
XOX
XXO
メイン処理、プレイヤーが手を選択する処理、COM側の手を決定する処理、勝敗判定、の4ファイル。1ファイルにまとめたかったけど力不足ですた。
※改善したいポイント※
- プレイヤーが誤入力すると破綻する
- ソースコードの美しさ無視
- for文で短く書ける…と思われるところをべた書きしてる
- COMに戦略がない。相手の勝ちを邪魔するどころか自分がリーチでも勝ちに行かない。ただ確率で印付けるだけ。なのでCOMがとても弱い。
メモ帳にコピペして全部のファイルを同じ場所に保存、「OXGAME.bat」をダブルクリックするとゲーム出来ます。出来るはず。出来なかったらこっそり直します。
OXGAME.bat
@echo off
setlocal
setlocal ENABLEDELAYEDEXPANSION
rem OXゲームバッチ
rem 変数を定義
set COM=0
set PLAY=0
set O=0
set X=0
set NUM=0
set VAL=0
set VALABC=4
set VAL123=4
set COMVALABC=0
set COMVAL123=0
set COMVAL=0
set PLAYVAL=0
set JUDGE=0
set A1=-
set A2=-
set A3=-
set B1=-
set B2=-
set B3=-
set C1=-
set C2=-
set C3=-
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
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 COMDEC.bat
call :lbla
rem 3手目(PLAY2)
call PLAYDEC.bat
call :lbla
rem 4手目(COM2)
call COMDEC.bat
call :lbla
rem 5手目(PLAY3)
call PLAYDEC.bat
call :lbla
call JUDGE.bat
if !JUDGE! equ 1 goto endoffile
rem 6手目(COM3)
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 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
rem ★COM先行★
) else if %COM%==f (
rem 1手目(COM1)
call COMDEC.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 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 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
)
: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 !A1!==O set SEL1=-
if !A2!==O set SEL2=-
if !A3!==O set SEL3=-
if !B1!==O set SEL4=-
if !B2!==O set SEL5=-
if !B3!==O set SEL6=-
if !C1!==O set SEL7=-
if !C2!==O set SEL8=-
if !C3!==O set SEL9=-
if !A1!==X set SEL1=-
if !A2!==X set SEL2=-
if !A3!==X set SEL3=-
if !B1!==X set SEL4=-
if !B2!==X set SEL5=-
if !B3!==X set SEL6=-
if !C1!==X set SEL7=-
if !C2!==X set SEL8=-
if !C3!==X set SEL9=-
if %PLAY%==f (
echo Oを付ける場所を選んでください。
set /p PLAYVAL=!SEL1!/!SEL2!/!SEL3!/!SEL4!/!SEL5!/!SEL6!/!SEL7!/!SEL8!/!SEL9!を入力してください:
set !PLAYVAL!=O
echo PLAYがO印を書きました。
) else if %COM%==f (
echo Xを付ける場所を選んでください。
set /p PLAYVAL=!SEL1!/!SEL2!/!SEL3!/!SEL4!/!SEL5!/!SEL6!/!SEL7!/!SEL8!/!SEL9!を入力してください:
set !PLAYVAL!=X
echo PLAYが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!
if !COMVAL!==O (
set COMBAL=-
goto lblb
) else if !COMVAL!==X (
set COMBAL=-
goto lblb
)
if %COM%==f (
set !COMVAL!=O
echo COMがO印を書きました。
) else if %PLAY%==f (
set !COMVAL!=X
echo COMがX印を書きました。
)
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 %O%の勝ちです。
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
)
)
)