
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));
}