From 21c5320721a33add077219cb7de89a055a76d5c5 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 18:47:07 +0900 Subject: [PATCH 01/21] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..c68316293 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,36 @@ +# 구현할 기능 목록 + +## 0. 전체 예외 처리 +- [] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다. +- [] 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다. + + +## 1. 경주할 자동차 +- [] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +### 입력 +- [] 자동차 이름들 입력 +### 예외처리 +- [] 자동차 이름은 쉼표(,)를 기준으로 구분 +- [] 이름은 5자 이하만 가능 + + +## 2. 경주 방법 +### 입력 +- [] 시도할 횟수 입력 +### 예외처리 +- [] 숫자여야 함 + + +## 3. 실행 과정 +- [] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있음 + - [] 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우 +### 출력 +- [] 각 차수별 실행 결과 + + +## 4. 실행 결과 +- [] 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. +- [] 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다. +### 출력 +- [] 단독 우승자 안내 문구 +- [] 공동 우승자 안내 문구 \ No newline at end of file From b641c7a5da08314fb58c4e6fc17a4fd8a2188796 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 19:00:13 +0900 Subject: [PATCH 02/21] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=EC=A1=B0=20=EB=B0=91=EA=B7=B8?= =?UTF-8?q?=EB=A6=BC=20=EB=B0=8F=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 12 ------------ .../racingcar/controller/GameController.java | 4 ++++ src/main/java/racingcar/domain/Car.java | 18 ++++++++++++++++++ src/main/java/racingcar/domain/GameResult.java | 4 ++++ src/main/java/racingcar/domain/RacingGame.java | 4 ++++ .../java/racingcar/utils/InputValidator.java | 4 ++++ src/main/java/racingcar/view/InputView.java | 4 ++++ src/main/java/racingcar/view/OutputView.java | 4 ++++ 8 files changed, 42 insertions(+), 12 deletions(-) delete mode 100644 src/main/java/racingcar/Car.java create mode 100644 src/main/java/racingcar/controller/GameController.java create mode 100644 src/main/java/racingcar/domain/Car.java create mode 100644 src/main/java/racingcar/domain/GameResult.java create mode 100644 src/main/java/racingcar/domain/RacingGame.java create mode 100644 src/main/java/racingcar/utils/InputValidator.java create mode 100644 src/main/java/racingcar/view/InputView.java create mode 100644 src/main/java/racingcar/view/OutputView.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java deleted file mode 100644 index ab3df9492..000000000 --- a/src/main/java/racingcar/Car.java +++ /dev/null @@ -1,12 +0,0 @@ -package racingcar; - -public class Car { - private final String name; - private int position = 0; - - public Car(String name) { - this.name = name; - } - - // 추가 기능 구현 -} diff --git a/src/main/java/racingcar/controller/GameController.java b/src/main/java/racingcar/controller/GameController.java new file mode 100644 index 000000000..1cef7b03f --- /dev/null +++ b/src/main/java/racingcar/controller/GameController.java @@ -0,0 +1,4 @@ +package racingcar.controller; + +public class GameController { +} diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java new file mode 100644 index 000000000..f48093335 --- /dev/null +++ b/src/main/java/racingcar/domain/Car.java @@ -0,0 +1,18 @@ +package racingcar.domain; + +/* +Car 기본 생성자를 추가할 수 없다. +name, position 변수의 접근 제어자인 private을 변경할 수 없다. +가능하면 setPosition(int position) 메소드를 추가하지 않고 구현한다. + */ + +public class Car { + private final String name; + private int position = 0; + + public Car(String name) { + this.name = name; + } + + // 추가 기능 구현 +} diff --git a/src/main/java/racingcar/domain/GameResult.java b/src/main/java/racingcar/domain/GameResult.java new file mode 100644 index 000000000..b20dab3c1 --- /dev/null +++ b/src/main/java/racingcar/domain/GameResult.java @@ -0,0 +1,4 @@ +package racingcar.domain; + +public class GameResult { +} diff --git a/src/main/java/racingcar/domain/RacingGame.java b/src/main/java/racingcar/domain/RacingGame.java new file mode 100644 index 000000000..112212e1d --- /dev/null +++ b/src/main/java/racingcar/domain/RacingGame.java @@ -0,0 +1,4 @@ +package racingcar.domain; + +public class RacingGame { +} diff --git a/src/main/java/racingcar/utils/InputValidator.java b/src/main/java/racingcar/utils/InputValidator.java new file mode 100644 index 000000000..cb695419c --- /dev/null +++ b/src/main/java/racingcar/utils/InputValidator.java @@ -0,0 +1,4 @@ +package racingcar.utils; + +public class InputValidator { +} diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 000000000..2361ba2f5 --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,4 @@ +package racingcar.view; + +public class InputView { +} diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 000000000..abf938a66 --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,4 @@ +package racingcar.view; + +public class OutputView { +} From bb6e7220cda63343892c56b83111b0aa00f584b3 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 19:12:54 +0900 Subject: [PATCH 03/21] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=9E=A8=20skeleton=20code=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 ++++-- src/main/java/racingcar/domain/Car.java | 8 +++++++- src/main/java/racingcar/domain/GameResult.java | 10 ++++++++++ src/main/java/racingcar/domain/RacingGame.java | 9 +++++++++ src/main/java/racingcar/view/InputView.java | 11 +++++++++++ src/main/java/racingcar/view/OutputView.java | 12 ++++++++++++ 6 files changed, 53 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index c68316293..21c9ec126 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,14 +12,16 @@ ### 예외처리 - [] 자동차 이름은 쉼표(,)를 기준으로 구분 - [] 이름은 5자 이하만 가능 - +### 단위테스트 +- [] ## 2. 경주 방법 ### 입력 - [] 시도할 횟수 입력 ### 예외처리 - [] 숫자여야 함 - +### 단위테스트 +- [] ## 3. 실행 과정 - [] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있음 diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index f48093335..a9c0a38c8 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -14,5 +14,11 @@ public Car(String name) { this.name = name; } - // 추가 기능 구현 + public void moveOrStop() { + + } + + public int getPosition() { + return 0; + } } diff --git a/src/main/java/racingcar/domain/GameResult.java b/src/main/java/racingcar/domain/GameResult.java index b20dab3c1..502f08baf 100644 --- a/src/main/java/racingcar/domain/GameResult.java +++ b/src/main/java/racingcar/domain/GameResult.java @@ -1,4 +1,14 @@ package racingcar.domain; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + public class GameResult { + + private HashMap<String, Integer> playerPosition; + + public List<Object> getFinalWinner() { + return Arrays.asList(0); + } } diff --git a/src/main/java/racingcar/domain/RacingGame.java b/src/main/java/racingcar/domain/RacingGame.java index 112212e1d..fe4258742 100644 --- a/src/main/java/racingcar/domain/RacingGame.java +++ b/src/main/java/racingcar/domain/RacingGame.java @@ -1,4 +1,13 @@ package racingcar.domain; +import java.util.List; + public class RacingGame { + + private List<Car> players; + private int gameRound; + + public void startRound() { + + } } diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 2361ba2f5..fa71cd5af 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -1,4 +1,15 @@ package racingcar.view; +import java.util.Arrays; +import java.util.List; + public class InputView { + + public List<String> readPlayerName() { + return Arrays.asList("pobi"); + } + + public int readGameRound() { + return 0; + } } diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index abf938a66..34f625e60 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,4 +1,16 @@ package racingcar.view; public class OutputView { + + public void printRoundResult() { + + } + + public void printFinalWinner() { + + } + + public void printErrorMessage() { + + } } From 493ccd07ce1b60521618cbcda3205e65f3e2d0bb Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 19:20:42 +0900 Subject: [PATCH 04/21] =?UTF-8?q?feat(NumberGenerator):=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=20=EC=88=AB=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=B0=8F=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/domain/NumberGenerator.java | 7 +++++++ .../racingcar/domain/RandomNumberGenerator.java | 14 ++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/main/java/racingcar/domain/NumberGenerator.java create mode 100644 src/main/java/racingcar/domain/RandomNumberGenerator.java diff --git a/src/main/java/racingcar/domain/NumberGenerator.java b/src/main/java/racingcar/domain/NumberGenerator.java new file mode 100644 index 000000000..a616b38bc --- /dev/null +++ b/src/main/java/racingcar/domain/NumberGenerator.java @@ -0,0 +1,7 @@ +package racingcar.domain; + +@FunctionalInterface +public interface NumberGenerator { + + int generate(); +} diff --git a/src/main/java/racingcar/domain/RandomNumberGenerator.java b/src/main/java/racingcar/domain/RandomNumberGenerator.java new file mode 100644 index 000000000..c6fec4f6d --- /dev/null +++ b/src/main/java/racingcar/domain/RandomNumberGenerator.java @@ -0,0 +1,14 @@ +package racingcar.domain; + +import camp.nextstep.edu.missionutils.Randoms; + +public class RandomNumberGenerator implements NumberGenerator { + + private static final int LOWER_BOUND = 0; + private static final int UPPER_BOUND = 9; + + @Override + public int generate() { + return Randoms.pickNumberInRange(LOWER_BOUND, UPPER_BOUND); + } +} From c4ca5c0fd7d9befc9bf78541bd8adeb30802accf Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 19:24:32 +0900 Subject: [PATCH 05/21] =?UTF-8?q?feat(Car):=20=EB=9E=9C=EB=8D=A4=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99,=20=EC=A0=95=EC=A7=80=20=EB=A9=94=EC=86=8C=EB=93=9C?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/domain/Car.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index a9c0a38c8..b30078109 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -7,6 +7,8 @@ */ public class Car { + + private static final int MOVING_CRITERIA = 4; private final String name; private int position = 0; @@ -14,11 +16,13 @@ public Car(String name) { this.name = name; } - public void moveOrStop() { - + public void moveOrStop(NumberGenerator numberGenerator) { + if (numberGenerator.generate() >= MOVING_CRITERIA) { + position++; + } } public int getPosition() { - return 0; + return position; } } From cf186f5492b35026657069f1fcafe49661aa9f91 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 19:25:45 +0900 Subject: [PATCH 06/21] =?UTF-8?q?feat(Car):=20getter=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/domain/Car.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index b30078109..16e6025b7 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -22,6 +22,10 @@ public void moveOrStop(NumberGenerator numberGenerator) { } } + public String getName() { + return name; + } + public int getPosition() { return position; } From 5a4a078974ac2ca1d85e47f737f760ee207f9501 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 19:32:16 +0900 Subject: [PATCH 07/21] =?UTF-8?q?test(CarTest):=20=EB=9E=9C=EB=8D=A4=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=8B=A8=EC=9C=84=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/racingcar/domain/CarTest.java | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/test/java/racingcar/domain/CarTest.java diff --git a/src/test/java/racingcar/domain/CarTest.java b/src/test/java/racingcar/domain/CarTest.java new file mode 100644 index 000000000..1c0cbca80 --- /dev/null +++ b/src/test/java/racingcar/domain/CarTest.java @@ -0,0 +1,37 @@ +package racingcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class CarTest { + + @Test + void 기준보다_작은_수_이동하지_않음_확인() { + NumberGenerator numberGenerator = new TestNumberGenerator(3); + Car car = new Car("June"); + car.moveOrStop(numberGenerator); + assertThat(car.getPosition()).isEqualTo(0); + } + + @Test + void 기준보다_큰수_이동_확인() { + NumberGenerator numberGenerator = new TestNumberGenerator(7); + Car car = new Car("June"); + car.moveOrStop(numberGenerator); + assertThat(car.getPosition()).isEqualTo(1); + } + class TestNumberGenerator implements NumberGenerator { + + private final int number; + + public TestNumberGenerator(int number) { + this.number = number; + } + + @Override + public int generate() { + return number; + } + } +} \ No newline at end of file From 7aace4bef5878200914b6b143a956c75d0348f0f Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 20:46:49 +0900 Subject: [PATCH 08/21] =?UTF-8?q?refactor:=20domain=20=EB=82=B4=EC=97=90?= =?UTF-8?q?=20car=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1,=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/domain/{ => car}/Car.java | 2 +- src/main/java/racingcar/domain/{ => car}/NumberGenerator.java | 2 +- .../java/racingcar/domain/{ => car}/RandomNumberGenerator.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/racingcar/domain/{ => car}/Car.java (95%) rename src/main/java/racingcar/domain/{ => car}/NumberGenerator.java (72%) rename src/main/java/racingcar/domain/{ => car}/RandomNumberGenerator.java (91%) diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/car/Car.java similarity index 95% rename from src/main/java/racingcar/domain/Car.java rename to src/main/java/racingcar/domain/car/Car.java index 16e6025b7..a401ecc05 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/car/Car.java @@ -1,4 +1,4 @@ -package racingcar.domain; +package racingcar.domain.car; /* Car 기본 생성자를 추가할 수 없다. diff --git a/src/main/java/racingcar/domain/NumberGenerator.java b/src/main/java/racingcar/domain/car/NumberGenerator.java similarity index 72% rename from src/main/java/racingcar/domain/NumberGenerator.java rename to src/main/java/racingcar/domain/car/NumberGenerator.java index a616b38bc..37f8cb117 100644 --- a/src/main/java/racingcar/domain/NumberGenerator.java +++ b/src/main/java/racingcar/domain/car/NumberGenerator.java @@ -1,4 +1,4 @@ -package racingcar.domain; +package racingcar.domain.car; @FunctionalInterface public interface NumberGenerator { diff --git a/src/main/java/racingcar/domain/RandomNumberGenerator.java b/src/main/java/racingcar/domain/car/RandomNumberGenerator.java similarity index 91% rename from src/main/java/racingcar/domain/RandomNumberGenerator.java rename to src/main/java/racingcar/domain/car/RandomNumberGenerator.java index c6fec4f6d..fd6363363 100644 --- a/src/main/java/racingcar/domain/RandomNumberGenerator.java +++ b/src/main/java/racingcar/domain/car/RandomNumberGenerator.java @@ -1,4 +1,4 @@ -package racingcar.domain; +package racingcar.domain.car; import camp.nextstep.edu.missionutils.Randoms; From c1407e90b675c8690c999269908f70fee56deca4 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 20:47:28 +0900 Subject: [PATCH 09/21] =?UTF-8?q?feat(Player):=20Car=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A5=BC=20=EB=8B=B4=EC=95=84=20=EC=A0=84=EC=B2=B4=20=EC=B0=B8?= =?UTF-8?q?=EA=B0=80=EC=9E=90=EB=A5=BC=20=EA=B4=80=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Input에서 사용자 이름을 받아 Player 객체 생성하도록 한 라운드 진행할 때 playOneRound 메세지 받아 수행 ParameterizedTest 사용해 단위 테스트 구현 --- src/main/java/racingcar/domain/Player.java | 34 ++++++++++++++ .../java/racingcar/domain/PlayerTest.java | 47 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/main/java/racingcar/domain/Player.java create mode 100644 src/test/java/racingcar/domain/PlayerTest.java diff --git a/src/main/java/racingcar/domain/Player.java b/src/main/java/racingcar/domain/Player.java new file mode 100644 index 000000000..1842d1a6b --- /dev/null +++ b/src/main/java/racingcar/domain/Player.java @@ -0,0 +1,34 @@ +package racingcar.domain; + +import java.util.ArrayList; +import java.util.List; +import racingcar.domain.car.Car; +import racingcar.domain.car.NumberGenerator; + +public class Player { + + private final List<Car> racingCars; + + public Player(List<String> playerNames) { + this.racingCars = setRacingCars(playerNames); + } + + private List<Car> setRacingCars(List<String> playerNames) { + List<Car> racingCars = new ArrayList<>(); + for (String name : playerNames) { + Car car = new Car(name); + racingCars.add(car); + } + return racingCars; + } + + public void playOneRound(NumberGenerator numberGenerator) { + for (Car car : racingCars) { + car.moveOrStop(numberGenerator); + } + } + + public List<Car> getRacingCars() { + return racingCars; + } +} diff --git a/src/test/java/racingcar/domain/PlayerTest.java b/src/test/java/racingcar/domain/PlayerTest.java new file mode 100644 index 000000000..85effea1f --- /dev/null +++ b/src/test/java/racingcar/domain/PlayerTest.java @@ -0,0 +1,47 @@ +package racingcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import racingcar.domain.car.Car; +import racingcar.domain.car.NumberGenerator; + +class PlayerTest { + + static Player player; + + @BeforeAll + static void init() { + List<String> playerNames = Arrays.asList("pobi", "conan", "crong"); + player = new Player(playerNames); + } + + @ParameterizedTest + @CsvSource(value = {"3,0", "4,1", "8,2", "2,2", "7,3"}) + void 올바르게_전진_확인(int number, int position) { + NumberGenerator numberGenerator = new TestNumberGenerator(number); + player.playOneRound(numberGenerator); + List<Car> racingCars = player.getRacingCars(); + for (Car car : racingCars) { + assertThat(car.getPosition()).isEqualTo(position); + } + } + + class TestNumberGenerator implements NumberGenerator { + + private final int number; + + public TestNumberGenerator(int number) { + this.number = number; + } + + @Override + public int generate() { + return number; + } + } +} \ No newline at end of file From f2c07813676852b7fc23ee054fcb603e675081bb Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 21:04:48 +0900 Subject: [PATCH 10/21] =?UTF-8?q?feat(RacingGame):=20RacingGame=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임 라운드 계속 진행 여부 관리 메서드, 게임 진행 메서드 구현 게임 진행에 따른 메서드 반환값 변환 단위 테스트 구현 --- .../java/racingcar/domain/RacingGame.java | 18 +++++++-- .../java/racingcar/domain/RacingGameTest.java | 37 +++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/test/java/racingcar/domain/RacingGameTest.java diff --git a/src/main/java/racingcar/domain/RacingGame.java b/src/main/java/racingcar/domain/RacingGame.java index fe4258742..b1aed8d5f 100644 --- a/src/main/java/racingcar/domain/RacingGame.java +++ b/src/main/java/racingcar/domain/RacingGame.java @@ -1,13 +1,25 @@ package racingcar.domain; -import java.util.List; +import racingcar.domain.car.NumberGenerator; public class RacingGame { - private List<Car> players; + private static final int GAME_OVER_COUNT = 0; + + private final Player player; private int gameRound; - public void startRound() { + public RacingGame(Player player, int gameRound) { + this.player = player; + this.gameRound = gameRound; + } + + public void play(NumberGenerator numberGenerator) { + player.playOneRound(numberGenerator); + gameRound--; + } + public boolean isGameContinue() { + return (gameRound != GAME_OVER_COUNT); } } diff --git a/src/test/java/racingcar/domain/RacingGameTest.java b/src/test/java/racingcar/domain/RacingGameTest.java new file mode 100644 index 000000000..2ea3338fb --- /dev/null +++ b/src/test/java/racingcar/domain/RacingGameTest.java @@ -0,0 +1,37 @@ +package racingcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import racingcar.domain.car.NumberGenerator; +import racingcar.domain.car.RandomNumberGenerator; + +class RacingGameTest { + + static RacingGame racingGame; + + @BeforeAll + static void init() { + List<String> playerNames = Arrays.asList("pobi", "conan", "crong"); + Player player = new Player(playerNames); + racingGame = new RacingGame(player, 4); + } + + @Test + void play_메소드에_따라_isGameContinue_변화_확인() { + // given + assertThat(racingGame.isGameContinue()).isEqualTo(true); + + // when + NumberGenerator numberGenerator = new RandomNumberGenerator(); + for (int i = 0; i < 4; i ++) { + racingGame.play(numberGenerator); + } + + // then + assertThat(racingGame.isGameContinue()).isEqualTo(false); + } +} \ No newline at end of file From 688647f2d9c80a1104315d02ad16f4ecb2016fa2 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 21:06:39 +0900 Subject: [PATCH 11/21] =?UTF-8?q?test(CarTest):=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=B3=80=ED=99=94=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F?= =?UTF-8?q?=20TODO=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/racingcar/domain/CarTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/racingcar/domain/CarTest.java b/src/test/java/racingcar/domain/CarTest.java index 1c0cbca80..8317dbf1a 100644 --- a/src/test/java/racingcar/domain/CarTest.java +++ b/src/test/java/racingcar/domain/CarTest.java @@ -3,9 +3,12 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; +import racingcar.domain.car.Car; +import racingcar.domain.car.NumberGenerator; class CarTest { + // TODO parameterized test 적용! @Test void 기준보다_작은_수_이동하지_않음_확인() { NumberGenerator numberGenerator = new TestNumberGenerator(3); From ff0fafafbfec2e84604c06f57b52d3e01596efcd Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 21:45:59 +0900 Subject: [PATCH 12/21] =?UTF-8?q?feat(InputValidator):=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EA=B0=92=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 콤마 포함 여부, 이름 길이 검사, 숫자 여부 검사 메소드 구현 --- .../java/racingcar/utils/InputValidator.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/utils/InputValidator.java b/src/main/java/racingcar/utils/InputValidator.java index cb695419c..f25a61591 100644 --- a/src/main/java/racingcar/utils/InputValidator.java +++ b/src/main/java/racingcar/utils/InputValidator.java @@ -1,4 +1,38 @@ package racingcar.utils; -public class InputValidator { +public final class InputValidator { + private static final int MAX_NAME_LENGTH = 5; + private static final String COMMA = ","; + + private static final String NOT_IN_COMMA = "자동차 이름을 쉼표(,)로 구분해 적어주세요."; + private static final String INVALID_NAME_LENGTH = "자동차 5글자 이내로 입력해주세요."; + private static final String NOT_NUMBER = "시도할 횟수를 숫자로 입력해주세요."; + + private InputValidator() { + + } + + public static void notContainsComma(String input) { + if (input.length() > MAX_NAME_LENGTH && !input.contains(COMMA)) { + throw new IllegalArgumentException(NOT_IN_COMMA); + } + } + + public static String[] moreThanLenFive(String input) { + String[] inputList = input.split(COMMA); + for (String str : inputList) { + if (str.trim().length() > MAX_NAME_LENGTH) { + throw new IllegalArgumentException(INVALID_NAME_LENGTH); + } + } + return inputList; + } + + public static int notNumber(String input) { + try { + return Integer.parseInt(input); + } catch (NumberFormatException e) { + throw new IllegalArgumentException(NOT_NUMBER); + } + } } From 0c00aad39a6d023e5d9aadfc377ab7ac91f2cdec Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 21:46:58 +0900 Subject: [PATCH 13/21] =?UTF-8?q?feat(InputView):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/view/InputView.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index fa71cd5af..37f6b3256 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -2,14 +2,23 @@ import java.util.Arrays; import java.util.List; +import racingcar.utils.InputValidator; +import camp.nextstep.edu.missionutils.Console; + public class InputView { - public List<String> readPlayerName() { - return Arrays.asList("pobi"); + public List<String> readPlayerName() throws IllegalArgumentException { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String input = Console.readLine(); + InputValidator.notContainsComma(input); + String[] inputList = InputValidator.moreThanLenFive(input); + return Arrays.asList(inputList); } - public int readGameRound() { - return 0; + public int readGameRound() throws IllegalArgumentException { + System.out.println("시도할 회수는 몇회인가요?"); + String input = Console.readLine(); + return InputValidator.notNumber(input); } } From 91b60633224a68ee62a03eec4f7987e843d879f6 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 22:39:39 +0900 Subject: [PATCH 14/21] =?UTF-8?q?feat(OutputView):=20=EC=BD=98=EC=86=94=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=A1=9C=EC=A7=81=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/view/OutputView.java | 32 +++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 34f625e60..2c8d4a12b 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,16 +1,40 @@ package racingcar.view; +import java.util.List; +import java.util.Map; +import racingcar.domain.GameResult; + public class OutputView { - public void printRoundResult() { + private static final String RESULT_OF_PLAY = "실행 결과"; + private static final String FINAL_WINNER = "최종 우승자"; + private static final String COLON = ":"; + private static final String BLANK = " "; + private static final String MOVING = "-"; + public void printResultMessage() { + System.out.println(); + System.out.println(RESULT_OF_PLAY); } - public void printFinalWinner() { - + public void printRoundResult(GameResult gameResult) { + Map<String, Integer> playerPosition = gameResult.getPlayerPosition(); + for (String name : playerPosition.keySet()) { + System.out.print(name + BLANK + COLON + BLANK); + for (int i = 0; i < playerPosition.get(name); i++) { + System.out.print(MOVING); + } + System.out.println(); + } + System.out.println(); } - public void printErrorMessage() { + public void printFinalWinner(GameResult gameResult) { + List<String> finalWinner = gameResult.getFinalWinner(); + System.out.println(FINAL_WINNER + BLANK + COLON + BLANK + String.join(", ", finalWinner)); + } + public void printErrorMessage(String message) { + System.out.println("[ERROR]" + message); } } From 3ef0908dd45a4225a6f9ef1670117ddb385d6582 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 22:40:06 +0900 Subject: [PATCH 15/21] =?UTF-8?q?feat(GameResult):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=83=81=ED=99=A9=20=EB=B0=8F=20=EC=B5=9C=EC=A2=85=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EB=B0=98=ED=99=98=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/domain/GameResult.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/domain/GameResult.java b/src/main/java/racingcar/domain/GameResult.java index 502f08baf..09c001d6e 100644 --- a/src/main/java/racingcar/domain/GameResult.java +++ b/src/main/java/racingcar/domain/GameResult.java @@ -1,14 +1,40 @@ package racingcar.domain; -import java.util.Arrays; -import java.util.HashMap; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import racingcar.domain.car.Car; public class GameResult { - private HashMap<String, Integer> playerPosition; + private final Player player; + private Map<String, Integer> playerPosition = new LinkedHashMap<>(); - public List<Object> getFinalWinner() { - return Arrays.asList(0); + public GameResult(Player player) { + this.player = player; + } + + public void update() { + List<Car> racingCars = player.getRacingCars(); + for (Car car : racingCars) { + playerPosition.put(car.getName(), car.getPosition()); + } + } + + public Map<String, Integer> getPlayerPosition() { + return playerPosition; + } + + public List<String> getFinalWinner() { + List<String> finalWinner = new ArrayList<>(); + int maxValue = Collections.max(playerPosition.values()); + for (Map.Entry<String, Integer> m : playerPosition.entrySet()) { + if (m.getValue() == maxValue) { + finalWinner.add(m.getKey()); + } + } + return finalWinner; } } From 2a30bbc583b7ad953a0f0fa3cf6fa86614ebf35a Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 22:43:27 +0900 Subject: [PATCH 16/21] =?UTF-8?q?fix(InputView):=20player=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=97=90=20=EB=B9=88=EC=B9=B8=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/domain/GameResult.java | 11 ++++++----- src/main/java/racingcar/view/InputView.java | 5 ++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/racingcar/domain/GameResult.java b/src/main/java/racingcar/domain/GameResult.java index 09c001d6e..ce332e845 100644 --- a/src/main/java/racingcar/domain/GameResult.java +++ b/src/main/java/racingcar/domain/GameResult.java @@ -16,17 +16,18 @@ public GameResult(Player player) { this.player = player; } - public void update() { + public Map<String, Integer> getPlayerPosition() { + updatePosition(); + return playerPosition; + } + + private void updatePosition() { List<Car> racingCars = player.getRacingCars(); for (Car car : racingCars) { playerPosition.put(car.getName(), car.getPosition()); } } - public Map<String, Integer> getPlayerPosition() { - return playerPosition; - } - public List<String> getFinalWinner() { List<String> finalWinner = new ArrayList<>(); int maxValue = Collections.max(playerPosition.values()); diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index 37f6b3256..da0cca70c 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -2,6 +2,7 @@ import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import racingcar.utils.InputValidator; import camp.nextstep.edu.missionutils.Console; @@ -13,7 +14,9 @@ public List<String> readPlayerName() throws IllegalArgumentException { String input = Console.readLine(); InputValidator.notContainsComma(input); String[] inputList = InputValidator.moreThanLenFive(input); - return Arrays.asList(inputList); + return Arrays.stream(inputList) + .map(String::trim) + .collect(Collectors.toList()); } public int readGameRound() throws IllegalArgumentException { From aee29523f4b472238c2cf1a238b52e4436162391 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 22:57:58 +0900 Subject: [PATCH 17/21] =?UTF-8?q?chore:=20exception=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EB=82=B4=EC=9A=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/utils/InputValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/utils/InputValidator.java b/src/main/java/racingcar/utils/InputValidator.java index f25a61591..2f0d6b4b1 100644 --- a/src/main/java/racingcar/utils/InputValidator.java +++ b/src/main/java/racingcar/utils/InputValidator.java @@ -5,7 +5,7 @@ public final class InputValidator { private static final String COMMA = ","; private static final String NOT_IN_COMMA = "자동차 이름을 쉼표(,)로 구분해 적어주세요."; - private static final String INVALID_NAME_LENGTH = "자동차 5글자 이내로 입력해주세요."; + private static final String INVALID_NAME_LENGTH = "자동차 이름을 5글자 이내로 입력해주세요."; private static final String NOT_NUMBER = "시도할 횟수를 숫자로 입력해주세요."; private InputValidator() { From a4af3a477bd8ce62b4ff09f394ceb8503d8e9c06 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 22:58:39 +0900 Subject: [PATCH 18/21] =?UTF-8?q?chore:=20exception=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EB=82=B4=EC=9A=A9=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EB=B9=88=EC=B9=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/view/OutputView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index 2c8d4a12b..1ce992204 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -35,6 +35,6 @@ public void printFinalWinner(GameResult gameResult) { } public void printErrorMessage(String message) { - System.out.println("[ERROR]" + message); + System.out.println("[ERROR]" + BLANK + message); } } From 3bbd941932da2cbb8416bdf11c3b52d1cc63d38f Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 23:00:07 +0900 Subject: [PATCH 19/21] =?UTF-8?q?feat(GameController):=20controller=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit view에서 입력값 받아 옴, 잘못된 입력값에 error 메세지 출력 후 재요청 domain 객체들 생성 및 연결 view에서 게임 상황 및 결과 출력 메소드 호출 --- .../racingcar/controller/GameController.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/main/java/racingcar/controller/GameController.java b/src/main/java/racingcar/controller/GameController.java index 1cef7b03f..f7bbf0750 100644 --- a/src/main/java/racingcar/controller/GameController.java +++ b/src/main/java/racingcar/controller/GameController.java @@ -1,4 +1,51 @@ package racingcar.controller; +import java.util.List; +import java.util.function.Supplier; +import racingcar.domain.GameResult; +import racingcar.domain.Player; +import racingcar.domain.RacingGame; +import racingcar.domain.car.NumberGenerator; +import racingcar.domain.car.RandomNumberGenerator; +import racingcar.view.InputView; +import racingcar.view.OutputView; + public class GameController { + + private RacingGame racingGame; + private GameResult gameResult; + + public GameController() { + setUp(); + } + + private void setUp() { + InputView inputView = new InputView(); + List<String> playerNames = repeat(inputView::readPlayerName); + Player player = new Player(playerNames); + this.gameResult = new GameResult(player); + int gameRound = repeat(inputView::readGameRound); + this.racingGame = new RacingGame(player, gameRound); + } + + public void start() { + OutputView outputView = new OutputView(); + outputView.printResultMessage(); + do { + NumberGenerator numberGenerator = new RandomNumberGenerator(); + racingGame.play(numberGenerator); + outputView.printRoundResult(gameResult); + } while (racingGame.isGameContinue()); + outputView.printFinalWinner(gameResult); + } + + private <T> T repeat(Supplier<T> inputReader) { + try { + return inputReader.get(); + } catch (IllegalArgumentException e) { + OutputView outputView = new OutputView(); + outputView.printErrorMessage(e.getMessage()); + return repeat(inputReader); + } + } } From 95808b3019f2d33383c2adf67b042a161316b3a1 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 23:02:05 +0900 Subject: [PATCH 20/21] =?UTF-8?q?feat(Application):=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed0456a..3b3c08e01 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,10 @@ package racingcar; +import racingcar.controller.GameController; + public class Application { public static void main(String[] args) { - // TODO 구현 진행 + GameController gameController = new GameController(); + gameController.start(); } } From 68e5ee5dd377d8bc2fd6c7dc094220a0384f1c03 Mon Sep 17 00:00:00 2001 From: Ridealist <cjsn92@gmail.com> Date: Wed, 30 Nov 2022 23:02:31 +0900 Subject: [PATCH 21/21] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/README.md b/docs/README.md index 21c9ec126..84f914de1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,38 +1,38 @@ # 구현할 기능 목록 ## 0. 전체 예외 처리 -- [] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다. -- [] 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다. +- [x] 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다. +- [x] 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다. ## 1. 경주할 자동차 -- [] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +- [x] 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. ### 입력 -- [] 자동차 이름들 입력 +- [x] 자동차 이름들 입력 ### 예외처리 -- [] 자동차 이름은 쉼표(,)를 기준으로 구분 -- [] 이름은 5자 이하만 가능 +- [x] 자동차 이름은 쉼표(,)를 기준으로 구분 +- [x] 이름은 5자 이하만 가능 ### 단위테스트 -- [] +- [x] ## 2. 경주 방법 ### 입력 -- [] 시도할 횟수 입력 +- [x] 시도할 횟수 입력 ### 예외처리 -- [] 숫자여야 함 +- [x] 숫자여야 함 ### 단위테스트 -- [] +- [x] ## 3. 실행 과정 -- [] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있음 - - [] 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우 +- [x] 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있음 + - [x] 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우 ### 출력 -- [] 각 차수별 실행 결과 +- [x] 각 차수별 실행 결과 ## 4. 실행 결과 -- [] 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. -- [] 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다. +- [x] 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. +- [x] 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다. ### 출력 -- [] 단독 우승자 안내 문구 -- [] 공동 우승자 안내 문구 \ No newline at end of file +- [x] 단독 우승자 안내 문구 +- [x] 공동 우승자 안내 문구 \ No newline at end of file