[자바] 숫자야구게임 구현하기

heegon·2025년 7월 7일

JAVA

목록 보기
17/20

완성 코드

package javaAPI;

import java.util.Scanner;

//랜덤 숫자 발생해주는 클래스
class RandomNumMaker {
	private int Answer1 = (int)(Math.random() * 10);
	private int Answer2 = (int)(Math.random() * 10);
	private int Answer3 = (int)(Math.random() * 10);
	
	public RandomNumMaker() {
		while(Answer2 == Answer1) {
			Answer2 = (int)(Math.random() * 10);
		}
		
		while((Answer3 == Answer1) || (Answer3 == Answer2)) {
			Answer3 = (int)(Math.random() * 10);
		}
	}
	
	public int getAnswer1() {
		return Answer1;
	}
	
	public int getAnswer2() {
		return Answer2;
	}
	
	public int getAnswer3() {
		return Answer3;
	}
	
}

//게임설명 클래스
class HowGame {
	//게임설명
	public void howGameDisp() {
		System.out.println("--------------------게임설명--------------------");
		System.out.println("1. 정답의 경우 0~9 중에서 임의의 서로 다른 정수 숫자 3개가 생성되어 알 수 없는 순서로 배치됩니다. 0~9까지의 숫자 3자리를 입력하세요.");
		System.out.println("2. 입력한 3개의 숫자 중, 숫자는 맞고 자리는 틀렸다면 N볼을, 숫자도 맞고 자리까지 맞았다면 N스트라이크 라고 알려줍니다.");
		System.out.println("만약 정답이 123일 경우에 사용자가 045를 입력한다면 0스트라이크 0볼, 035를 입력한다면 0스트라이크 1볼. 이런 식입니다.");
		System.out.println("그럼 게임을 시작해볼까요? (y/n)");
	}
}

//게임진행 클래스
class OnGoingGame {
	RandomNumMaker rnm = new RandomNumMaker();
	
	//사용자의 답변을 담는 변수
	int replyByUser1 = 0;
	int replyByUser2 = 0;
	int replyByUser3 = 0;
	
	public void onGoingGame() {
		Scanner sc = new Scanner(System.in);
		
		rnm.getAnswer1();
		rnm.getAnswer2();
		rnm.getAnswer3();
		int []getAnswerArr = new int[3];
		//정답을 배열로 저장.
		getAnswerArr[0] = rnm.getAnswer1();
		getAnswerArr[1] = rnm.getAnswer2();
		getAnswerArr[2] = rnm.getAnswer3();
		
		//정답 여부를 저장하는 변수
		boolean isAnswer = false;
		//게임 도전 횟수를 저장하는 변수
		int howManyChallenge = 0;
		//게임진행
		while(isAnswer == false) {
			System.out.println("");
			System.out.println("이제 0~9 사이의 정수 숫자 3개를 입력하세요");
			System.out.println(">>> ");
			replyByUser1 = sc.nextInt();
			replyByUser2 = sc.nextInt();
			replyByUser3 = sc.nextInt();
			if (replyByUser1 == replyByUser2 || replyByUser1 == replyByUser3 || replyByUser2 == replyByUser3) {
			    System.out.println("서로 다른 숫자 3개를 입력하세요!");
			    continue;
			}
			//사용자 답변을 배열로 저장.
			int [] replyByUserArr = new int[3];
			howManyChallenge++;
			replyByUserArr[0] = replyByUser1;
			replyByUserArr[1] = replyByUser2;
			replyByUserArr[2] = replyByUser3;
			int strike = 0;
			int ball = 0;
			
			for (int i = 0; i < 3; i++) {
			    if (replyByUserArr[i] == getAnswerArr[i]) {
			        strike++;
			    } else {
			        for (int j = 0; j < 3; j++) {
			            if (i != j && replyByUserArr[i] == getAnswerArr[j]) {
			                ball++;
			            }
			        }
			    }
			}
			
			if(strike == 3) {
				System.out.println("축하합니다!!! 😊😍");
				isAnswer = true;
			}
			
			System.out.println("[ "+howManyChallenge + "번째 시도 ]");
			System.out.println(strike + "스트라이크 " + ball + "볼");
			
		}
		
		sc.close();
		
	}
}

//main 클래스
public class NumberGame{
	
	HowGame hg = new HowGame();
	OnGoingGame ogg = new OnGoingGame();
	
	public static void main(String[] args) {
		NumberGame fc = new NumberGame();
		System.out.println("숫자야구 게임 시작 !!!");
		System.out.println(" 1번.게임시작!\t 2번.게임설명\t 3번.게임종료");
		Scanner sc = new Scanner(System.in);
		int mode = sc.nextInt();
		
		if (mode == 1) {
			fc.ogg.onGoingGame();
		}
		
		else if (mode == 2) {
			fc.hg.howGameDisp();
			char reply2 = sc.next().charAt(0);
			if(reply2 == 'y' || reply2 == 'Y') {
				fc.ogg.onGoingGame();
			}
			else {
				System.out.println("게임을 종료합니다.");
			}
		}
		
		else if (mode == 3){
			System.out.println("게임을 종료합니다.");
		}sc.close();	
	}
	
}
profile
❤️

0개의 댓글