아래 코드와 주석을 한 줄 한 줄 분석하여 자세히 설명해드리겠습니다.
랜덤 시드 초기화:
srand((unsigned int)time(0));
srand
함수를 통해 난수 생성기의 시드를 현재 시간(time(0)
)을 기준으로 설정합니다. 이렇게 하면 프로그램을 실행할 때마다 다른 난수 시퀀스를 생성하게 됩니다.배열 선언 및 초기화:
int iNumber[9] = {};
iNumber
는 크기가 9인 int
배열로, 1부터 9까지의 숫자를 저장할 공간입니다. {}
로 초기화하여 배열의 모든 요소를 0으로 설정합니다.1부터 9까지 숫자 배열 채우기:
for (int i = 0; i < 9; i++)
{
iNumber[i] = i + 1;
}
for
문을 사용해 배열 iNumber
에 1부터 9까지의 숫자를 순서대로 넣습니다. iNumber[0]
에는 1
, iNumber[1]
에는 2
, ... , iNumber[8]
에는 9
가 들어갑니다.배열 셔플 (Shuffle):
int iTemp, idx1, idx2;
for (int i = 0; i < 100; i++)
{
idx1 = rand() % 9;
idx2 = rand() % 9;
iTemp = iNumber[idx1];
iNumber[idx1] = iNumber[idx2];
iNumber[idx2] = iTemp;
}
for
문을 100번 반복하며 배열을 무작위로 섞습니다.idx1
과 idx2
는 0에서 8까지의 난수를 생성하여 배열 내 임의의 두 요소를 선택합니다.iTemp
에 iNumber[idx1]
값을 임시 저장하여 iNumber[idx1]
과 iNumber[idx2]
를 서로 교환합니다.숫자 숨김 출력:
cout << "*\t*\t*" << endl;
*
로 표시해 사용자가 알 수 없도록 합니다.Strike와 Ball 변수 초기화:
int iStrike = 0, iBall = 0;
iStrike
와 iBall
은 각각 스트라이크와 볼의 개수를 저장하는 변수입니다. 매 회마다 사용자가 입력한 숫자에 따라 이 변수들을 업데이트합니다.사용자 입력을 저장할 배열 선언:
int iInput[3];
iInput
배열은 사용자가 입력한 세 개의 숫자를 저장하는 배열입니다.게임 카운트 변수 선언:
int iGameCount = 1;
iGameCount
는 게임 진행 횟수를 카운트합니다. 이 변수는 각 회차가 끝날 때마다 1씩 증가합니다.메인 게임 루프 (반복문):
while (true)
{
cout << iGameCount << " 회" << endl;
cout << "1 ~ 9 사이의 숫자중 3개를 입력하세요(0 : 종료) : ";
cin >> iInput[0] >> iInput[1] >> iInput[2];
while
루프를 통해 사용자가 숫자를 맞출 때까지 반복합니다.cin
을 사용해 사용자가 입력한 세 개의 숫자를 iInput[0]
, iInput[1]
, iInput[2]
에 저장합니다.종료 조건 확인:
if (iInput[0] == 0 || iInput[1] == 0 || iInput[2] == 0)
{
break;
}
0
이면 게임을 종료합니다.유효성 검사 - 숫자 범위:
else if (iInput[0] < 0 || iInput[0] > 9 || iInput[1] < 0 || iInput[1] > 9 || iInput[2] < 0 || iInput[2] > 9)
{
cout << "잘못된 숫자를 입력하였습니다." << endl;
continue;
}
유효성 검사 - 중복 숫자 확인:
else if (iInput[0] == iInput[1] || iInput[0] == iInput[2] || iInput[1] == iInput[2])
{
cout << "중복된 숫자를 입력하였습니다." << endl;
continue;
}
Strike와 Ball 계산 초기화:
iStrike = iBall = 0;
iStrike
와 iBall
을 0으로 초기화하여 새롭게 계산합니다.Strike와 Ball 계산:
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (iNumber[i] == iInput[j])
{
if (i == j)
{
++iStrike;
}
else
{
++iBall;
}
break;
}
}
}
for
문을 사용하여 스트라이크와 볼의 개수를 계산합니다.iNumber[i] == iInput[j]
: iNumber
배열의 값과 iInput
배열의 값이 같은지 확인합니다.i == j
인 경우, 숫자와 위치가 모두 일치하는 것이므로 스트라이크(iStrike
)를 증가시킵니다.iBall
)을 증가시킵니다.break
문으로 현재 숫자 비교가 끝나면 내부 for
문을 빠져나가고, 다음 숫자로 비교를 계속합니다.결과 출력 및 정답 확인:
if (iStrike == 3)
{
cout << "숫자를 모두 맞췄습니다." << endl;
break;
}
else if (iStrike == 0 && iBall == 0)
{
cout << "Out" << endl;
}
else
{
cout << iStrike << " Strike " << iBall << " Ball " << endl;
}
iStrike == 3
이면 모든 숫자와 위치가 맞았다는 뜻으로 게임을 종료합니다.iStrike == 0 && iBall == 0
이면 사용자의 입력과 정답 숫자 사이에 공통된 숫자가 없으므로 Out
을 출력합니다.게임 횟수 증가:
++iGameCount;
iGameCount
를 1씩 증가시킵니다.종료:
return 0;
이 코드는 1부터 9 사이의 서로 다른 3개의 숫자를 무작위로 생성하고, 사용자가 이를 맞출 때까지 계속 입력을 받습니다. 숫자와 위치가 모두 맞으면 Strike
, 숫자는 맞지만 위치가 다르면 Ball
로 표시하여 사용자에게 힌트를 줍니다.