BE/C++

[C++] 숫자 야구 게임 ( 랜덤숫자 3개로 Strike, Ball )

콩다영 2023. 11. 9.
728x90

컴퓨터가 랜덤으로 뽑은 3개 숫자로 야구게임하기 !

 

 

숫자 야구 게임 규칙 

숫자 야구 게임 규칙

 

[ 적용조건 ]

▷ 사용자는 1 ~ 9까지 중 3개의 숫자를 뽑아 컴퓨터가 랜덤으로 뽑은 숫자 3개와 비교 ( 중복 X ).

숫자의 자리와 값이 모두 같으면 strike, 자리는 다르지만 3개의 숫자 중 포함이 되어 있으면 ball.

3자리 숫자의 자리와 값모두 같으면 홈런, 모두 다르면 아웃 !

 

 

 

실행코드

#include <iostream>
#include <time.h>
#include <random>


// 프로젝트. 야구 게임


using std::cout;
using std::cin;
using std::endl;

int main() {
	int num1, num2, num3, num;
	int comNum[3] = { 0, }, inNum[3] = { 0, }, check[10] = { 0, };
	int strike = 0, ball = 0, playCnt = 1;
	cout << "◈ ◈  LET'S PLAY BASEBALL GAME  ◈ ◈" << endl;

	// 3개 숫자 랜덤 추출.
	std::srand(time(NULL));
	for (int i = 0; i < 3; i++) {
		do {
			num = std::rand() % 9 + 1;
		} while (check[num] == 1);
		comNum[i] = num;
		check[num] = 1;
	}

	while (1) {
		cout << "\n1 ~ 9 사이의 숫자 3개를 입력 하시오. (이외의 숫자 : 종료)" << endl;
		cin >> num1 >> num2 >> num3;

		//중복체크
		if (num1 == num2 || num2 == num3 || num1 == num3) {
			cout << "중복 숫자가 있습니다." << endl;
		}
		else if (num1 < 1 || num2 < 1 || num3 < 1 || num1 > 9 || num2 > 9 || num3 > 9) {
			cout << "게임을 종료하였습니다." << endl;
			break;
		}
		else {
			inNum[0] = num1;
			inNum[1] = num2;
			inNum[2] = num3;
			strike = 0;
			ball = 0;

			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					if (comNum[i] == inNum[j]) {
						if (i == j) {
							strike++;
						}
						else {
							ball++;
						}
					}
				}
			}

			if (strike == 3) {
				cout << "\n★★★ 홈런 !!! 승리했습니다. ★★★" << endl;
				cout << playCnt << "번 만에 맞추셨습니다." << endl;
				break;
			}
			else if (strike == 0 && ball == 0) {
				cout << "\n▶▶▶Strike : 0, Ball : 0  → 아웃입니다 ◀◀◀ " << endl;
				break;
			}
			else {
				cout << "Strike : " << strike << "     Ball : " << ball << endl;
			}
			playCnt++;
		}
	}
}

 

실행결과

 

 

느낀 점

: 프로그램을 구현하고 테스트 할 때는 임시로 숫자로 보이게 해서 기능 구현을 완료하였는데,

  위에 결과 화면을 캡처할 때는 나도 직접 게임에 참여해서 재밌게 빠져들며 테스트해 볼 수 있었다 !  :D

  그리고 이번에는 3개 숫자가 중복이 안되게끔 구현하였는데, 추가로 중복허용 기능으로 구현해 봐도 또 새로울 것 같다.

 

 

 
 
728x90
반응형

댓글