본문 바로가기

프로젝트

[JAVA] 숫자 야구

 

 

숫자 야구

 

 

package com.baseball;

public class Main {
	public static void main(String[] args) {
		while(true) {
			BaseballService bb = new BaseballService();
			int choice = bb.mainPrint();
			bb.choiceNum(choice);
		}
	}
}

Main 클래스

 

package com.baseball;

import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

public class BaseballService {
	Scanner sc = new Scanner(System.in);
	BaseballDTO DTO = new BaseballDTO();
	Random ran = new Random();
	
	public int mainPrint() {
		System.out.println("★★★★★ 숫자 야구 ★★★★★★");
		System.out.println("★   1. 숫자 야구 플레이   ★");
		System.out.println("★   2. 종         료     ★");
		System.out.println("★★★★★★★★★★★★★★★★★★");
		System.out.print("번호 입력 >>> ");
		int choice = sc.nextInt();
		return choice;
	}
	
	public void choiceNum(int choice) { 
		switch(choice) {
		case 1 : mainGame(); break;
		case 2 : 
			System.out.println("프로그램을 종료합니다");
			break;
		default :
			System.out.println("입력 오류 발생!!! 프로그램을 다시 실행하시오");
			break;
		}
	}
	
	public void mainGame() {
		// 콘솔창 지우기
		erasePrint();
		// 숫자 야구 정답 생성 - DTO 클래스의 mainBall 에 저장
		makeMainBall();
		// 숫자 생성부분 시각화
		makeView();
		
		while(true) {
			System.out.println("★★★★★★★★★★★");
			System.out.println("★수를 예상하세요★");
			System.out.println("★    ex)0125   ★");
			System.out.println("★★★★★★★★★★★");
			System.out.println("현재 도전 횟수 : " + DTO.getTryNum());
			System.out.print("입력 >>> ");
			String guessBall = sc.next();
			try{
				if(Integer.parseInt(guessBall) > 0 && Integer.parseInt(guessBall) < 10000) {
					// 추측한 숫자를 guessBall 변수로 생성자를 통해 세팅
					DTO.setGuessBall(guessBall.charAt(0), guessBall.charAt(1), guessBall.charAt(2), guessBall.charAt(3));
					checkBall();
					System.out.println("--- 추측 결과 ---");
					System.out.println("   Strike : " + DTO.getStrike());
					System.out.println("   Ball   : " + DTO.getBall());
					System.out.println("----------------");
					
					System.out.println("다시 게임을 준비하는중.............");
					
					timeSleep(5000);
					
					// 정답을 맞춘 경우
					if(DTO.getStrike() == 4) {
						System.out.println("☆★☆★숫자를 모두 맞추셨습니다★☆★☆");
						System.out.println("☆★ 총 도전 횟수 : " + DTO.getTryNum() + " ★☆");
						System.out.printf("정 답 : %d %d %d %d\n",DTO.getMainBall(0), DTO.getMainBall(1), DTO.getMainBall(2), DTO.getMainBall(3));
						break;
					}
					
					// 스트라이크와 볼 갯수 초기화
					DTO.setBall(0); DTO.setStrike(0);
					// 도전 횟수 증가
					DTO.setTryNum(DTO.getTryNum() + 1);
					
				}else {
					System.out.println("!!!입력 오류!!!");
					continue;
				}
			} catch(Exception e){
				System.out.println("!!!입력 오류!!!");
				continue;
				}
			
			
		}
		
	}
	
	// 콘솔 창 지우개
	public void erasePrint() {
		for(int i=0; i<=100; i++) System.out.println();
	}
	// 정답 생성
	public void makeMainBall() {
		int[] num = new int[4];
		for(int i=0; i<4; i++) {
			num[i] = ran.nextInt(10);
			for(int j=0; j<i; j++) {
				if(num[i] == num[j]) i--;
			}
		}
		DTO.setMainBall(num[0], num[1], num[2], num[3]);
	}
	// a 초 만큼 코드 중지
	public void timeSleep(int a) {
		try {
			Thread.sleep(a);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	// 난수 생성 시각화
	public void makeView() {
		for(int i=1; i<=4; i++) {
			System.out.println("★★★★★★★★★★★★★★★★★★");
			System.out.printf("★★★★%d번째 수 생성중★★★★\n", i);
			timeSleep(1000);
			for(int j=0; j<=7; j++)
				System.out.println("★★★★★★★★★★★★★★★★★★");
				timeSleep(500);
		}
		System.out.println("★★★★★★준비  완료★★★★★★");
		System.out.println();
	}
	// Strike 와 Ball 갯수 체크
	public void checkBall() {
		for(int i=0; i<4; i++) {
			if (DTO.getGuessBall(i) == DTO.getMainBall(i)) {
				DTO.setStrike(DTO.getStrike() + 1);
			}
			for(int j=0; j<4; j++) {
				if(DTO.getGuessBall(i) == DTO.getMainBall(j)) {
					DTO.setBall(DTO.getBall() + 1);
				}
			}
		}
	}
}

BaseballService 클래스

 

package com.baseball;

import java.util.ArrayList;

public class BaseballDTO {
	// 숫자 야구 정답
	private int[] mainBall = new int[4];
	// 추측 숫자
	private int[] guessBall = new int[4];
	// 정답이면 true, 정답이 아니면 false
	private boolean ballCheck = false;
	// 도전 횟수, ball, strike
	private int tryNum = 0, ball = 0, strike = 0;
	
	public BaseballDTO() {}
	
	public int getMainBall(int i) {
		return mainBall[i];
	}
	public void setMainBall(int num1, int num2, int num3, int num4) {
		this.mainBall[0] = num1;
		this.mainBall[1] = num2;
		this.mainBall[2] = num3;
		this.mainBall[3] = num4;
	}
	public boolean isBallCheck() {
		return ballCheck;
	}
	public void setBallCheck(boolean ballCheck) {
		this.ballCheck = ballCheck;
	}
	public int getTryNum() {
		return tryNum;
	}
	public void setTryNum(int tryNum) {
		this.tryNum = tryNum;
	}
	public int getGuessBall(int i) {
		return guessBall[i];
	}
	public void setGuessBall(char num1, char num2, char num3, char num4) {
		this.guessBall[0] = Character.getNumericValue(num1);
		this.guessBall[1] = Character.getNumericValue(num2);
		this.guessBall[2] = Character.getNumericValue(num3);
		this.guessBall[3] = Character.getNumericValue(num4);
	}
	public int getBall() {
		return ball;
	}
	public void setBall(int ball) {
		this.ball = ball;
	}
	public int getStrike() {
		return strike;
	}
	public void setStrike(int strike) {
		this.strike = strike;
	}	
}

BaseballDTO 클래스

 

 

 

 

- 메모 -

1. 코드를 더 깔끔하게 정리하여 작성할 수 있는 방법이 무엇인지 생각하기

2. 현재 작성한 코드에 중복된 코드가 무엇인지, 추후에 공부하면서 보완할 내용은 무엇인지 꾸준하게 생각하기

3. web 또는 Unity 를 활용하여 게임을 실제 시각화하여 서비스해보기

728x90