2015-06-04 5 views
1

Итак, раньше я задал вопрос о том, как запустить строку через массив символов, чтобы каждая буква была равна отдельному значению символа в массиве.Hangman Game, итерация по массивам с циклом for в C#

Я пробовал использовать цикл foreach, а затем маркировал каждый объект в массиве «Угадай», а затем тестировал каждое значение в соответствии с введенным пользователем значением, но тогда я не мог понять, как выводить в конце цикла если пользователь ввел ложное значение. вместо вывода каждый раз, когда значение было ложным относительно значений массива, поскольку цикл предназначен для выполнения чего-либо для каждого значения.

Так что я застрял. Я думаю, что есть способ сделать это с циклом for, но я все еще вроде noobish. Мне было интересно, может ли кто-нибудь помочь мне.

 char letter; 
     int score = 0; 
     string hangWord; 

     //input inputs 
     Console.WriteLine("Welcome to the hangman game!"); 
     Console.WriteLine(); 
     Console.WriteLine(); 
     Console.WriteLine(); 
     Console.WriteLine("Player 1 please enter a word."); 
     hangWord = Convert.ToString(Console.ReadLine()); 
     char[] hangCharacters = hangWord.ToCharArray(); 
     char[] asteriskWord = hangWord.ToCharArray(); 
     string displayWord; 

     foreach (char guess in asteriskWord) 
     { 
      asteriskWord[guess] = '*'; 
     } 
     while (score < 5) 
     { 
      Console.WriteLine("Enter a letter please"); 

      Console.WriteLine(); 
      foreach (char guess in hangCharacters) 
      {    //How do I write a loop that tests all values and if none are correct 
          //displays "You guessed incorrectly"? 
       letter = Convert.ToChar(Console.ReadLine()); 
       if(guess == letter) 
       { 
        Console.WriteLine("You guessed correctly!"); 
        Console.WriteLine 
         //Also I don't know how to change the correct value  in the asteriskWord[] so that it displays 
         //only the character that was guessed in asteriskWord[] 
       } 

      } 
     } 
     Console.WriteLine("Your score is " + score); 
     if (displayWord == hangWord) 
      Console.WriteLine("You Win! Thank you for playing!"); 
     else 
     { 
      Console.WriteLine("Thank you for playing! Try again!"); 
     } 
+0

Не * втиснуть все * в одном sinle методе. Разложите свою реализацию. –

ответ

1

Перед Еогеаспа взять флаг Его как ложь, сделать это верно внутри Еогеасп только если письмо соответствует, в противном случае будет оставаться ложными. Проверьте состояние после итераций и покажите сообщение в соответствии с состоянием флага.

+0

Спасибо, что имеет большой смысл! Я бы поднял ваш комментарий, но я все еще ноб. Мне нужно еще 4 представителя, но я буду держать вас в голове. –

0

Вы можете немного изменить свою логику, чтобы узнать, есть ли угадывание в вешающих символах. В минуту, вы только проверить, если письмо пользователь вводит это в настоящее время итерация письмо

letter = Convert.ToChar(Console.ReadLine()); 
if(hangCharacters.Any(c => c == letter)) 
    Console.WriteLine("You guessed correctly!"); 
else 
    Console.WriteLine("You guessed incorrectly!"); 

Для использования выше вам необходимо включить System.Linq