제 목 7강 과제 보강
작성자 우대식 등록날짜 2022-01-03 22:54:02 / 조회수 : 220
강좌명 [단과] 게임 프로그래밍 기초 C++ Part.1
첨부파일
  • 7강 과제에서 피드백주신 추가사항을 넣어서 코드를 보강했습니다.

    이래저래 넣다뺏다하니 코드 가독성이 상당히 떨어집니다.

     

    추가사항 1. 1~9 이외의 숫자 입력 불가능하게 하기 : 이 쪽은 직접 찾아본 try & catch 로 처리했습니다.

                    1미만 혹은 10이상의 수를 입력 할 경우 while함수로 재입력시켰습니다.

     

    추가사항 2. 같은 숫자 입력 금지 : 이미 배웠던 조건문 while 과 논리연산자를 통해 비교적 수월하게 처리했습니다.

     

    피드백 감사합니다.


    #include
    #include

    using namespace std;


    int main()
    {
        int nUser[3];
        int nRand[10];
        int nStrike = 0, nBall, nOut;
        int nCount;
        bool bUser1, bUser2, bUser3;
        bool bEnding = true;

        srand(time(NULL));
        rand();

        while (bEnding) // 게임 지속 or 끝내기 
        {
            for (int i = 0; i < 9; i++)
                nRand[i] = i + 1;
            for (int i = 0; i < 100; i++)
            {
                int nScr = rand() % 9;
                int nDest = rand() % 9;

                int nTemp = nRand[nScr];
                nRand[nScr] = nRand[nDest];
                nRand[nDest] = nTemp;
            }//랜덤셔플

            nCount = 0;
            nStrike = nBall = nOut = 0; // 변수 초기화

            while (nStrike < 3 && nCount < 10) // 게임 시작
            {
                nStrike = nBall = nOut = 0;
                nCount++;
                bUser1 = bUser2 = bUser3 = true;

                cout << nCount << "회 시도" << endl;
                while (bUser1)
                {
                    cout << "첫번째 숫자를 입력하세요. (1~9) : ";
                    cin >> nUser[0];
                    try {
                        if (1 > nUser[0] <=10 ) throw nUser[0];
                        bUser1 = false;
                    }
                    catch (int exception) {
                        cout << "1~9사이의 수를 입력해주세요." << endl;
                    }
                }
                while (bUser2)
                {
                    cout << endl << "두번째 숫자를 입력하세요. (1~9) :";
                    cin >> nUser[1];
                    try {
                        if (1 > nUser[1] <= 10) throw nUser[1];
                        bUser2 = false;
                    }
                    catch (int exception) {
                        cout << "0~9사이의 수를 입력해주세요." << endl;
                    }
                    while (nUser[0] == nUser[1])
                    {
                        cout << endl << "같은 숫자인 " << nUser[1] << " 은 사용할 수 없습니다." << endl << "두번째 숫자를 입력하세요. (1~9) :";
                        cin >> nUser[1];
                    }
                }
                while (bUser3)
                {
                    cout << endl << "세번재 숫자를 입력하세요. (1~9) :";
                    cin >> nUser[2];
                    try {
                        if (1 > nUser[2] <= 10) throw nUser[2];
                        bUser3 = false;
                    }
                    catch (int exception) {
                        cout << "1~9사이의 수를 입력해주세요." << endl;
                    }
                    while (nUser[0] == nUser[2] || nUser[1] == nUser[2])
                    {
                        cout << endl << "같은 숫자인 " << nUser[2] << " 은 사용할 수 없습니다." << endl << "세번째 숫자를 입력하세요. (1~9) :";
                        cin >> nUser[2];
                    }
                }

                for (int i = 0 ; i < 3; i++)
                {
                    if (nUser[i] == nRand[i])
                        nStrike++;
                    else if (nUser[i] == nRand[(i + 1) % 3] || nUser[i] == nRand[(i + 2) % 3])
                        nBall++;
                    else
                        nOut++;
                }
             

                cout << nStrike << ":스트라이크" << endl;
                cout << nBall << ":볼" << endl;
                cout << nOut << ":아웃" << endl;


                system("pause");
                system("cls");

            }

            if (nStrike == 3)
            {
                cout << nCount << "회 만에 성공했습니다." << endl;
            }
            else
            {
                cout << nCount << "회를 넘어 실패했습니다." << endl;
            }
            cout << "새 게임을 시작할까요? (y/n)" << endl;
            char chContinue;
            cin >> chContinue;
            if (chContinue == 'n')
            {
                bEnding = false;
                cout << "게임 끝!";
            }
        }

    }

  • 작성자 : 게임클래스 / 등록날짜 : 2022-01-05 14:08:54
  • 안녕하세요 게임클래스 입니다.

    코드정리는 프로그래머에게 있어서 언제나 풀리지 않는 과제 같은 문제죠...

    나중에 함수와, 클래스 구조체와 같은 OOP(객체지향프로그래밍)구조를 배우게 되면 

    좀더 정리가 가능하실겁니다

    지금은 이대로도 괜찮습니다!!!!!

     

    감사합니다.