5강 과제 2선승제 묵찌빠 프로그램를 시도해보는중인데 잘 안풀립니다 6강까지 봐도 잘 이해가 안가는데 혹시 참고 소스코드가 있을까요?
#include "pch.h"
int main()
{
srand((unsigned int)time(NULL));
// 0: 가위, 1: 바위, 2: 보
int nPlayer, nComputer;
int nPW = 0, nCW = 0;
bool isAtt = true; // 플레이어 공수 여부
bool isContinue = true; // 게임 실행
// 스타트 가위바위보 : 플레이어와 컴퓨터가 서로 다른 선택을 할 때까지 선택 반복
while (isContinue)
{
while (isContinue)
{
cout << "게임 시작 가위바위보!!" << endl;
cout << "선택 : ";
cin >> nPlayer;
nComputer = rand() % 3;
if (nPlayer != nComputer) //무승부 X
{
if (nPlayer == (nComputer + 1) % 3) // 플레이어 승
isAtt = true;
else // 컴퓨터 승
isAtt = false;
break;
}
cout << "nPlayer : " << nPlayer << " vs " << nComputer << " : nComputer" << endl;
cout << "비김 다시!!" << endl;
}
while (isContinue)
{
cout << "nPlayer : " << nPlayer << " vs " << nComputer << " : nComputer" << endl;
if (isAtt)
cout << "플레이어 공격" << endl;
else
cout << "컴퓨터 공격" << endl;
cout << "게임 플레이 묵찌빠!!" << endl;
cout << "선택 : ";
cin >> nPlayer;
nComputer = rand() % 3;
if (nPlayer == nComputer)
{
if (isAtt)
{
cout << "nPlayer : " << nPlayer << " vs " << nComputer << " : nComputer" << endl;
cout << "플레이어 승" << endl;
nPW++;
cout << "현재 스코어! " << endl << "플레이어 " << nPW << " : 컴퓨터 " << nCW << endl;
cout << "--------------------------------------------------" << endl;
}
else
{
cout << "nPlayer : " << nPlayer << " vs " << nComputer << " : nComputer" << endl;
cout << "컴퓨터 승" << endl;
nCW++;
cout << "현재 스코어! " << endl << "플레이어 " << nPW << " : 컴퓨터 " << nCW << endl;
cout << "--------------------------------------------------" << endl;
}
break;
}
else if (nPlayer == (nComputer + 1) % 3)
isAtt = true;
else
isAtt = false;
}
if (nPW == 2)
{
cout << "플레이어 최종 승리!!!" << endl;
isContinue = false;
}
else if (nCW == 2)
{
cout << "컴퓨터 최종 승리!!!" << endl;
isContinue = false;
}
}
system("pause");
}
다시 시도해서 성공한것 같은데 이렇게 해도 맞을까요?
안녕하세요 게임클래스 프로그래밍 강사 하민우 입니다.
우선 기능 부분으로 봤을 때 문제가 없는 것으로 확인 됩니다.
코드도 전체적으로 깔끔하게 잘 작성하셨는데 한가지 수정해야 될 부분이 while 반복문이 3번 사용 되었는데 조건식에 들어가는 변수가 모두 동일한 변수(isContinue)를 사용하였네요. 현재 묵찌빠 프로그램에서는 작동에 문제가 없기는 하지만 일반적으로 반복문의 조건식에 사용 되는 변수는 동일하지 않은 변수를 쓰는 것이 좋습니다.
동일한 변수를 사용하여 문제가 발생하게 되는 경우 원인 확인 및 수정이 어려운 경우가 발생할 수 있습니다.
해당 코드에서는 안쪽의 두 while문에 대해서는 조건식에 true 를 삽입하면 공수 결정 가위바위보는 break 로 빠져나오기 때문에 문제가 없을 것이고 묵찌빠 while 문은 isContinue = false; 아래쪽에 break를 추가하면 됩니다.
항상 열공하시고 또 궁금한 점이 있을 때는 언제든지 질문 주시기 바랍니다.
게임 개발자가 되는 가장 빠른 길, 게임클래스!