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

よしなしごと.log

へたれSEの雑記帳

じゃんけんバッチ

遊び過ぎてSEとして不安になってきたので、じゃんけんをするWindowsバッチを作りました。

メモ帳にコピペしてデスクトップに拡張子.batで保存、ダブルクリックするとwindowsさんがじゃんけんしてくれます。暇でどうしようもない時にでも遊んでください。

→5/29追記:一番肝心なとこで変数の展開をしてないという恥かしい間違いをしていたので直しました。ついでにコメントも追加。

janken.bat

@echo off

rem じゃんけんバッチ

rem 変数を0で定義
set YN1=0
set YN2=0
set VAL1=1
set VAL2=0
set GCP=0
set NUM=0
set COM=0
set PLAY=0

rem ゲーム開始/終了をプレイヤーが選択
echo じゃんけんしましょ
:lblb
set /p YN1=はい→y いいえ→n を入力してください:
if %YN1%==n (
  echo さようなら
  goto lbla
) else if %YN1%==y (
  echo わーい!
) else (
  echo 違うよ!yかnだよ!
  goto lblb
)
rem メッセージ(じゃんけんorあいこ)
:lbli
echo じゃんけんしましょ!
echo じゃんけん……
:lbld
if %VAL2%==aiko (
  echo あいこで……
)

rem プレイヤー側の手を決定
:lblc
set /p GCP=ぐー!→g ちょき!→c ぱー!→p を入力してください:
if %GCP%==g (
  set PLAY=g
) else if %GCP%==c (
  set PLAY=c
) else if %GCP%==p (
  set PLAY=p
) else (
  echo そんな手ねーよ
  goto lblc
)

rem 乱数を取得してCOM側の手を決定
set NUM=%RANDOM%
set /a VAL1=%NUM%%%3
if %VAL1% equ 0 (
  set COM=g
) else if %VAL1% equ 1 (
  set COM=c
) else (
  set COM=p
)

rem メッセージ(ぽんorしょ)
if %VAL2%==aiko (
  echo しょ!
) else (
  echo ぽん!
)

rem COM側の手を表示
if %COM%==g (
  echo わたし:ぐー!
) else if %COM%==c (
  echo わたし:ちょき!
) else if %COM%==p (
  echo わたし:ぱー!
)

rem プレイヤー側の手を表示
if %PLAY%==g (
  echo あなた:ぐー!
) else if %PLAY%==c (
  echo あなた:ちょき!
) else if %PLAY%==p (
  echo あなた:ぱー!
)

rem 勝敗判定
if %COM%==%PLAY% (
  echo あいこでしょ
  set val2=aiko
  goto lbld
) else (
  if %COM%==g (
    if %PLAY%==c (
      goto lble
    ) else if %PLAY%==p (
      goto lblf

    )
  ) else if %COM%==c (
    if %PLAY%==g (
      goto lblf
    ) else if %PLAY%==p (

      goto lble
    )
    ) else if %COM%==p (
      if %PLAY%==g (
      goto lble
    ) else if %PLAY%==c (
      goto lblf
    )
  )
)

rem COM側勝ちのメッセージ
:lble
echo わたしの勝ち!
goto lblg


rem COM側負けのメッセージ
:lblf
echo あなたの勝ち!
goto lblg

rem ゲーム続行/終了をプレイヤーが選択
:lblg
echo もう一回する?
:lblh
set /p YN2=はい→y いいえ→n を入力してください:
if %YN2%==n (
  echo さようなら
  goto lbla
) else if %YN2%==y (
  echo わーい!
  goto lbli
) else (
  echo 違うよ!yかnだよ!
  goto lblh
)
goto lbla

rem 終了処理
:lbla
pause
exit