diff --git a/README.md b/README.md
index e69de29..4d2bc4e 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,14 @@
+# 기능 목록
+
게임 시작
+컴퓨터 볼 생성
+
+
+유저, 컴퓨터 볼 비교
+
+
+조건에 맞으면 종료
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index c7156de..fd7068c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,6 +4,7 @@ plugins {
group 'org.example'
version '1.0-SNAPSHOT'
+sourceCompatibility = '8'
repositories {
mavenCentral()
diff --git a/src/main/java/com/baseball/BaseBallMainApplication.java b/src/main/java/com/baseball/BaseBallMainApplication.java
new file mode 100644
index 0000000..0c2bf27
--- /dev/null
+++ b/src/main/java/com/baseball/BaseBallMainApplication.java
@@ -0,0 +1,10 @@
+package com.baseball;
+
+import com.baseball.domain.BaseBallPlayService;
+
+public class BaseBallMainApplication {
+ public static void main(String[] args) {
+ BaseBallPlayService baseBallPlayService = new BaseBallPlayService();
+ baseBallPlayService.playGame();
+ }
+}
diff --git a/src/main/java/com/baseball/domain/Ball.java b/src/main/java/com/baseball/domain/Ball.java
new file mode 100644
index 0000000..7e81809
--- /dev/null
+++ b/src/main/java/com/baseball/domain/Ball.java
@@ -0,0 +1,37 @@
+package com.baseball.domain;
+
+public class Ball {
+ String computerBall;
+ String userBall;
+ String findBallBuffer;
+ int strikeCount = 0;
+ int ballCount = 0;
+
+ StringBuffer pitchZone = new StringBuffer();
+ StringBuilder stringBuilder = new StringBuilder();
+
+ public String createComputeBall() {
+ do {
+ int createNumber = (int) (Math.random() * 9) + 1;
+ if (createNumber > 0) {
+ stringBuilder.append(createNumber);
+ this.computerBallInspection(createNumber);
+ }
+ } while (stringBuilder.length() != 3);
+ computerBall = stringBuilder.toString();
+ stringBuilder.delete(0, stringBuilder.length());
+ findBallBuffer = computerBall;
+ return computerBall;
+ }
+
+ public void computerBallInspection(int number) {
+ if (stringBuilder.length() >= 2) {
+ int index = stringBuilder.substring(0, stringBuilder.length()-1).indexOf(String.valueOf(number));
+ if (index > -1) {
+ stringBuilder.delete(stringBuilder.length()-1, stringBuilder.length());
+ createComputeBall();
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/baseball/domain/BaseBallPlayService.java b/src/main/java/com/baseball/domain/BaseBallPlayService.java
new file mode 100644
index 0000000..0923e2d
--- /dev/null
+++ b/src/main/java/com/baseball/domain/BaseBallPlayService.java
@@ -0,0 +1,84 @@
+package com.baseball.domain;
+
+import com.baseball.view.InputView;
+import com.baseball.view.OutputView;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class BaseBallPlayService implements BaseballPlayImpl {
+ private static final OutputView outputView = new OutputView();
+ private static final Ball ball = new Ball();
+ private static String computerBall = ball.createComputeBall();
+
+ @Override
+ public void playGame() {
+ outputView.messagePrint("START", "");
+ ball.userBall = InputView.inputBalls();
+ this.userBallNumberVerification(ball.userBall);
+ this.messageDelete();
+ this.baseBallMatching(ball.userBall);
+ if (ball.strikeCount < 3) outputView.messagePrint("GAME_RESULT", ball.pitchZone.toString());
+ else outputView.messagePrint("GAME_RESULT", "3 스트라이크");
+ this.gameRestartOrGameEnd();
+ }
+
+ public void userBallNumberVerification(String userBall) {
+ try {
+ Pattern pattern = Pattern.compile("(^[0-9]{3})");
+ Matcher matchingResult = pattern.matcher(String.valueOf(userBall));
+ if (!matchingResult.find()) throw new IllegalArgumentException();
+ } catch (IllegalArgumentException e) {
+ outputView.messagePrint("VERIFICATION", "");
+ InputView.getClose();
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ public void baseBallMatching(String userBall) {
+ System.out.println(computerBall);
+ if (!userBall.trim().isEmpty()) {
+ if (String.valueOf(userBall.charAt(0)).equals(String.valueOf(computerBall.charAt(0)))) {
+ ball.strikeCount++;
+ }
+ if (ball.findBallBuffer.indexOf(String.valueOf(userBall.charAt(0))) > 0) {
+ ball.ballCount++;
+ }
+ userBall = userBall.substring(1);
+ computerBall = computerBall.substring(1);
+ baseBallMatching(userBall);
+ } else {
+ if (ball.strikeCount > 0) ball.pitchZone.append(ball.strikeCount).append(" 스트라이크 ");
+ if (ball.ballCount > 0) ball.pitchZone.append(ball.ballCount).append(" 볼");
+ }
+ }
+
+ public void gameRestartOrGameEnd() {
+ int coin = 0;
+ if (ball.strikeCount < 3) {
+ computerBall = String.valueOf(ball.computerBall);
+ playGame();
+ } else {
+ outputView.messagePrint("GAME_COMPLETE", ball.pitchZone.toString());
+ coin = InputView.inputCoin();
+ }
+ this.messageDelete();
+ if (coin == 1) this.gameReset();
+ else InputView.getClose();
+ }
+
+ public void gameReset() {
+ computerBall = ball.createComputeBall();
+ ball.strikeCount = 0;
+ ball.ballCount = 0;
+ this.playGame();
+ }
+
+ public void messageDelete() {
+ ball.strikeCount = 0;
+ ball.ballCount = 0;
+ ball.pitchZone.delete(0, ball.pitchZone.length());
+ }
+
+}
diff --git a/src/main/java/com/baseball/domain/BaseballPlayImpl.java b/src/main/java/com/baseball/domain/BaseballPlayImpl.java
new file mode 100644
index 0000000..804e623
--- /dev/null
+++ b/src/main/java/com/baseball/domain/BaseballPlayImpl.java
@@ -0,0 +1,7 @@
+package com.baseball.domain;
+
+import java.io.IOException;
+
+public interface BaseballPlayImpl {
+ void playGame() throws IOException;
+}
diff --git a/src/main/java/com/baseball/mssage/Message.java b/src/main/java/com/baseball/mssage/Message.java
new file mode 100644
index 0000000..636a0db
--- /dev/null
+++ b/src/main/java/com/baseball/mssage/Message.java
@@ -0,0 +1,18 @@
+package com.baseball.mssage;
+
+public enum Message {
+ START_MESSAGE("숫자를 입력해주세요 : "),
+ VERIFICATION_MESSAGE("볼 입력이 잘못되었습니다."),
+ GAME_RESULT_MESSAGE("낫 싱"),
+ GAME_COMPLETE_MESSAGE("3개의 숫자를 모두 맞히셨습니다! 게임 종료 \n게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
+
+ private final String message;
+
+ Message(String message) {
+ this.message = message;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
diff --git a/src/main/java/com/baseball/view/InputView.java b/src/main/java/com/baseball/view/InputView.java
new file mode 100644
index 0000000..94f8c08
--- /dev/null
+++ b/src/main/java/com/baseball/view/InputView.java
@@ -0,0 +1,22 @@
+package com.baseball.view;
+
+import java.util.Scanner;
+
+public class InputView {
+ private static Scanner scanner;
+ public static String inputBalls() {
+ scanner = new Scanner(System.in);
+ return scanner.nextLine();
+ }
+
+ public static int inputCoin() {
+ scanner = new Scanner(System.in);
+ return scanner.nextInt();
+ }
+
+ public static void getClose() {
+ scanner.close();
+ }
+
+
+}
diff --git a/src/main/java/com/baseball/view/OutputView.java b/src/main/java/com/baseball/view/OutputView.java
new file mode 100644
index 0000000..2a9848f
--- /dev/null
+++ b/src/main/java/com/baseball/view/OutputView.java
@@ -0,0 +1,24 @@
+package com.baseball.view;
+
+import com.baseball.mssage.Message;
+
+public class OutputView {
+
+ public void messagePrint(String message, String resultMessage) {
+ switch (message) {
+ case "START":
+ System.out.println(Message.START_MESSAGE.getMessage());
+ break;
+ case "VERIFICATION":
+ System.out.println(Message.VERIFICATION_MESSAGE.getMessage());
+ break;
+ case "GAME_RESULT":
+ if (!resultMessage.isEmpty()) System.out.println(resultMessage);
+ else System.out.println(Message.GAME_RESULT_MESSAGE.getMessage());
+ break;
+ case "GAME_COMPLETE":
+ System.out.println(Message.GAME_COMPLETE_MESSAGE.getMessage());
+ break;
+ }
+ }
+}
diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt
deleted file mode 100644
index e69de29..0000000