행맨 게임 만들기

ggm-_-·2024년 9월 2일

Q. 사용자로부터 문자를 입력받아 숨겨진 단어를 맞추는 행맨 게임을 작성하세요. 사용자가 단어의 모든 문자를 맞추거나 주어진 기회 내에 맞추지 못할 때까지 반복합니다.

  • 게임 설명: 행맨 게임은 사용자가 단어를 추측하는 게임입니다. 사용자는 알파벳을 하나씩 입력하고, 맞출 때마다 단어의 해당 위치에 문자가 표시됩니다. 틀릴 경우, 기회가 줄어듭니다.
  • 배열 사용: char[] 배열을 사용하여 단어를 저장하고, 추측된 문자를 저장합니다.
  • 반복문 사용: 게임은 사용자가 단어를 맞추거나 기회가 끝날 때까지 반복됩니다.
  • 조건문 사용: 각 입력된 문자가 단어에 포함되는지 확인합니다.

사용 변수 설명

  • secretWord: 맞춰야 할 단어입니다. 예제에서는 "hangman"으로 설정되어 있습니다.
  • guessWord: 사용자가 맞춘 문자를 저장하는 문자 배열로, 초기에는 언더스코어(_)로 채워져 있습니다.
  • attempts: 사용자가 틀릴 수 있는 기회의 수로, 초기에는 6으로 설정되어 있습니다.
  • wordGuessed: 사용자가 단어를 모두 맞췄는지를 나타내는 불리언 변수입니다.

  • 코드
string secretWord = "hangman";
//'_'를 secretWord의 길이만큼 반복하는 새 배열 생성
char[] guessWord = Enumerable.Repeat('_', secretWord.Length).ToArray();
int attempts = 6;


//정해진 횟수(6)만큼 추론시작
for(int i = 0; i < attempts; i++)
{
    Console.Write(new string(guessWord) + " guess the word! : ");
    string input = Console.ReadLine();
    // 문자 1개 입력시 맞출 단어에 포함되면 추론단어에 단어입력
    if(input.Length == 1)
    {
        char guessTemp = input[0];
        //문자가 맞출 단어에 포함되는지 확인
        if (secretWord.Contains(guessTemp))
        {
            //포함되면 이미 추론중인 단어에 있는지 확인. 중복되면 실행x(한마디로 한 단어른 두 번 부른 셈)
            if (!guessWord.Contains(guessTemp))
            {
                //추론단어에 단어 입력
                for (int j = 0; j < secretWord.Length; j++)
                {
                    if (secretWord[j] == guessTemp)
                        guessWord[j] = guessTemp;
                }
                //추론단어가 완성되었을 경우
                if (Enumerable.SequenceEqual(guessWord, secretWord.ToCharArray()))
                {
                    Console.WriteLine("Congratulations! You answered correctly.");
                    break;
                }

            }
        }
    }
    // 입력 문자열이 맞출 단어의 문자열 길이와 동일
    else if (input.Length == secretWord.Length)
    {
        //정답을 맞춤
        if(string.Equals(input, secretWord)) 
        {
            guessWord = secretWord.ToCharArray();
            Console.WriteLine("Congratulations! You answered correctly.");
            break;
        }
        //못 맞춤
        else
        {
            Console.WriteLine("You are worong.");
        }
    }
    // 올바르지 못한 형식을 입력함
    else
    {
        Console.WriteLine("Enter one character or \nmatch it to the length of the secret word.");
    }
}
//추론 끝 (성공 or 횟수 초과로 인한 실패)

//추론 실패.
if(guessWord.Contains('_'))
{
    Console.WriteLine("You are lose. This is your final reasoning word. " + new string(guessWord));
}
profile
나태 마스터

0개의 댓글