diff --git a/docs/README.md b/docs/README.md
index e69de29bb2..1ffc0e4046 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -0,0 +1,85 @@
+# ⚾ BaseBall Game
+## 요구 사항 분석
+### 게임 규칙
+>같은 수가 같은 자리에 있으면 Strike
+>
+>같은 수가 다른 자리에 있으면 Ball
+>
+>같은 수가 하나도 없으면 Nothing
+>
+>Strike, Ball, Nothing의 힌트를 가지고 Computer의 수를 맞추면 승리
+>
+> 예시)Compuer의 수 : 829일때
+>
+> 123을 제시 : 1스트라이크
+>
+> 456을 제시 : 낫싱
+>
+> 189을 제시 : 1볼 1스트라이크
+
+
+
+### 게임 진행 과정
+> 게임 플레이어는 서로 다른 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과물 출력
+
+
+
+### 게임 종료 조건
+> 컴퓨터의 숫자 3개를 모두 맞추면 게임 종료
+
+
+
+### 게임 종료 후 처리 방법
+> 게임을 다시 시작하거나 종료
+
+
+
+
+
+### 예외 조건
+1. 입력값이 길이가 3이 초과가 되는지
+2. 입력값이 정수형이 아닌지
+3. 입력값이 서로 다른 수가 아니라 중복되는 수인지
+4. 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException()을 발생시킨 후 애플리케이션 종료
+
+
+
+## 구현 목록
+
+### Controller
+- GameController
+ - 시작 기능
+
+
+
+### Model
+- Game
+ - 컴퓨터 정답 생성
+ - 결과값 생성
+ - 현재 상태 (이겼는지 / 재시작 할건지 / 종료할건지)
+
+- GameResult
+ - 컴퓨터 vs 유저 값 판단하여 스트라이크, 볼 개수 판단
+ - 결과를 string형으로 변환
+
+### View
+- GameView
+ - 출력 인터페이스
+
+### Service
+- CheckUserNumber
+ - 예외 처리 기능
+ - 입력 길이 3 이상인지
+ - 입력 값이 정수인지
+ - 입력 값이 중복되는지
+
+
+
+## 커밋 방법 [깃 배쉬]
+1. git clone --bare [forked한 레포지 주소]
+2. cd [forked한 레포지 주소]
+3. git push --mirror [새 레포지 주소]
+4. cd ..
+5. rm -rf [forked한 레포지 주소]
+
+
diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java
index dd95a34214..8fb21daf19 100644
--- a/src/main/java/baseball/Application.java
+++ b/src/main/java/baseball/Application.java
@@ -1,7 +1,17 @@
package baseball;
+import baseball.Controller.GameController;
+import baseball.View.GameView;
+import camp.nextstep.edu.missionutils.Console;
+import camp.nextstep.edu.missionutils.Randoms;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
public class Application {
+
public static void main(String[] args) {
- // TODO: 프로그램 구현
+ GameController gameController = new GameController();
+ gameController.GameStart();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/baseball/Controller/GameController.java b/src/main/java/baseball/Controller/GameController.java
new file mode 100644
index 0000000000..7175469b29
--- /dev/null
+++ b/src/main/java/baseball/Controller/GameController.java
@@ -0,0 +1,38 @@
+package baseball.Controller;
+
+import baseball.Service.CheckUserNumber;
+import baseball.Model.Game;
+import baseball.View.GameView;
+
+import java.util.List;
+
+public class GameController {
+
+ private final GameView gameView = new GameView();
+
+ public GameController(){
+ gameView.showGameStart();
+ }
+
+ public void GameStart(){
+ Game game = new Game();
+ while(game.gamestatus()){
+ gameView.showInputNumbers(); //숫자를 입력해 주세요:
+ String strInputNumbers = gameView.getInput(); //입력받아 string형에 저장
+ CheckUserNumber check = new CheckUserNumber(strInputNumbers); //오류 검사
+ List UserNumbers = game.stringToIntList(strInputNumbers); //console로 입력 받으면 string형 이기 때문에 비교과 쉽게 List로 변환
+
+ String Gameresult = game.makeGameResult(UserNumbers);
+ gameView.showString(Gameresult);
+ }
+ gameView.showGameEnd();
+
+ gameView.showInputRestart();
+ String strInputRestart = gameView.getInput();
+ if (game.isRestart(strInputRestart)) {
+ GameStart();
+ }
+ }
+
+
+}
diff --git a/src/main/java/baseball/Model/Game.java b/src/main/java/baseball/Model/Game.java
new file mode 100644
index 0000000000..001febff6d
--- /dev/null
+++ b/src/main/java/baseball/Model/Game.java
@@ -0,0 +1,67 @@
+package baseball.Model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Game {
+
+ private final List answerNumbers = new ArrayList<>();
+ private boolean GameStatus;
+ private final boolean Playing = true;
+ private final boolean End = false;
+ private final String RESTART = "1";
+ private final String QUIT = "2";
+ public Game(){
+ this.setAnswerNumbers();
+ this.GameStatus = Playing;
+ }
+
+ public void setAnswerNumbers(){
+ while (this.answerNumbers.size() < 3) {
+ int randomNumber = Randoms.pickNumberInRange(1, 9);
+ if (!this.answerNumbers.contains(randomNumber)) {
+ this.answerNumbers.add(randomNumber);
+ }
+ }
+ }
+
+ public String makeGameResult(List inputNumbers) {
+ GameResult gameResult = new GameResult(this.answerNumbers, inputNumbers);
+ applyResult(gameResult.getStrikes());
+ return gameResult.resultToString();
+ }
+
+ public void applyResult(int strike) {
+ if (strike == 3) {
+ this.GameStatus = End;
+ }
+ }
+
+ public boolean gamestatus() {
+ return this.GameStatus;
+ }
+
+
+ public boolean isRestart(String input) {
+ if (input.equals(RESTART)) {
+ return true;
+ } else if (input.equals(QUIT)) {
+ return false;
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
+
+ public List stringToIntList(String String) { //입력값을 List로 변경
+ List intList = new ArrayList<>();
+ for (int i = 0; i < String.length(); i++) {
+ char digitChar = String.charAt(i);
+ int digitInt = Character.getNumericValue(digitChar);
+ intList.add(digitInt);
+ }
+ return intList;
+ }
+}
diff --git a/src/main/java/baseball/Model/GameResult.java b/src/main/java/baseball/Model/GameResult.java
new file mode 100644
index 0000000000..372ff48a82
--- /dev/null
+++ b/src/main/java/baseball/Model/GameResult.java
@@ -0,0 +1,44 @@
+package baseball.Model;
+
+import java.util.List;
+
+public class GameResult {
+
+ private int ball = 0;
+ private int strike = 0;
+
+ GameResult(List answerNumbers, List UserNumbers ){
+ for(int i=0; i charSet = new HashSet<>();
+ for (int i = 0; i < String.length(); i++) {
+ char currentChar = String.charAt(i);
+ if (charSet.contains(currentChar)) {
+ throw new IllegalArgumentException();
+ }
+ charSet.add(currentChar);
+ }
+ }
+}
diff --git a/src/main/java/baseball/View/GameView.java b/src/main/java/baseball/View/GameView.java
new file mode 100644
index 0000000000..f36caa01db
--- /dev/null
+++ b/src/main/java/baseball/View/GameView.java
@@ -0,0 +1,34 @@
+package baseball.View;
+
+import camp.nextstep.edu.missionutils.Console;
+
+public class GameView {
+ private final static String GAME_START = "숫자 야구 게임을 시작합니다.";
+ private final static String INPUT_NUMBERS = "숫자를 입력해주세요 : ";
+ private final static String GAME_END = "3개의 숫자를 모두 맞히셨습니다! 게임 종료";
+ private final static String INPUT_RESTART = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.";
+
+ public void showGameStart() {
+ System.out.println(GAME_START);
+ }
+
+ public void showInputNumbers() {
+ System.out.print(INPUT_NUMBERS);
+ }
+
+ public void showGameEnd() {
+ System.out.println(GAME_END);
+ }
+
+ public void showInputRestart() {
+ System.out.println(INPUT_RESTART);
+ }
+
+ public void showString(String string) {
+ System.out.println(string);
+ }
+
+ public String getInput() {
+ return Console.readLine();
+ }
+}
diff --git a/src/test/java/baseball/ApplicationTest.java b/src/test/java/baseball/ApplicationTest.java
index 3fa29fa67b..f9c4121d02 100644
--- a/src/test/java/baseball/ApplicationTest.java
+++ b/src/test/java/baseball/ApplicationTest.java
@@ -7,6 +7,7 @@
import static camp.nextstep.edu.missionutils.test.Assertions.assertSimpleTest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.assertj.core.api.Assertions.*;
class ApplicationTest extends NsTest {
@Test
@@ -32,4 +33,4 @@ class ApplicationTest extends NsTest {
public void runMain() {
Application.main(new String[]{});
}
-}
+}
\ No newline at end of file