From a1c6056144486d8440d482edbe9aefbd52df0f25 Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 02:50:39 +0900 Subject: [PATCH 1/8] feat: Car model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 입력된 이름으로 생성 시에 길이 검사 중복 검사를 진행합니다. --- src/main/java/Car.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/Car.java diff --git a/src/main/java/Car.java b/src/main/java/Car.java new file mode 100644 index 0000000000..d4c3c9b156 --- /dev/null +++ b/src/main/java/Car.java @@ -0,0 +1,35 @@ +import java.util.HashSet; +import java.util.Set; + +public class Car { + private static Set nameSet = new HashSet<>(); + private String name; + private int count; + + + + public Car(String name) { + validateNameLength(name); + validateNameDuplication(name); + this.name = name; + this.count = 1; + } + + private void validateNameLength(String name) { + if (name.length() > 5) { + throw new IllegalArgumentException("자동차 길이가 혀용 길이를 초과힙니다."); + } + } + + private void validateNameDuplication(String name) { + if (!nameSet.add(name)) { + throw new IllegalArgumentException("이름이 중복됩니다."); + } + public String getName() { + return name; + } + + public int getCount() { + return count; + } +} From e19d4a100348b8c51cb9e6b1ced11d3569fd6ecd Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 02:51:45 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20Dice=20=EB=AA=A8=EB=8D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 랜덤한 값을 생성합니다. 4 이상일 경우 전진을 진행합니다. --- src/main/java/Dice.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/Dice.java diff --git a/src/main/java/Dice.java b/src/main/java/Dice.java new file mode 100644 index 0000000000..5d9d9c638f --- /dev/null +++ b/src/main/java/Dice.java @@ -0,0 +1,14 @@ +import java.util.Random; + +public class Dice { + Random random = new Random(); + private int dice; + public Dice() { + this.dice = random.nextInt(10); + } + public boolean validateMove(){ + Dice check = new Dice(); + return check.dice > 4; + } + +} From 014e31a51ecfd3c1dbb015777478e44a065edf0d Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 02:52:13 +0900 Subject: [PATCH 3/8] feat: racingMain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임을 시작하는 main 함수입니다. --- src/main/java/RacingMain.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/RacingMain.java diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java new file mode 100644 index 0000000000..1951516f5b --- /dev/null +++ b/src/main/java/RacingMain.java @@ -0,0 +1,8 @@ +import java.io.IOException; + +public class RacingMain { + public static void main(String []args) throws IOException { + GameController gameController = new GameController(); + gameController.startGame(); + } +} From 9d24629f568249ff1c913c940927f0808c109e0a Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 02:53:02 +0900 Subject: [PATCH 4/8] feat: GameController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 초기 값들을 설정합니다. --- src/main/java/GameController.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/GameController.java diff --git a/src/main/java/GameController.java b/src/main/java/GameController.java new file mode 100644 index 0000000000..368a01e935 --- /dev/null +++ b/src/main/java/GameController.java @@ -0,0 +1,15 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class GameController { + GameView gameView = new GameView(); + private final BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); + private List nameList; + private List carList; + private Dice dice = new Dice(); + From 73d3a833ac0ab91f526048bf4ad1d3ac5d31f149 Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 02:56:50 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=9A=94=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 자동차 이름을 요청하고 입력받습니다. --- src/main/java/GameController.java | 14 ++++++++++++++ src/main/java/GameView.java | 9 +++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/GameView.java diff --git a/src/main/java/GameController.java b/src/main/java/GameController.java index 368a01e935..db0d4161cb 100644 --- a/src/main/java/GameController.java +++ b/src/main/java/GameController.java @@ -13,3 +13,17 @@ public class GameController { private List carList; private Dice dice = new Dice(); + public void startGame() throws IOException { + + gameView.askCarNames(); + String names = getCarNames(); + nameList = Arrays.asList(names.split(",")); + + carList = new ArrayList<>(); + + for (String name : nameList) { + carList.add(new Car(name.trim())); + } + public String getCarNames() throws IOException { + return input.readLine(); + } diff --git a/src/main/java/GameView.java b/src/main/java/GameView.java new file mode 100644 index 0000000000..d2d44fc622 --- /dev/null +++ b/src/main/java/GameView.java @@ -0,0 +1,9 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.List; +import java.util.stream.Collectors; + +public class GameView { + public void askCarNames(){ + System.out.println("경주할 자동차 이름을 입력하세요 (이름은 쉼표(,)를 기준으로 구분)."); + } From 24754923066ea639fa6dcaa3b3dd2caad8301e76 Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 02:59:34 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=EC=8B=9C=EB=8F=84=20=ED=9A=9F?= =?UTF-8?q?=EC=88=98=20=EC=9A=94=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 시도 횟수를 요청하고 입력받습니다. --- src/main/java/GameController.java | 10 ++++++++++ src/main/java/GameView.java | 3 +++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/GameController.java b/src/main/java/GameController.java index db0d4161cb..5a5172b043 100644 --- a/src/main/java/GameController.java +++ b/src/main/java/GameController.java @@ -24,6 +24,16 @@ public void startGame() throws IOException { for (String name : nameList) { carList.add(new Car(name.trim())); } + + gameView.askTryCounts(); + int times = getTryTimes(); + public String getCarNames() throws IOException { return input.readLine(); } + + public int getTryTimes() throws IOException { + String tryTimesStr = input.readLine(); + return Integer.parseInt(tryTimesStr); + } + diff --git a/src/main/java/GameView.java b/src/main/java/GameView.java index d2d44fc622..f91c2b0374 100644 --- a/src/main/java/GameView.java +++ b/src/main/java/GameView.java @@ -7,3 +7,6 @@ public class GameView { public void askCarNames(){ System.out.println("경주할 자동차 이름을 입력하세요 (이름은 쉼표(,)를 기준으로 구분)."); } + public void askTryCounts(){ + System.out.println("시도할 횟수는 몇회인가요?"); + } From 006c8d5cdf893006c26e620e4862f37ea95979d0 Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 03:01:10 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EA=B2=BD=EC=A3=BC=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 주사위 값을 이용해 값 검증을 진행하고, 전진합니다. --- src/main/java/Car.java | 6 ++++++ src/main/java/Dice.java | 4 +++- src/main/java/GameController.java | 13 +++++++++++++ src/main/java/GameView.java | 9 +++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/Car.java b/src/main/java/Car.java index d4c3c9b156..27ab4bac6c 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -25,6 +25,12 @@ private void validateNameDuplication(String name) { if (!nameSet.add(name)) { throw new IllegalArgumentException("이름이 중복됩니다."); } + } + + public int incrementCount() { + return this.count++; + } + public String getName() { return name; } diff --git a/src/main/java/Dice.java b/src/main/java/Dice.java index 5d9d9c638f..1c22893715 100644 --- a/src/main/java/Dice.java +++ b/src/main/java/Dice.java @@ -3,10 +3,12 @@ public class Dice { Random random = new Random(); private int dice; + public Dice() { this.dice = random.nextInt(10); } - public boolean validateMove(){ + + public boolean validateMove() { Dice check = new Dice(); return check.dice > 4; } diff --git a/src/main/java/GameController.java b/src/main/java/GameController.java index 5a5172b043..225f40bdb1 100644 --- a/src/main/java/GameController.java +++ b/src/main/java/GameController.java @@ -9,6 +9,7 @@ public class GameController { GameView gameView = new GameView(); private final BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); + GameView gameView = new GameView(); private List nameList; private List carList; private Dice dice = new Dice(); @@ -28,6 +29,12 @@ public void startGame() throws IOException { gameView.askTryCounts(); int times = getTryTimes(); + gameView.printRacingStart(); + for (int i = 0; i < times; i++) { + setProgress(); + GameView.showProgress(carList); + System.out.println(); + } public String getCarNames() throws IOException { return input.readLine(); } @@ -37,3 +44,9 @@ public int getTryTimes() throws IOException { return Integer.parseInt(tryTimesStr); } + public void setProgress() { + carList.stream() + .filter(car -> dice.validateMove()) + .forEach(Car::incrementCount); + } + diff --git a/src/main/java/GameView.java b/src/main/java/GameView.java index f91c2b0374..4a93c99eb0 100644 --- a/src/main/java/GameView.java +++ b/src/main/java/GameView.java @@ -10,3 +10,12 @@ public void askCarNames(){ public void askTryCounts(){ System.out.println("시도할 횟수는 몇회인가요?"); } + public void printRacingStart(){ + System.out.println("실행 결과"); + } + public static void showProgress(List carList){ + for (Car car : carList) { + String s = car.getName() + " : " + "-".repeat(car.getCount()); + System.out.println(s); + } + } From 90d8ca4bd4a7c81cd2f8829ba372bbb397389a86 Mon Sep 17 00:00:00 2001 From: hyunw9 Date: Thu, 21 Sep 2023 03:02:01 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=EC=9A=B0=EC=8A=B9=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Car의 count 를 종합해 우승자를 출력합니다. --- src/main/java/Car.java | 1 - src/main/java/GameController.java | 17 ++++++++++++++++- src/main/java/GameView.java | 6 ++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/Car.java b/src/main/java/Car.java index 27ab4bac6c..54f5451bcf 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -7,7 +7,6 @@ public class Car { private int count; - public Car(String name) { validateNameLength(name); validateNameDuplication(name); diff --git a/src/main/java/GameController.java b/src/main/java/GameController.java index 225f40bdb1..16df31aa8e 100644 --- a/src/main/java/GameController.java +++ b/src/main/java/GameController.java @@ -7,7 +7,6 @@ import java.util.stream.Collectors; public class GameController { - GameView gameView = new GameView(); private final BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); GameView gameView = new GameView(); private List nameList; @@ -35,6 +34,11 @@ public void startGame() throws IOException { GameView.showProgress(carList); System.out.println(); } + List winners = new ArrayList<>(getWinners()); + gameView.showWinner(winners); + + } + public String getCarNames() throws IOException { return input.readLine(); } @@ -50,3 +54,14 @@ public void setProgress() { .forEach(Car::incrementCount); } + public List getWinners() { + int maxCount = carList.stream().mapToInt(Car::getCount) + .max() + .orElse(0); + return carList.stream() + .filter(car -> car.getCount() == maxCount) + .map(Car::getName) + .collect(Collectors.toList()); + } + +} diff --git a/src/main/java/GameView.java b/src/main/java/GameView.java index 4a93c99eb0..a5c36073ed 100644 --- a/src/main/java/GameView.java +++ b/src/main/java/GameView.java @@ -19,3 +19,9 @@ public static void showProgress(List carList){ System.out.println(s); } } + public static void showWinner(List winner){ + String s = " "; + System.out.println(winner.stream().collect(Collectors.joining(",")) + "가 최종 우승했습니다."); + } + +}