Daily coding

Java Basic : day 8 - Example 01: Baseball 게임 클래스로 구현하기 본문

Language/Java_basic

Java Basic : day 8 - Example 01: Baseball 게임 클래스로 구현하기

sunnnkim 2019. 11. 27. 20:08
package day8.example;

import java.util.Random;
import java.util.Scanner;

public class Baseball {
	
	//TODO : Field
	private int[] rNum;
	private int[] uNum;
	private boolean[] _switch;
	private boolean clear;
	private int ball;
	private int strike;
	private int count=0;
	
	
	// 생성자 
	public Baseball() {
		rNum = new int[3];	// 난수 세개 담을 배열 생성
		uNum = new int[3];	// 유저 입력 담을 배열 생성 
		_switch = new boolean[10]; // 중복검사할 boolean 배열 
		setRandomNumber();	// 초기화할 때 난수 생성함 
		clear = false;
	}
	
	// 테스트용 getter
	public int[] getrNum() {
		return rNum;
	}
	public void printrNum() {
		System.out.print("[ ");
		for (int i = 0; i < rNum.length; i++) {
			System.out.print(rNum[i] + " ");
		}System.out.print(" ]\n");
	}
	public void printuNum() {
		System.out.print("[ ");
		for (int i = 0; i < uNum.length; i++) {
			System.out.print(uNum[i] + " ");
		}System.out.print(" ]\n");
	}
	
	// 난수 생성하는 메소드 
	private void setRandomNumber() {
		Random r = new Random();
		int ran;
		int w = 0;
		while (w < 3) {
			ran = r.nextInt(10);
			if (_switch[ran] == false) {
				_switch[ran] = true;
				this.rNum[w] = ran + 1;
				w++;
			}
		}
	}
		


	// private
	// 유저 입력받기
	private void setUserNumber(int num1, int num2, int num3) {
		this.uNum[0] = num1;
		this.uNum[1] = num2;
		this.uNum[2] = num3;
	}
	
	
	// public
	// 유저 입력 받는 인터페이스 
	public void printUserMenu() {
		Scanner sc = new Scanner(System.in);
		// user input
		int num[] = new int[3];
		while (true) {
			for (int i = 0; i < uNum.length; i++) {
				System.out.print((i + 1) + "번째 수 = ");
				 num[i] = sc.nextInt();
			}
			if (num[0] != num[1] || num[0] != num[2] || num[1] != num[2]) {
				break;
			}
			System.out.println("잘못입력했습니다");

		}
		setUserNumber(num[0],num[1],num[2]);
		sc.close();
	}
	
	
	// private
	// 답이 맞는지 비교하기 
	private boolean getScore() {
		
		int score = strike();
		if(score == 3) return true;
		return false;
		
		
	}
	
	// 게임하기
	public void playGame() {
		System.out.println("< Baseball Game > ");
		while (!this.clear && count < 10) {
			count++;
			printUserMenu();
			this.clear = getScore();
			if(!clear) { // 성공시 
				ball();
				strike();
			}
			printResult();
		}
		printResult();
	}
	
	public void printResult() {
		if(this.clear) {
			System.out.println("정답입니다!");
			System.out.println(count + "회 만에 맞췄습니다.");
			return;
		}
		if( count == 10) {
			System.out.println(" 실패 !!");
			System.out.println("기회를 모두 사용했습니다.");
			System.out.print("정답 : ");
			printrNum();
		}
		else {
			System.out.println(ball + " ball" );
			System.out.println(strike + " strike" );
		}
	}

	// ball
	private int ball() {
		this.ball = 0;
		for (int i = 0; i < rNum.length; i++) {
			for (int j = 0; j < rNum.length; j++) {
				if (rNum[i] == uNum[j] && i != j) {
					ball++;
				}
			}
		}
		return ball;
	}
	
	// strike
	private int strike() {
		this.strike = 0;
		for (int i = 0; i < rNum.length; i++) {
			if (rNum[i] == uNum[i]) {
				strike++;
			}
		}
		return strike;

	}
	
}