drexqq

[Java, 자바] 숫자야구(baseball game) 본문

공부노트/개인공부!

[Java, 자바] 숫자야구(baseball game)

drexqq 2020. 5. 24. 17:04
728x90
반응형

Java를 이용해서 숫자야구를 만들어보았다.

 

숫자야구의 조건

 

1 ~ 9 사이의 랜덤 숫자 3개 생성 (중복 X, 음수 X)

1 ~ 9 사이의 사용자 입력 숫자 3개 생성 (중복 X, 음수 X)

 

랜덤 숫자와 사용자 입력 숫자의 위치와 숫자가 모두 같은 경우 -> strike

랜덤 숫자와 사용자 입력 숫자의 위치는 다르고 숫자가 같은 경우 -> ball

 

하나의 랜덤 숫자당 기회 총 10번

 

기회를 모두 소진하거나 정답을 입력 시 replay 여부 체크

 

'Y' 또는 'y' 입력 시 랜덤 숫자 생성부터 다시 실행

'N' 또는 'n' 이나 다른 문자 입력 시 게임 종료

 

코드

package main;

import java.util.Scanner;

public class pracetice02 {

	public static void main(String[] args) {
		// scanner
		Scanner sc = new Scanner(System.in);
		// random number
		int rnum[] = new int[3];
		// input number
		int num[] = new int[3];
		// count
		int count = 10;
		// strike ball
		int strike;
		int ball;
		
		// replay
		char yn;
		boolean replay = false;
		
		// replay 하면 랜덤 숫자 다시 생성
		// count == 0 이면 랜덤 숫자 다시 생성
		while (!replay && count > 0) {
			// 사용자 입력 초기화
			boolean pass = false;
			// 다시 시작하는 시점에서 strike ball 초기화
			strike = 0;
			ball = 0;
			// random number 1 ~ 9
			for (int i = 0; i < rnum.length; i++) {
				rnum[i] = ((int)(Math.random() * 9) + 1);
				// 랜덤 중복 숫자 제거
				for (int j = 0; j < i; j++) {
					if (rnum[i] == rnum[j]) {
						i--;
					}
				}
			}
			// 랜덤 숫자 출력 부분
//			System.out.println("랜덤 숫자는 "+rnum[0]+", "+rnum[1]+", "+rnum[2]+"입니다.");
			// count가 0보다 클 경우는 랜덤숫자 재생성을 하지 않고 입력부분부터 loop
			while (count > 0) {
				// input number 1 ~ 9
				while (!pass) {
					for (int i = 0; i < num.length; i++) {
						num[i] = sc.nextInt();
						// 1 ~ 9 한자리 수만 입력가능하게
						while (num[i] >=10 || num[i] <= 0) {
							System.out.println("1 ~ 9 사이의 한자리 수를 입력해주세요.");
							num[i] = sc.nextInt();
						}
					}
					// 입력받은 값 중에 중복된 값이 있는지 판단 후 다시 입력
					if (num[0] == num[1] || num[0] == num[2] || num[1] == num[2]) {
						System.out.println("중복 되었습니다. 다시입력해주세요");
						pass = false;
					} else {
						pass = true;
					}
				}
				// input number result
				System.out.println("입력한 숫자는 "+num[0]+", "+num[1]+", "+num[2]+"입니다.");
				
				// strike ball result
				for (int i = 0; i < 3; i++) {
					for (int j = 0; j < 3; j++) {
						if (rnum[i] == num[j]) {
							// 숫자와 자리가 모두 같을 때 -> strike
							if (i == j) {
								strike++;
							}
							// 숫자만 맞을 경우 -> ball
							else {
								ball++;
							}
						}
					}
				}
				// 답 체크한 후 기회 줄이기
				count--;
				// strike ball result
				if (strike == 3) {
					System.out.println("3스트라이크 아웃입니다");
					// 정답일경우 바로 탈출
					break;
				}
				else if (count == 0) {
					System.out.println("10번의 기회를 모두 사용하셨습니다.");
				}
				else {
					System.out.println(strike+" 스트라이크 "+ball+"볼입니다.");
					System.out.println(count+"회 남았습니다.");
					// 사용자가 숫자 다시입력 하도록.
					pass = false;
				}
				// 기회 한 번이 끝날때 마다 strike ball 횟수 초기화
				strike = 0;
				ball = 0;
			}
			
			// 기회를 다 쓰거나 정답을 맞추면 replay check
			if (count == 0 || strike == 3) {
				System.out.println("다시 도전하시겠습니까 ? Y(y) / N(n)");
				yn = sc.next().charAt(0);
				if (yn == 'y' || yn == 'Y') {
					// count 초기화
					count = 10;
					pass = false;
					replay = false;
				}
				else {
					replay = true;
				}
			}
		}
		// 게임종료
		System.out.println("end");
	}

}

 

728x90
반응형
Comments