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 << "게임 끝!";
}
}
}
안녕하세요 게임클래스 입니다.
코드정리는 프로그래머에게 있어서 언제나 풀리지 않는 과제 같은 문제죠...
나중에 함수와, 클래스 구조체와 같은 OOP(객체지향프로그래밍)구조를 배우게 되면
좀더 정리가 가능하실겁니다
지금은 이대로도 괜찮습니다!!!!!
감사합니다.