while문과 가위바위보 게임

Jaemyeong Lee·2024년 8월 18일
0

어소트락2017

목록 보기
9/20

물론입니다! 주석으로 설명된 부분까지 포함하여 코드의 모든 줄을 하나씩 분석하겠습니다. 이 작업은 C++의 기본 개념을 이해하고, 코드가 어떻게 동작하는지 명확하게 알 수 있도록 도와줄 것입니다.

코드 전체 분석

#include <iostream>  // 표준 입출력 라이브러리
#include <cstdlib>   // rand, srand, system 같은 함수들을 사용하기 위한 라이브러리
#include <ctime>     // time 함수를 사용하기 위한 라이브러리

using namespace std; // std 네임스페이스를 사용하여 표준 라이브러리의 객체와 함수를 사용하기 위함

int main() {
    /*
     * 화면을 깨끗이 지워준다.
     * system("cls")는 콘솔 화면을 지우는 명령이다. 
     * Windows 환경에서만 동작하며, 콘솔 창의 내용을 초기화한다.
     */
    system("cls");

    /*
     * 난수 테이블 생성
     * srand((unsigned int)time(0))은 난수 생성기를 초기화하는 함수이다.
     * time(0)은 현재 시간을 초 단위로 반환하며, 이를 기반으로 난수 생성기의 시드를 설정하여
     * 매번 다른 난수 시퀀스를 생성할 수 있게 한다.
     */
    srand((unsigned int)time(0));

    int iPlayer, iAI; // 사용자와 AI의 선택을 저장할 변수를 선언한다.

    /*
     * while (true)는 무한 루프를 만든다.
     * 이 루프는 사용자가 게임을 종료할 때까지 계속 반복된다.
     */
    while (true) {
        // 게임 메뉴를 출력한다.
        cout << "1. 가위" << endl;
        cout << "2. 바위" << endl;
        cout << "3. 보" << endl;
        cout << "4. 종료" << endl;
        cout << "메뉴를 선택하세요: ";
        cin >> iPlayer; // 사용자가 선택한 메뉴를 입력받는다.

        /*
         * 입력값 검증: 사용자가 1~4 사이의 숫자를 입력했는지 확인한다.
         * if (iPlayer < 1 || iPlayer > 4)는 iPlayer가 1보다 작거나 4보다 큰 경우를 체크한다.
         * 사용자가 올바른 값을 입력하지 않았다면, 오류 메시지를 출력하고, 일시 정지한 뒤, 
         * continue를 사용해 루프의 시작으로 돌아간다.
         */
        if (iPlayer < 1 || iPlayer > 4) {
            cout << "잘못된 값을 입력하였습니다." << endl;
            system("pause"); // 프로그램을 일시 정지시킨다.
            continue; // 루프의 시작으로 돌아가서 다시 입력을 받는다.
        } 
        /*
         * 사용자가 4를 입력한 경우, 게임을 종료한다.
         * break 문은 루프를 탈출하는 역할을 한다.
         */
        else if (iPlayer == 4) {
            break; // while 루프를 종료하고 프로그램을 종료한다.
        }

        /*
         * AI의 선택: rand() % 3 + 1은 1에서 3 사이의 난수를 생성한다.
         * 이 값이 AI의 선택이 된다 (가위: 1, 바위: 2, 보: 3).
         */
        iAI = rand() % 3 + 1;

        /*
         * AI의 선택에 따른 결과를 출력한다.
         * switch 문을 사용해 iAI의 값에 따라 가위, 바위, 보 중 하나를 출력한다.
         */
        switch (iAI) {
            case 1:
                cout << "AI : 가위" << endl;
                break;
            case 2:
                cout << "AI : 바위" << endl;
                break;
            case 3:
                cout << "AI : 보" << endl;
                break;
        }

        /*
         * 승패 결정: iPlayer와 iAI의 차이를 계산하여 승패를 결정한다.
         * 가위바위보의 규칙에 따라 iWin이 1 또는 -2이면 플레이어가 승리,
         * 0이면 비김, 그 외의 경우 AI가 승리한다.
         */
        int iWin = iPlayer - iAI;

        /*
         * iWin 값에 따른 결과를 출력한다.
         * switch 문을 사용하여 승리, 비김, 패배의 경우를 처리한다.
         */
        switch (iWin) {
            case 1:
            case -2:
                cout << "Player 승리" << endl;
                break;
            case 0:
                cout << "비김" << endl;
                break;
            default:
                cout << "AI 승리" << endl;
                break;
        }

        /*
         * system("pause")는 프로그램을 일시 정지시킨다.
         * 사용자가 키를 누르면 게임의 다음 라운드로 넘어간다.
         */
        system("pause");
    }

    return 0; // 프로그램이 정상적으로 종료되었음을 운영체제에 알린다.
}

주석 포함 코드 분석

  1. 초기 설정 (system("cls");srand((unsigned int)time(0));)

    • 화면을 깨끗이 지우는 system("cls")는 윈도우 환경에서 콘솔 창을 초기화하는 역할을 합니다.
    • srand((unsigned int)time(0));는 현재 시간을 기준으로 난수 시퀀스를 초기화하여 매번 다른 결과를 생성할 수 있도록 합니다. 이 설정은 rand() 함수가 호출될 때마다 고유한 난수를 생성하게 합니다.
  2. 사용자 입력 처리와 무한 루프

    • while (true)는 무한 루프를 생성하여 프로그램이 사용자가 명시적으로 종료할 때까지 계속 실행되도록 합니다.
    • 사용자가 입력한 값(iPlayer)이 1~4 사이인지 확인하고, 유효하지 않은 경우 오류 메시지를 출력한 후 continue를 사용해 루프의 처음으로 돌아갑니다.
    • 사용자가 4를 입력하면 break 문을 사용해 루프를 종료하고 프로그램이 종료됩니다.
  3. AI의 선택과 난수 생성

    • iAI = rand() % 3 + 1;는 1부터 3 사이의 난수를 생성하여 AI의 선택을 결정합니다. 각 숫자는 가위(1), 바위(2), 보(3)에 대응합니다.
    • switch 문을 사용해 AI의 선택에 따라 적절한 메시지를 출력합니다.
  4. 게임의 승패 결정

    • iPlayer - iAI를 통해 플레이어의 선택과 AI의 선택 간의 차이를 계산하고, 이를 통해 승리 여부를 판단합니다.
    • switch 문을 통해 결과를 처리합니다:
      • case 1case -2는 플레이어의 승리를 의미합니다.
      • case 0은 비김을 의미합니다.
      • 나머지는 AI의 승리를 의미합니다.
  5. 게임의 일시 정지

    • system("pause");는 사용자에게 결과를 확인할 시간을 주고, 키를 누르면 다음 라운드로 넘어갑니다. 이는 게임의 진행을 사용자가 조절할 수 있도록 합니다.

결론

이번 포스트에서는 while 문을 활용한 C++의 가위바위보 게임을 주석과 함께 상세히 분석했습니다. 이 예제는 반복문, 조건문, 제어문(break, continue)을 어떻게 사용하는지 보여주며, 난수를 활용하여 게임 로직을 구현하는 방법도 잘 설명하고 있습니다.

이 코드 분석을 통해 C++의 기본적인 구조와 논리를 이해하고, 실제로 어떻게 응용할 수 있는지에 대한 감을 잡을 수 있습니다. 프로그램의 흐름을 제어하는 다양한 방법을 익히고, 이를 실전에서 적용할 수 있는 능력을 기르는 데 도움이 될 것입니다.

profile
李家네_공부방

0개의 댓글