본문 바로가기

Programming language/C++

[C++] 행맨(Hang man) 구현하기

오늘 구현할 프로그램은 행맨 입니다.

 

행맨이란?

이 게임은 플레이어가 숨겨진 단어를 추측하여 정답을 맞히는 게임입니다. 플레이어는 7번의 기회가 있고 그 이후에는 게임에서 패배합니다. 모든 기회를 쓰기전에 주어진 단어를 맞추면 게임에서 승리하게 됩니다.

 

소스코드

#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <cstdlib>

using namespace std;

// Function to display the hangman state
void displayHangman(int incorrectGuesses) {
    const string hangmanStages[] = {
        "  +---+\n"
        "      |\n"
        "      |\n"
        "      |\n"
        "     ===\n",
        "  +---+\n"
        "  |   |\n"
        "      |\n"
        "      |\n"
        "     ===\n",
        "  +---+\n"
        "  |   |\n"
        "  O   |\n"
        "      |\n"
        "     ===\n",
        "  +---+\n"
        "  |   |\n"
        "  O   |\n"
        "  |   |\n"
        "     ===\n",
        "  +---+\n"
        "  |   |\n"
        "  O   |\n"
        " /|   |\n"
        "     ===\n",
        "  +---+\n"
        "  |   |\n"
        "  O   |\n"
        " /|\\  |\n"
        "     ===\n",
        "  +---+\n"
        "  |   |\n"
        "  O   |\n"
        " /|\\  |\n"
        " /    ===\n",
        "  +---+\n"
        "  |   |\n"
        "  O   |\n"
        " /|\\  |\n"
        " / \\  ===\n"
    };

    cout << hangmanStages[incorrectGuesses] << endl;
}

int main() {
    vector<string> words = {"programming", "hangman", "computer", "algorithm", "developer", "coding"};
    srand(static_cast<unsigned int>(time(nullptr)));
    string wordToGuess = words[rand() % words.size()];
    string wordGuessed(wordToGuess.length(), '_');
    int incorrectGuesses = 0;
    char guess;
    bool isGameDone = false;

    cout << "Welcome to Hangman!" << endl;

    while (!isGameDone) {
        cout << "Word to guess: " << wordGuessed << endl;
        cout << "Incorrect guesses: " << incorrectGuesses << "/7" << endl;
        displayHangman(incorrectGuesses);
        cout << "Enter a letter guess: ";
        cin >> guess;

        bool isGuessCorrect = false;
        for (size_t i = 0; i < wordToGuess.length(); i++) {
            if (wordToGuess[i] == guess) {
                wordGuessed[i] = guess;
                isGuessCorrect = true;
            }
        }

        if (!isGuessCorrect) {
            incorrectGuesses++;
        }

        if (wordGuessed == wordToGuess) {
            cout << "Congratulations! You guessed the word: " << wordToGuess << endl;
            isGameDone = true;
        } else if (incorrectGuesses == 7) {
            cout << "Sorry, you've run out of guesses. The word was: " << wordToGuess << endl;
            isGameDone = true;
        }
    }

    return 0;
}

출력 결과

Welcome to Hangman!
Word to guess: _______
Incorrect guesses: 0/7
  +---+
      |
      |
      |
     ===
Enter a letter guess: a
Word to guess: _______
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: p
Word to guess: p_______
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: r
Word to guess: pr______
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: o
Word to guess: pro_____
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: g
Word to guess: prog____
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: r
Word to guess: progr___
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: a
Word to guess: progra__
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: m
Word to guess: program_
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: i
Word to guess: programi
Incorrect guesses: 1/7
  +---+
  |   |
      |
      |
     ===
Enter a letter guess: n
Congratulations! You guessed the word: programming