신규 블로그를 만들었습니다!
Baseball Game (야구 게임)
규칙
사용자는 1부터 9까지 중 3개의 숫자를 뽑아 컴퓨터가 랜덤으로 뽑은 숫자와 비교한다. (중복되는 숫자는 없다.)
숫자의 자리와 숫자값이 모두 같으면 스트라이크!
자리는 다르지만 3개의 숫자 중 포함 되어 있으면 볼!
예를들어,
컴퓨터 |
2 |
3 |
6 |
나 |
1 |
2 |
3 |
자리는 안맞지만 2와 3이 포함되어 있으므로 0 strike, 2 ball
컴퓨터 |
2 |
3 |
6 |
나 |
2 |
1 |
4 |
2 숫자가 자리와 숫자가 모두 같으므로 1 strike, 0 ball
컴퓨터 |
2 |
3 |
6 |
나 |
2 |
6 |
3 |
1 strike, 2 ball
컴퓨터 |
2 |
3 |
6 |
나 |
2 |
3 |
6 |
모두 같으므로 3 strike, 게임 끝!
단계별 코딩
1부터 9까지 배열을 이용해서 할당한다. (컴퓨터의 수)
// 1 ~ 9 까지의 수를 할당
for (int i = 0; i < 9; i++) {
iNum[i] = i + 1;
}
배열의 인덱스 값을 랜덤으로 뽑아서 스완하는 형식이므로, 중복된 값은 나오지 않는다.
이렇게 100번 정도 스왑과 셔플을 해서 완벽한 난수를 만든다.
// 100번 셔플
int iTemp, idx1, idx2;
srand((unsigned int)time(0));
for (int i = 0; i < 100; i++) {
idx1 = rand() % 9;
idx2 = rand() % 9;
// 스왑
iTemp = iNum[idx1];
iNum[idx1] = iNum[idx2];
iNum[idx2] = iTemp;
}
스트라이크 횟수롸 볼 횟수를 기록할 변수 선언 및 초기화.
유저가 입력한 수를 저장할 변수 선언 및 초기화
몇번만에 게임을 끝내는지 기록할 카운트 변수 선언 및 초기화
int iStrike = 0, iBall = 0;
int input[3] = {};
int count = 0;
while 반복문을 통해 게임을 맞출때까지 반복한다.
그리고 1 ~ 9 이외의 다른 수를 넣으면 게임을 종료한다.
cout << "1 ~ 9 사이의 숫자 중 3개 입력 하시오 (그 밖의 숫자 입력시 종료)" << endl;
cin >> input[0] >> input[1] >> input[2]; // 입력 받는다.
// 0 누르면 종료
if (input[0] < 1 || input[0] > 9
|| input[1] < 1 || input[1] > 9
|| input[2] <1 || input[2] > 9) {
break;
}
반복문을 이용해서 컴퓨터의 숫자와 내가 입력한 숫자 3개를 비교한다.
자리와 숫자 값 모두 같으면 스트라이크 횟수(iStrike)를 증가시킨다.
자리는 다르지만 숫자값은 같으면 볼 횟수(iBall)를 증가 시킨다.
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
// iNum과 user가 입력한 값들이 같은지 확인
if (iNum[i] == input[j]) {
if (i == j) {
// 자리수랑 숫자가 모두 같으므로 Strike!
iStrike++;
}
else {
// 자리수는 다르지만 값은 같으므로 ball!
iBall++;
}
}// end if
}// end j for
}// end i for
3개의 숫자 비교를 끝내고 카운트를 증가시켜 게임을 몇번했는지 기록한다.
count++;
스트라이크가 3이면 모두 맞춘 경우 이므로, (즉 게임이 끝난 경우)
while문을 나와서 프로그램을 종료한다.
그 의외의 경우는 아직 게임을 못끝냈으므로 반복문 계속해서 실행 한다.
if (iStrike == 3) {
// 모두 맞췄으므로 빠져나온다.
cout << count << "번 만에 맞췄습니다." << endl;
break;
}
else {
cout << "Strike : " << iStrike << "\tBall : " << iBall << endl;
// 아직 못맞춤. 다시 게임 시작 및 초기화
iStrike = 0;
iBall = 0;
}
전체 코드
#include <iostream>
#include <time.h>
using namespace std;
int main() {
cout << "야구 게임" << endl;
int iNum[9] = {};
// 1 ~ 9 까지의 수를 할당
for (int i = 0; i < 9; i++) {
iNum[i] = i + 1;
}
// 100번 셔플
int iTemp, idx1, idx2;
srand((unsigned int)time(0));
for (int i = 0; i < 100; i++) {
idx1 = rand() % 9;
idx2 = rand() % 9;
// 스왑
iTemp = iNum[idx1];
iNum[idx1] = iNum[idx2];
iNum[idx2] = iTemp;
}
int iStrike = 0, iBall = 0;
int input[3] = {};
int count = 0; // 몇번만에 정답을 맞추는지
while (true) {
cout << "1 ~ 9 사이의 숫자 중 3개 입력 하시오 (그 밖의 숫자 입력시 종료)" << endl;
cin >> input[0] >> input[1] >> input[2]; // 입력 받는다.
// 0 누르면 종료
if (input[0] < 1 || input[0] > 9
|| input[1] < 1 || input[1] > 9
|| input[2] <1 || input[2] > 9) {
break;
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
// iNum과 user가 입력한 값들이 같은지 확인
if (iNum[i] == input[j]) {
if (i == j) {
// 자리수랑 숫자가 모두 같으므로 Strike!
iStrike++;
}
else {
// 자리수는 다르지만 값은 같으므로 ball!
iBall++;
}
}// end if
}// end j for
}// end i for
count++;
if (iStrike == 3) {
// 모두 맞췄으므로 빠져나온다.
cout << count << "번 만에 맞췄습니다." << endl;
break;
}
else {
cout << "Strike : " << iStrike << "\tBall : " << iBall << endl;
// 아직 못맞춤. 다시 게임 시작 및 초기화
iStrike = 0;
iBall = 0;
}
}// end while
return 0;
}
'Language > C&C++' 카테고리의 다른 글
C++ :: STL sort() 함수 다루기, 오름차순 내림차순, 학생 점수 순서대로 나열하기 (10) | 2018.04.29 |
---|---|
C++ :: 연산자 (사칙 연산자, 관계 연산자, 논리 연산자) (0) | 2018.03.02 |
C++ :: 간단한 로또 프로그램 만들기! (1) | 2018.02.22 |
C++ :: 함수를 이용한 변수 초기화 방법 #4 (0) | 2018.02.18 |
C++ :: 자료형과 상수(const, define), 변수 #3 (0) | 2018.02.18 |
최근댓글