From 3dd2c9d2f6f4fa38934fdb3e90864bb41c8a729e Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:20:02 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat.Car=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EC=9D=B4=EB=8F=99=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=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/domain/Car.java | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/racingcar/domain/Car.java diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java new file mode 100644 index 0000000000..154e3d5aa4 --- /dev/null +++ b/src/main/java/racingcar/domain/Car.java @@ -0,0 +1,29 @@ +package racingcar.domain; + +import java.util.List; + +public class Car { + private String carName; + private int count; + + public Car( String carName) { + + if (carName.length() > 5) throw new IllegalArgumentException("잘못된 값을 입력하였습니다."); + this.carName = carName; + this.count = 0; + } + + public void move(int randomValue) { + if (randomValue >= 4) count++; + } + + public String getName() { + return carName; + } + public int getCount() { + return count; + } + + + +} From f1a9d1c2bb82337fa6ea4921b9334cd226663e8e Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:25:26 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20ResultGameView=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B2=B0=EA=B3=BC?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/view/ResultGameView.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/racingcar/view/ResultGameView.java diff --git a/src/main/java/racingcar/view/ResultGameView.java b/src/main/java/racingcar/view/ResultGameView.java new file mode 100644 index 0000000000..5aab1ba756 --- /dev/null +++ b/src/main/java/racingcar/view/ResultGameView.java @@ -0,0 +1,22 @@ + +package racingcar.view; + +import racingcar.domain.Car; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class ResultGameView { + + public static void midPrint(Listcars){ + System.out.println(); + cars.forEach(car-> + System.out.printf("%s : %s\n", car.getName(),"-".repeat(car.getCount())) + ); + } + + public static void finalPrint(List carNames){ + System.out.printf("최종 우승자 : %s", String.join(", ",carNames)); + } +} From b841c7ebd50e090d0f77755f528e3d7038520978 Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:26:38 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20Application=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=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/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 a17a52e724..f17ef3731a 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.startGame(); } } From 11d2962347bb577119bca787deb6a02434360d3e Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:46:32 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20GameController=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=20=ED=9D=90=EB=A6=84=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../racingcar/controller/GameController.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/racingcar/controller/GameController.java diff --git a/src/main/java/racingcar/controller/GameController.java b/src/main/java/racingcar/controller/GameController.java new file mode 100644 index 0000000000..2123a2bcc6 --- /dev/null +++ b/src/main/java/racingcar/controller/GameController.java @@ -0,0 +1,29 @@ +package racingcar.controller; + +import racingcar.domain.Car; +import racingcar.domain.RacingGame; +import racingcar.service.GameService; +import racingcar.view.InputGameView; +import racingcar.view.ResultGameView; + +import java.util.List; +import java.util.stream.Collectors; + +public class GameController { + private final GameService gameService=new GameService(); + public void startGame(){ + List carNames= InputGameView.carNames(); + int tryNum=InputGameView.tryNum(); + + RacingGame game= gameService.createGame(carNames,tryNum); + System.out.print("\n실행 결과"); + + while (!game.isFinished()){ + gameService.playGame(game); + ResultGameView.midPrint(game.getCars()); + } + + ResultGameView.finalPrint(game.getWinner()); + + } +} From bb866fad01f5c6d78d1d2fa6ae8bdb1cd6ec433f Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:47:14 +0900 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20RacingGame=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=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 --- .../java/racingcar/domain/RacingGame.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/java/racingcar/domain/RacingGame.java diff --git a/src/main/java/racingcar/domain/RacingGame.java b/src/main/java/racingcar/domain/RacingGame.java new file mode 100644 index 0000000000..6b1c04734f --- /dev/null +++ b/src/main/java/racingcar/domain/RacingGame.java @@ -0,0 +1,45 @@ +package racingcar.domain; + +import racingcar.view.InputGameView; +import java.util.*; +import java.util.stream.Collectors; + +public class RacingGame { + private final List cars; + private int remainRounds; + private final Random random = new Random(); + private InputGameView inputGameView; + + public RacingGame(List cars, int remainRounds) { + this.cars = cars; + this.remainRounds = remainRounds; + } + + public boolean isFinished(){ + return remainRounds <= 0; + } + + public void play(){ + cars.forEach(car -> car.move(randomValue())); + remainRounds--; + } + + public List getCars(){ + return cars; + } + + public List getWinner(){ + int maxDistance=cars.stream() + .mapToInt(Car::getCount) + .max() + .orElse(0); + return cars.stream() + .filter(car -> car.getCount()==maxDistance) + .map(car -> car.getName()) + .collect(Collectors.toList()); + } + + public int randomValue(){ + return random.nextInt(10); + } +} From df5b0e64a1fc242407baedadbff3fee0e0d36a2b Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:48:20 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20GameService=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=20=EC=A7=84=ED=96=89=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/service/GameService.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/racingcar/service/GameService.java diff --git a/src/main/java/racingcar/service/GameService.java b/src/main/java/racingcar/service/GameService.java new file mode 100644 index 0000000000..f84d7b5ec0 --- /dev/null +++ b/src/main/java/racingcar/service/GameService.java @@ -0,0 +1,18 @@ +package racingcar.service; + +import racingcar.domain.Car; +import racingcar.domain.RacingGame; + +import java.util.List; +import java.util.stream.Collectors; + +public class GameService { + public RacingGame createGame(List carNames, int rounds){ + List cars = carNames.stream().map(Car::new).collect(Collectors.toList()); + return new RacingGame(cars, rounds); + } + + public void playGame(RacingGame racingGame){ + racingGame.play(); + } +} From ed4f1825ba9b01f4eb549c876c03eff0d075a89f Mon Sep 17 00:00:00 2001 From: Lee Da-hyeon Date: Mon, 28 Oct 2024 23:48:46 +0900 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20InputGameView=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/racingcar/view/InputGameView.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/racingcar/view/InputGameView.java diff --git a/src/main/java/racingcar/view/InputGameView.java b/src/main/java/racingcar/view/InputGameView.java new file mode 100644 index 0000000000..e12def7ab0 --- /dev/null +++ b/src/main/java/racingcar/view/InputGameView.java @@ -0,0 +1,22 @@ +package racingcar.view; + +import camp.nextstep.edu.missionutils.Console; + +import java.util.Arrays; +import java.util.List; + +public class InputGameView { + public static List carNames(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + return Arrays.stream(Console.readLine().split(",")) + .map(String::trim) + .toList(); + } + + public static int tryNum(){ + System.out.println("시도할 횟수는 몇 회인가요?"); + return Integer.parseInt(Console.readLine()); + } + +} +