diff --git a/README.md b/README.md index e69de29..931ebff 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,14 @@ +### 기능 목록 + +- 컴퓨터 랜덤 숫자 3개 만들기 + - 중복되는 숫자 있는지 체크, 있을 경우 다시 생성 + + + +- 게임 시작 + - 플레이어 3개 숫자 입력하기 + - 자릿수 계산하기 + - 모두 맞지 않았다면 결과를 출력하고 다시 플레이어 숫자 입력 받음 + - 모두 맞췄다면 성공 메시지 출력함 + - 게임을 새로 시작할지 여부에 따른 분기 처리 + diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..9010a28 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,8 @@ +import controller.BaseballConsole; + +public class Main { + public static void main(String[] args) { + BaseballConsole baseballConsole = new BaseballConsole(); + baseballConsole.start(); + } +} diff --git a/src/main/java/constant/Message.java b/src/main/java/constant/Message.java new file mode 100644 index 0000000..78406a9 --- /dev/null +++ b/src/main/java/constant/Message.java @@ -0,0 +1,11 @@ +package constant; + +public final class Message { + public static final String INPUT_NUMBER_MESSAGE = "숫자를 입력해주세요 : "; + public static final String INCORRECT_DIGIT_MESSAGE = "세 자리 수를 입력해야 합니다."; + public static final String DUPLICATE_DIGIT_MESSAGE = "중복되는 수가 존재합니다."; + public static final String STRIKE_MESSAGE = " 스트라이크 "; + public static final String BALL_MESSAGE = "볼"; + public static final String NO_STRIKE_NO_BALL_MESSAGE = "낫싱"; + public static final String SUCCESS_MESSAGE = "3개의 숫자를 모두 맞히셨습니다! 게임 종료" + System.lineSeparator() + "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."; +} diff --git a/src/main/java/controller/BaseballConsole.java b/src/main/java/controller/BaseballConsole.java new file mode 100644 index 0000000..32c5d4f --- /dev/null +++ b/src/main/java/controller/BaseballConsole.java @@ -0,0 +1,75 @@ +package controller; +import constant.Message; +import domain.Computer; +import domain.Result; +import domain.User; +import service.BaseballService; + +import java.util.Scanner; + +public class BaseballConsole { + private Scanner scanner; + private Computer computer; + private User user; + private Result result; + private BaseballService baseballService; + + public BaseballConsole() { + this.scanner = new Scanner(System.in); + this.computer = new Computer(); + this.user = new User(); + this.result = new Result(); + this.baseballService = new BaseballService(); + } + + public void start() { + while (true) { + baseballService.setRandomNumber(computer); + + enterNumber(); + selectMenu(); + } + } + + public void enterNumber() { + while (true) { + try { + System.out.print(Message.INPUT_NUMBER_MESSAGE); + user.inputNumberToString(scanner); + result = baseballService.getGameResult(computer, user); + printGameResult(result); + if (result.isThreeStrike()) { + break; + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + } + + private void selectMenu() { + System.out.println(Message.SUCCESS_MESSAGE); + + int selectMenuNum = scanner.nextInt(); + + switch (selectMenuNum) { + case 1 : + break; + case 2 : + System.exit(0); + } + } + + private void printGameResult(Result result) { + int strike = result.getStrike(); + int ball = result.getBall(); + + if (strike > 0) + System.out.print(strike + Message.STRIKE_MESSAGE); + if (ball > 0) + System.out.print(ball + Message.BALL_MESSAGE); + if (strike == 0 && ball == 0) + System.out.print(Message.NO_STRIKE_NO_BALL_MESSAGE); + System.out.println(""); + } +} diff --git a/src/main/java/domain/Computer.java b/src/main/java/domain/Computer.java new file mode 100644 index 0000000..79745ee --- /dev/null +++ b/src/main/java/domain/Computer.java @@ -0,0 +1,19 @@ +package domain; + +public class Computer { + private String computerNum; + + public void makeRandomNumberToString(int randomNumber) { + this.computerNum = String.valueOf(randomNumber); + } + + public boolean notExistsDuplicateDigit() { + return (computerNum.charAt(0) != computerNum.charAt(1)) && + (computerNum.charAt(0) != computerNum.charAt(2)) && + (computerNum.charAt(1) != computerNum.charAt(2)); + } + + public String getComputerNum() { + return computerNum; + } +} diff --git a/src/main/java/domain/Result.java b/src/main/java/domain/Result.java new file mode 100644 index 0000000..b92a697 --- /dev/null +++ b/src/main/java/domain/Result.java @@ -0,0 +1,39 @@ +package domain; + +public class Result { + private int strike; + private int ball; + + public Result() { + this.strike = 0; + this.ball = 0; + } + + public void plusStrike() { + this.strike++; + } + + public void plusBall() { + this.ball++; + } + + public int getStrike() { + return strike; + } + + public void setStrike(int strike) { + this.strike = strike; + } + + public int getBall() { + return ball; + } + + public void setBall(int ball) { + this.ball = ball; + } + + public boolean isThreeStrike() { + return this.strike == 3; + } +} diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java new file mode 100644 index 0000000..43bd65d --- /dev/null +++ b/src/main/java/domain/User.java @@ -0,0 +1,33 @@ +package domain; + +import constant.Message; + +import java.util.Scanner; + +public class User { + private String userNum; + + public void inputNumberToString(Scanner scanner) throws Exception { + this.userNum = String.valueOf(scanner.nextInt()); + + if (notNumberLengthIsThree()) { + throw new Exception(Message.INCORRECT_DIGIT_MESSAGE); + } else if (existsDuplicateDigit()) { + throw new Exception(Message.DUPLICATE_DIGIT_MESSAGE); + } + } + + public boolean notNumberLengthIsThree() { + return this.userNum.length() != 3; + } + + public boolean existsDuplicateDigit() { + return (userNum.charAt(0) == userNum.charAt(1)) || + (userNum.charAt(0) == userNum.charAt(2)) || + (userNum.charAt(1) == userNum.charAt(2)); + } + + public String getUserNum() { + return userNum; + } +} diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/service/BaseballService.java b/src/main/java/service/BaseballService.java new file mode 100644 index 0000000..78990ba --- /dev/null +++ b/src/main/java/service/BaseballService.java @@ -0,0 +1,60 @@ +package service; + +import domain.Computer; +import domain.Result; +import domain.User; + +import java.util.Random; + +public class BaseballService { + public void setRandomNumber(Computer computer) { + Random random = new Random(); + + while (true) { + computer.makeRandomNumberToString(random.nextInt(900) + 100); + if (computer.notExistsDuplicateDigit()) + break; + } + System.out.println("computerNum : " + computer.getComputerNum()); + } + + public Result getGameResult(Computer computer, User user) { + Result gameResult = calculateGameResult(computer, user); + return gameResult; + } + + private Result calculateGameResult(Computer computer, User user) { + String userNum = user.getUserNum(); + String computerNum = computer.getComputerNum(); + Result gameResult = new Result(); + + for (int i=0; i