2017-08-17 10 views
-2

私は、訓練の目的で単純なコンソールベースのモンスター戦闘ゲームを構築しています。C#他のユーザー入力処理の問題

私はそれが必要なところにあるwhileループを作成しましたが、ユーザーが間違った選択肢を入力すると、最終的な「誤入力」タイプのメッセージが画面上で無限にループします。

誰かが修正をお願いしますか?

または、try、catch例外ハンドラを使用する必要があります(私はまだあまりよくありません)。

P.S変数ブールacceptInputは、このコードセグメントに含まれていないクラスの先頭に初期化されます。

コードは次の、ありがとう。

while (!acceptInput) 
        { 
        if (playerChoice == "a" || playerChoice == "h") 
        { 
         if (playerChoice == "a") 
         { 
          player.PlayerAttack(); 
          if (random.NextDouble() > .9) 
          { 
           Console.WriteLine("You missed!"); 
           Console.WriteLine("Press ENTER to continue"); 
           Console.ReadLine(); 
          } 
          else 
          { 
           Console.WriteLine("It's a hit!"); 
           monster.MonsterDecreaseHealth(player.AttackPower); 
           Console.WriteLine("Press ENTER to continue"); 
           Console.ReadLine(); 
          } 
          acceptInput = true; 
         } 
         else if (playerChoice == "h") 
         { 
          player.PlayerHeal(); 
          acceptInput = true; 
         } 
        } 
        else 
        { 
         Console.WriteLine("That is not a valid choice, please enter either A or H"); 
        } 
        } 
+0

ような何かをするだろう。 –

+0

無効な入力でループ条件を変更していないので、何が変わるのですか?プレイヤーから 'playerChoice'をループ内に取得する必要があります。そうしないと、決して変更されません。 – itsme86

+1

なぜ 'while(!acceptInput)'が反転しているのですか? 'while(acceptInput)'だけが混乱しているように見えるのはなぜですか? '〜**は入力を受け入れていないのと同じように読むことができます。 – Seabizkit

答えて

2

上記のPintangと同様に、ユーザーにはplayerChoice変数の値をリセットする機会が与えられていないためです。 whileループの始めに、playerChoice変数を新しい入力にリセットする必要があります。現在のところ、playerChoiceの値を更新するメソッドはありません。したがって、条件の最初のインスタンスがfalseに評価された場合、無限ループが発生します。私はあなたが `playerChoice`の値を取得する方法を含める必要があり、この

while (!acceptInput) 
{ 
    playerChoice = GetUserInput(); // GetUserInput() return user input string 

    if (playerChoice.Equals("a")) 
    { 
     player.PlayerAttack(); 

     if (Random.NextDouble() > 0.9) 
     { 
      Console.WriteLine("You Missed!"); 
      Console.WriteLine("Press 'Enter' to Continue..."); 
      Console.ReadLine(); 
     } 

     else 
     { 
      Console.WriteLine("It's a hit!"); 
      monster.MonsterDecreaseHealth(player.AttackPower); 
      Console.WriteLine("Press 'Enter' to Continue..."); 
      Console.ReadLine(); 
     } 

     acceptInput = true; 
    } 

    else if (playerChoice.Equals("h")) 
    { 
     player.PlayerHeal(); 

     acceptInput = true; 
    } 

    else 
    { 
     Console.WriteLine("That is not a valid choice, please enter either A or H"); 
    } 
} 
+0

何[@ edm2282](https://stackoverflow.com/users/8309428/edm2282)は、 'playerChoice'を再度読み込まれると、プログラムは常に同じ値をとるため永遠にループします。 "それは有効な選択肢ではありません"というメッセージの後に 'playerChoice = Console.ReadLine();'を置きます。 – Tiramonium

-2

最初のオプションは使用することです:

break; 

無効な選択を印刷しているあなたの他の状態に。そのほかの条件で

acceptinput=true; 

2番目のオプションは、以下の行を置くことです。

+0

'Console.WriteLine("あなたが逃した! ");' – Will