2015-01-23 4 views
0

나는이 교수형 집행 게임을 만들었지 만, 문제를 일으키는 간단한 루프 (For, While 또는 Do While)를 사용하여 프로그램에 사용자가 올바르게 대답하거나 계속 유지할 수있는 세 가지 기회를 제공해야한다는 것을 알아 채지 못했습니다. 그들이 정확하게 대답하면 반복. 나는 누군가가 올바른 방향으로 나를 안내 할 수 있는지 궁금 해서요?C# 행맨 게임에 대한 루프를 만들려면 어떻게해야합니까?

 Console.WriteLine("Do you want to play a game?"); 
     string answer = Console.ReadLine(); 

     if (answer == "no") 
     { 
      Console.WriteLine("Please Exit Program"); 
     } 


     System.Threading.Thread.Sleep(1000); 
     if (answer == "yes") 
     { 
      Console.WriteLine(" "); 
      Console.WriteLine("Welcome to Hangman"); 

      string[] array1 = new string[10]; 
      array1[0] = "hello"; 
      array1[1] = "swami"; 
      array1[2] = "zebra"; 
      array1[3] = "rainbow"; 
      array1[4] = "camp"; 
      array1[5] = "unicycle"; 
      array1[6] = "trivia"; 
      array1[7] = "hockey"; 
      array1[8] = "charlie"; 
      array1[9] = "canada"; 

      Random word = new Random(); 

      int mynumber = word.Next(0, 10); 

      char[] array2 = array1[mynumber].ToCharArray(); 


      char[] array3 = new char[array2.Length]; 

      Console.WriteLine(array2); 

      for (int i = 0; i < array2.Length; i++) 
      { 
       array3[i] = '*'; 
      } 

      Console.WriteLine(" "); 
      Console.WriteLine(array3); 

      System.Threading.Thread.Sleep(1500); 

      Console.WriteLine(" "); 
      int number = 1; 
      number = number + 1; 

      Console.WriteLine(" Guess a letter"); 
      char letter = Char.Parse(Console.ReadLine()); 
      Console.WriteLine(" "); 

      for (int i = 0; i < array2.Length; i++) 
      { 
       if (letter == array2[i]) 
       { 
        Console.Write(letter); 
       } 
       else 
       { 
        Console.Write("*"); 
       }      
      }    

      Console.WriteLine(" "); 
     }   
    } 
} 
+2

https://code.msdn.microsoft.com/windowsdesktop/HangMan-C-version-e0d17f1b – briskovich

+5

앞에'for' 루프 변수 각 루프를 증가, 숫자의 집합에 실행됩니다. 'while' 루프는 * (thanks @TyCobb) 루프 내에서 몇 가지 기준이 충족되는 한 실행됩니다. 'do while'은 'while'과 동일하지만 시작 부분 대신 루프의 끝에서 기준을 테스트합니다. 당신이 사용하는 것은 당신이하고 싶은 것에 달려 있습니다. – paqogomez

+0

글자가 잘못되었을 때만 숫자를 증가시켜야합니다. while 루프는 잘되어야합니다 (do-while도 작동합니다;이 경우에는 차이가 없습니다). 너무 일하기 때문에 혼란 스럽습니다. – Casey

답변

3

잠시 동안 코드의 세부 사항을 단계적으로 되돌리고 게임의 논리와 루프가 인간 언어로 표현되는 방법을 고려하십시오.

  1. 반복적으로 게임 내에서 입력을 요구 :

    당신은 기본적으로 두 개의 루프가 있습니다.

  2. 반복적으로 게임을합니다. 우리가 둥지에 인간의 언어 의사 코드를 서로 내 그 루프 인 경우

, 그것은 다음과 같습니다

while (player wishes to play again) 
    playGame() 

playGame() 내 :

while (game isn't over) 
    playTurn() 

을 당신이 이미 게임의 "회전"을 수행하는 코드를 가지고 있어야합니다 (플레이어가 추측하거나 추측이 맞거나 틀린 것으로 결정된 경우 등). 실제로 필요한 것은 그러한 조건을 정의하는 것입니다.

game isn't over 

이 경우 간단한 부울 플래그를 유지 관리 할 수 ​​있습니다. 다음과 같이하십시오 :

bool gameIsOver = false; 

주어진 차례에 게임의 논리를 확인하십시오. 플레이어가 이겼습니까? 메시지를 표시하고 플래그를 true으로 설정하십시오. 플레이어가 길을 잃었습니까? 동일한 응답, 다만 다른 메시지. 그래서 루프는 다음과 같이 끝납니다 :

bool gameIsOver = false; 
while (!gameIsOver) 
{ 
    // perform turn logic 
    // when a turn ends the game, set gameIsOver to true 
} 

같은 개념이 외부 루프에 적용될 수 있습니다. 루프의 의미 구조가되면 훨씬 더 간단하게 루프를 구성하는 데 사용

bool continueWithAnotherGame = true; 
while (continueWithAnotherGame) 
{ 
    // play a game 

    // ask the user if they would like to play again 
    // set continueWithAnotherGame based on the user's reply 
} 

물리적 키워드 :

player wished to play again 

그래서 당신이 그것을 같은 구조화 수 있습니다 그 중 하나는 정의 할 필요가있다 한정된. 거기에서 세부 사항에 더 집중할 수 있습니다. 예를 들어 게임에 3 회 "파업"이 있다고합니다. 그건 for 루프 내에서 카운터의 사용을 필요로하지 않습니다, 당신은 별도의 카운터를 사용할 수 있습니다. 뭔가 같이 :

bool gameIsOver = false; 
int strikes = 0; 
while (!gameIsOver) 
{ 
    // perform turn logic 

    // if the turn is a fail, increment strikes 

    // if strikes is greater than or equal to 3, set gameIsOver to true 

    // else if the turn is a pass, continue 

    // if the game is solved, set gameIsOver to true 
} 
+0

맞습니다. 비록 do-while과 구현이 똑같이 가능하다고 지적 하겠지만 (읽기가 더 어렵다면). – Casey

+0

@emodendroket : 모든 루프 구조가 작동합니다. 'for'도 작동 할 수 있으며 잠재적으로 단계 작업이없고 다른 조건부 검사도 있습니다. (물론 읽기가 더 어려울 것입니다.) – David

+1

맞습니다. 나는 그가 그것을 사용해야 만하는지 궁금해하기 때문에 OP 만 언급했다. 그리고 그것들은 모두 형식적으로 동등하다는 것을 이해하는 것이 도움이 될 것이라고 생각했다. – Casey

관련 문제