1. 구현 목표

  • 컴퓨터가 생각한 3개의 숫자를 위치와 값 모두 맞추는 게임입니다.
  • 랜덤 숫자 생성: 1~9 사이의 서로 다른 숫자 3개를 추출합니다. (중복 제거 필수)
  • 사용자는 3가지 숫자의 입력을 통해 컴퓨터가 생성한 숫자와 본인의 숫자를 비교합니다.
판정내용예시 (정답: 1 2 3)
Strike숫자와 자리가 모두 일치유저: 1 5 8 → 1 Strike
Ball숫자는 맞지만 자리가 다름유저: 3 1 2 → 3 Ball
Out숫자가 하나도 포함되지 않음유저: 4 5 6 → Out
예시 (정답: 1 2 3)결과
유저: 1 5 21 Strike 1 Ball
유저: 3 1 23 Ball
유저: 4 5 6Out
  • 1 Strike나 1 Ball이 하나라도 있다면, Out은 있을 수 없다.
  • 게임의 최종 목표 : 무한 루프: 3 Strike가 나올 때까지 입력을 반복합니다.

구현 결과

코드

#include <iostream>
using namespace std;

int main()
{
	srand(time(NULL));

	int com[3]; // 배열 이용
	int user[3]; // 배열 이용

	for (int i = 0; i < 3; i++) // 중복 없는 숫자 3개 생성
	{
		com[i] = rand() % 10;
		for (int j = 0; j < i; j++) 
		{
			if (com[i] == com[j]) // 중복이면 다시 생성
			{ 
				i--;
				break;
			}
		}
	}

cout << "숫자 야구 게임을 시작합니다! (0~9 사이 숫자 3개)" << endl;

	while (true) 
	{
		int strike = 0;
		int ball = 0;
		int out = 0;

		cout << "\n숫자 3개를 입력하세요 (예: 1 2 3): ";
		for (int i = 0; i < 3; i++) 
		{
			cin >> user[i];
		}
		for (int i = 0; i < 3; i++) // 컴퓨터 숫자
			{      
			for (int j = 0; j < 3; j++) // 유저 숫자
				{ 
				if (com[i] == user[j]) // 숫자가 일치하면
					{   
					if (i == j) strike++;  // 자리도 일치하면 스트라이크
					else ball++;           // 자리가 다르면 볼
					}
				}
			}

	out = 3 - (strike + ball); // 숫자 자리 전부 틀리면 아웃

	if (strike == 3) 
		{
		cout << "3 스트라이크! 정답입니다!" << endl; // 결과 출력
		break; // 게임 종료
		}
	else 
		{
		cout << strike << "스트라이크 " << ball << "볼 " << out << "아웃" << endl; // 결과 출력
		}
	}
}

구현 과정

  1. com, user 정수 3개짜리 배열을 사용했습니다.
  2. 우선 for문을 통해 중복 없는 숫자 3개를 생성했습니다.
  3. 유저가 입력한 숫자 3개를 user 배열에 차례대로 담습니다.
  4. 정답을 맞힐 때까지 반복해야 하므로 while문 안에서 진행했습니다.
  5. 숫자와 자리가 모두 같으면 strike, 숫자만 같으면 ball, 모두 틀리면 out이 출력 되도록 설정했습니다.
  6. 3 strike가 나오면 정답 출력 되도록 설정했습니다.

문제 해결방법

배열을 사용 할 줄 몰라서 가독성이 많이 떨어지게 작성 했었는데 배열을 ai를 통해 학습하고 다시 작성 했더니 가독성도 많이 올라가고 효율적이었습니다.

0개의 댓글