[내일배움캠프] 달리기반 Quest7 (행맨 게임)

Dreamer·2024년 9월 4일

7. 행맨게임

원래는 팀 미션으로 출제된건데 사전캠프 기간도 얼마 안남았고 각자 해야할 미션들이 아직 남은듯 하여 혼자서 작성하게 되었다.

해당 게임은 사용자가 맞춰야할 secretWord를 입력하고 secretWord를 한글자씩 총 6번의 기회로 맞춰야하는 게임이다.
입력한 문자가 해당 단어에 포함되어 있다면 포함된 결과를 알려주고
입력한 문자가 해당 단어에 포한되어 있지 않다면 기회를 한번씩 차감한다.

public class Quest7
{
    /// <summary>
    /// 맞춰야할 단어
    /// </summary>
    string secretWord;
    /// <summary>
    /// 사용자가 맞춘 문자를 저장 (초기에는 _로 표시)
    /// </summary>
    char[] guessWord;
    /// <summary>
    /// 사용자가 틀릴 수 있는 기회, 초기에는 6번
    /// </summary>
    int attempts = 6;
    /// <summary>
    /// 사용자 단어를 모두 맞췃는지를 나타내는 boolean 변수
    /// </summary>
    bool wordGuessed;

    private void Reset()
    {
        secretWord = String.Empty;
        guessWord = null;
        attempts = 6;
        wordGuessed = false;
    }

    public void InputWord()
    {
        Console.Write("영어 단어를 입력하세요: ");
        Console.ForegroundColor = ConsoleColor.Green;
        secretWord = Console.ReadLine();
        // 콘솔의 현재 커서 위치를 저장
        int currentLineCursor = Console.CursorTop;
        // 현재 커서 위치에서 한 줄 위로 이동
        Console.SetCursorPosition(0, currentLineCursor - 1);
        // 현재 커서 위치에서 한 줄을 공백으로 채움
        Console.Write(new string(' ', Console.WindowWidth));
        // 커서를 다시 한 줄 위로 이동
        Console.SetCursorPosition(0, currentLineCursor - 1);
        Console.WriteLine($"단어를 입력했습니다. 단어를 맞춰보세요!");
    }

    public void Run()
    {
        Reset();

        Console.WriteLine("---6. 행맨게임");
        InputWord();

        Console.ForegroundColor = ConsoleColor.White;
        guessWord = new char[secretWord.Length];
        for (int i = 0; i < secretWord.Length; i++)
            guessWord[i] = '_';

        while (true)
        {
            Console.Write("입력 문자: ");
            // 문자 입력
            string inputText = Console.ReadLine();
            // 입력받은 문자가 공백이면 게임을 종료한다.
            if (string.IsNullOrWhiteSpace(inputText))
            {
                Console.WriteLine("게임 종료");
                break;
            }
            else if (inputText.Length > 1)
            {
                // 입력받은 문자가 2글자 이상이면 다시 입력받는다.
                Console.WriteLine("한 글자만 입력해주세요.");
                continue;
            }
            Console.WriteLine();
            // 입력 단어를 찾았는지 확인
            bool finded = false;
            for (int i = 0; i < secretWord.Length; i++)
                if (secretWord[i] == inputText[0])
                {
                    guessWord[i] = inputText[0];
                    finded = true;

                    // 사용자가 입력받은 guessWord에서 _(언더바)가 없다면 wordGuessed를 true로 변경
                    wordGuessed = !guessWord.Contains('_');
                }
            // wordGuessed가 true면 단어를 맞췄으므로 게임 종료
            if (wordGuessed)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"축하합니다. 단어를 맞췄습니다. 정답: {secretWord}");
                Console.ForegroundColor = ConsoleColor.White;
                break;
            } 

            if (finded) // 단어를 찾았다면
            {
                Console.WriteLine($"현재 단어 {string.Join("", guessWord)}");
            }
            else // 단어를 못찾았다면
            {
                // 기회를 감소하고 attempts가 0이 되면 게임을 종료한다.
                if (--attempts < 1)
                {
                    Console.WriteLine($"실패했습니다. 정답은 {secretWord} 입니다.");
                    break;
                }
                else
                    Console.WriteLine($"틀렸습니다. 남은 기회: {attempts}");
            }


        }
        Console.WriteLine("------------------------------");
    }
}
profile
새로운 시작

0개의 댓글