카테고리 없음

2025_01_03 TIL_03

chajungto0211 2025. 1. 3. 15:28

행맨 게임

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

처음에는 char쓰지말고 string으로도 비교는 되니까 string을 써서 해보려고 시도했다.  어느정도 완성시키고 시험해보려는데, guessWord를 업데이트 하는 과정에서 문자가 대체가 되어있지 않았다. 애초에 문자열의 위치로 다가가려고 하니 빨간줄이 그여 오류가 나고, Replace로 해보려고 하니 업데이트가 되지 않는 현상이 발생했다. 그래서 결국 둘다 char[]로 바꾸어 진행했더니 이번에는 guessWord == secretWord 를 확인하는 과정이 제대로 이루어지지 않음을 발견했다. 결국 업데이트된 guessWord를 보여줌과 동시에 두 개의 단어의 위치를 하나하나 비교해가며 같은지를 분석하는 방법을 넣어 해결했다. 만약 시작 단어가 정해져 있는것이 아닌 처음에 다른 사용자가 설정하는 것이라면 더 재미있을것 같다는 생각도 해보았다.

class Practice
{
    public static void Main()
    {
        //사전 정보
        char[] secretWord = ['h','a','n','g','m','a','n'];
        char[] guessWord = ['_','_','_','_','_','_','_'];
        int attempts = 6;
        bool wordGuessed = true;
        char inputAlp =' ';

        //시작 말
        Console.WriteLine("Hangman 게임이 시작되었습니다. 해당 단어가 무엇인지 맞춰주세요!");

        //시도 횟수가 소진될 때 까지
        while(attempts != 0)
        {
            bool isExist = false;
            //한번 시도할 때 마다 true값으로 초기화
            wordGuessed = true;
            Console.Write("알파벳 입력하기 : ");
            inputAlp = char.Parse(Console.ReadLine());

            //일치 여부 확인 후 현황을 업데이트
            for(int i = 0; i < secretWord.Length; i++)
            {
                if(inputAlp == secretWord[i])          
                {
                    guessWord[i] = secretWord[i];
                    isExist = true;
                }          
            }

            //만약 해당 알파벳이 존재하지 않는다면
            if(!isExist)
            {
                attempts--;
            }
           
            //현재 완성도를 보여줌과 동시에 secretWord와 guessWord를 비교하여 완성 여부를 확인
            Console.Write("현재 완성도 : ");
            for(int i = 0; i < guessWord.Length; i++)
            {
                Console.Write(guessWord[i]);
                if(guessWord[i] != secretWord[i])
                {
                    wordGuessed = false;
                }
            }
            Console.WriteLine(" / 남은 기회 " + attempts +"번");
           
            //완성이 되었다면 해당 while문을 탈출
            if(wordGuessed)
            {
                break;
            }
        }

        //결과에 따라 다르게 출력
        if(wordGuessed)
        {
            Console.Write("축하합니다!!! 정답 유추에 성공하셨습니다.");
        }

        else
        {
            Console.Write("아쉽군요. 탈락입니다.");
        }
    }
}

 

성공시에 나타나는 화면

실패시에 나타나는 화면