2016-10-24 11 views
0

こんにちはstackoverflowコミュニティ!まず、これは私の最初の投稿です。技術的な言葉があまりよくないので、この投稿の間違いや何かを言い訳してください。バッチ内のIF/ELSEステートメント...?

私はバッチでテキストベースのアドベンチャーゲームを作っています。私は現在、その小さな部分で作業しています。私の人生のために、私はIF/ELSEステートメントを行う方法を理解できません。私はネストした条件を試しましたが、成功しませんでした。ここに私が持っているものがあります:

echo You step up to the light. Luckily, it's pretty dim, 
echo so you're not burning your corneas. 
echo: 
echo What would you like to do? 
echo: 
echo 1] Attempt to fix the light 
echo 2] Go back to do something else 
echo: 
set /p decision=I want to... 
if "%decision%"=="2" goto restartStartNoLightFix 
if "%decision%"=="1" goto 
echo That choice is invalid. 
ping localhost -n 4 >nul 
goto inspectFlickerLight 

@エコーはオフです。

"%decision%" == "1"にして、プレイヤーがライトを修正する部分を持っているかどうかを確認したい場合があります。ネストされた状態は失敗であり、これは完全な吹き飛ばされたゲームなので、goto checkvariableを使用すると、私が使用する各決定が群を抜いているようです。 また、決定が常に変化する変数であれば、それは何かに影響します。

私はこれに助けていただきありがとうございます!

+1

"ネストされた条件は失敗でした"という意味を明確にしてください。 GEQ "1" echo fixing light' –

+0

ネストされたコードは表示されません。また、ライトを修正する部分をチェックするコードも表示されません。私はGOTOを使用していますが、行くラベルはありません。 – Squashman

答えて

0

質問する前に変数を直接チェックするのはどうですか?

Echo=You step up to the light. Luckily, it's pretty dim, 
Echo= so you're not burning your corneas. 
Echo= 
If Defined LightFix (
    Echo=What would you like to do? 
    Echo= 
    Echo=1] Attempt to fix the light 
    Echo=2] Go back to do something else 
    Echo= 
    Set/P decision=I want to... 
    If "!decision!"=="2" GoTo :restartStartNoLightFix 
    If "!decision!"=="1" GoTo :inspectFlickerLight 
    Echo=That choice is invalid. 
    Ping localhost -n 4 >nul 
) 

プレイヤーは一部を得たとき、変数、デモの目的のために%のLightFix%のと名付け、この場合は、以前に設定されていない場合、彼らはこれまでに、質問は表示されません。

あなたの好みによっては、あなたがこの方法もそれを書くことができます:

Echo=You step up to the light. Luckily, it's pretty dim, 
Echo= so you're not burning your corneas. 
Echo= 
If Not Defined LightFix (GoTo :NextBit) 
Echo=What would you like to do? 
Echo= 
Echo=1] Attempt to fix the light 
Echo=2] Go back to do something else 
Echo= 
Set/P decision=I want to... 
If "%decision%"=="2" GoTo :restartStartNoLightFix 
If "%decision%"=="1" GoTo :inspectFlickerLight 
Echo=That choice is invalid. 
Ping localhost -n 4 >nul 
:NextBit 

私が代わりにスペースまたはコロンの使用のエコー、(私の個人的な好み)、後に=を使用します。

ここでは、あなたのコメントが再構成されたセクションです。

If "%decision%"=="1" (
    If Defined hasPart (
     If "%hasPart%"=="True" (
      GoTo :fixFlickerLight 
     ) Else (
      Echo=You need the parts to fix the light! 
      Timeout 3 >Nul 
      GoTo :inspectFlickerLight 
     ) 
    ) 
) 
+1

こんにちは@Compo、最初の例はDelayedExpanionを必要としませんか? – LotPings

+0

最初の例は本当に遅延環境変数拡張を必要とします。 =ユーザが意図的に入力することができるようにするか、文法エラーのためバッチ処理の終了時に ''%if% '== "2" 'を含む文字列を誤って入力することができます。ドイツ語のキーボードを使用しているユーザがShift + 2を押した場合でも、 '2'ではなく' '' 'をタイプしても、' 'if"!== "2" 'と遅延展開が機能します。 – Mofi

+0

@LotPings、上の例を遅延拡張形式に変更しましたが、実際に適切な場所に追加する必要があるため、命令を追加しませんでした。コードと構造全体を見ることなく実行できません。 – Compo

関連する問題