0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.batでよくわからんゲーム

0
Posted at

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 の下で提供します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?