Qiita初投稿です。
バッチ言語でよくわからん数字パズルゲームもどきみたいなのを作りました。
ランダムに提示される目標の数値に向けて、演算子(コマンド)を駆使して数値を合わせていくパズルゲームです。
遊び方
毎ターン、ランダムに「現在の数値」が表示されるので、演算子(コマンド)を選び、画面に表示される 「目指しましょう」 の数値に向かって、現在の数値を変化させていけば良いです。
コマンド
k: *
t: +
h: -
w: /
m: %%
b: 保留
s: 絶対値
r: ルート
j: 累乗
a: パス(コスト多い)
c: ステップを現在の数値にコピー
n: ニアピン(コストめっちゃ多い)
コード
@echo off
setlocal enabledelayedexpansion
set /a holdflag=0
set /a num1=!random! %% 20
set /a num4=!random! %% 20
set /a num5=!random! %% 20
set /a num6=!random! %% 20
set "hold=null"
if not exist graph.bat (
(
echo @echo off
echo setlocal enabledelayedexpansion
echo for /f %%%%i in ^(golfsave2.txt^) do ^(
echo set "a="
echo for /L %%%%j in ^(1,1,%%%%i^) do ^(
echo set "a=^!a^!@"
echo ^)
echo if "^!a^!"=="" set "a=."
echo echo ^^^!a^^^!
echo ^)
) > graph.bat
)
if not exist golfsave2.txt (echo 12) > golfsave2.txt
title a splendid golf
set /a num2=!random! %% 20
set /a num3=!random! %% 30
set /a step=0
:loop
cls
if "!q!"=="b" (
if not !holdflag! equ 1 (
set /a hold=!num1!, holdflag=1
set /a num1=!num4!
set /a num4=!num5!
set /a num5=!num6!
set /a pm=!random! %% 5
set /a num6=!random! %% 20
set /a pm=!random! %% 5
if !pm! equ 0 set /a num6=!num6! * -1
) else (
set /a num1=!hold!, holdflag=0
set "hold=null"
)
) else (
set /a fff=0
if "!q!"=="s" (
if !num2! leq -1 set /a num2=!num2! * -1, fff=1
)
if "!q!"=="r" (
for /L %%j in (1,1,30) do (
set /a hyp=%%j * %%j
if !num2! equ !hyp! set /a num2=%%j
)
)
if "!q!"=="a" (
set /a num1=!num4!
set /a num4=!num5!
set /a num5=!num6!
set /a pm=!random! %% 5
set /a num6=!random! %% 20
set /a pm=!random! %% 5
if !pm! equ 0 set /a num6=!num6! * -1
set /a step=!step! + 1
)
if not "!q!"=="a" (
if not "!q!"=="s" (
if not "!q!"=="r" (
if not "!q!"=="c" (
set /a num1=!num4!
set /a num4=!num5!
set /a num5=!num6!
set /a pm=!random! %% 5
set /a num6=!random! %% 20
set /a pm=!random! %% 5
if !pm! equ 0 set /a num6=!num6! * -1
))))
)
)
cls
echo 目指しましょう: !num3!
echo 現在の数値: !num2!
echo 引いた数値: !num1!
echo 次以降(左から順): !num4!, !num5!, !num6!
echo 保留: !hold!
echo ステップ: !step!
if !num3! equ !num2! (
echo;
echo !step!ステップで成功
echo;
timeout /t 1 /nobreak >nul
if not "!hold!"=="null" echo 保留に入れた数を使わなかったね
echo;
if "!fff!"=="1" echo センス良いね
echo;
set /a aaaaaaa=0, sssssss=0
for /f %%i in (golfsave2.txt) do (
set /a aaaaaaa=!aaaaaaa! + %%i, sssssss=!sssssss! + 1
)
set /a aaaaaaa=!aaaaaaa! / !sssssss!
if !step! leq !aaaaaaa! echo 平均より早いね
echo;
set "message=悪くないね"
if !step! leq 20 (set "message=まあまあ早いね")
if !step! leq 10 (set "message=結構早いね")
if !step! leq 5 (set "message=素晴らしく早いね")
if !step! leq 3 (set "message=至極早いね")
if !step! equ 1 (set "message=シャレーイ")
if !step! equ 0 (set "message=運が良いね")
if !step! geq 50 (set "message=少しばかり情けないね")
if !step! geq 40 (set "message=ちょっと情けないね")
if !step! geq 50 (set "message=情けないね")
if !step! geq 100 (set "message=真面目にやってる?")
echo !message!
(echo !step!) >> golfsave2.txt
for /L %%j in (1,1,3) do (
echo;
timeout /t 1 /nobreak >nul
)
echo ^(c^)PYRROLINE
timeout /t 1 /nobreak >nul
start "" golf.bat && exit
)
echo;
echo k: *
echo t: +
echo h: -
echo w: /
echo m: %%
echo b: 保留
echo s: 絶対値
echo r: ルート
echo j: 累乗
echo a: パス(コストは多い)
echo c: ステップを現在の数値にコピー
echo n: ニアピン(コスト大杉)
echo;
call :e
if "!q!"=="c" set /a num1=!step!
set /a step=!step! + 1
set "q=!q:~0,1!"
:f
set /a splendid=0
if not "!q!"=="n" if not "!q!"=="c" if not "!q!"=="k" if not "!q!"=="t" if not "!q!"=="h" if not "!q!"=="w" if not "!q!"=="m" if not "!q!"=="s" if not "!q!"=="j" if not "!q!"=="r" if not "!q!"=="b" if not "!q!"=="a" set /a splendid=1 & call :e
if "!q!"=="k" set /a num2=!num2! * !num1!
if "!q!"=="t" set /a num2=!num2! + !num1!
if "!q!"=="h" set /a num2=!num2! - !num1!
if "!q!"=="w" set /a num2=!num2! / !num1!
if "!q!"=="m" set /a num2=!num2! %% !num1!
if "!q!"=="n" (
set /a n1=!num2! + 1, n2=!num2! - 1, step=!step! * 2
if !n1! equ !num3! set /a num2=!num3!
if !n2! equ !num3! set /a num2=!num3!
)
if "!q!"=="j" (
set /a keep=!num2!
for /L %%k in (1,1,!num1!) do (set /a num2=!num2! * !keep!)
)
goto :loop
:e
set "q=splendid"
set /p q="演算子(kthwmbsrj): "
if "!q!"=="splendid" goto :e
if !splendid! equ 1 goto :f else exit /b
不具合や改善案等がありましたら、コメントしていただけると幸いです。
ライセンス
私はこの記事に含まれるコードをCC BY-NC-SA 4.0 の下で提供します。