diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 0000000..95595ee --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,10 @@ +import controller.RacingGameManager; + +import java.io.IOException; + +public class Application { + public static void main(String[] args) throws IOException { + RacingGameManager racingGameManager = new RacingGameManager(); + racingGameManager.race(); + } +} \ No newline at end of file diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java deleted file mode 100644 index 4394287..0000000 --- a/src/main/java/RacingMain.java +++ /dev/null @@ -1,7 +0,0 @@ -public class RacingMain { - - public static void main(String[] args) { - // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 - System.out.println("Hello, World!"); - } -} diff --git a/src/main/java/controller/RacingGameManager.java b/src/main/java/controller/RacingGameManager.java new file mode 100644 index 0000000..757d55e --- /dev/null +++ b/src/main/java/controller/RacingGameManager.java @@ -0,0 +1,31 @@ +package controller; + +import domain.Cars; +import view.InputView; +import view.ResultView; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + + +public class RacingGameManager { + private final InputView inputView = new InputView(); + private final ResultView resultView = new ResultView(); + + public void race() throws IOException { + String names = inputView.getCarNames(); + Cars cars = new Cars(names); + + int tryCount = inputView.getTryCount(); + runGame(tryCount, cars); + + resultView.printWinners(cars.getWinners()); + } + + void runGame(int tryCount, Cars cars) { + for (int i = 0; i < tryCount; i++) { + cars.moveAllCars(); + resultView.printStatus(cars.getCars()); + } + } +} diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java new file mode 100644 index 0000000..e0470fe --- /dev/null +++ b/src/main/java/domain/Car.java @@ -0,0 +1,27 @@ +package domain; + +public class Car { + private static final int STANDARD_NUM = 4; + private final String carName; + private int position; + + public Car(String carName) { + this.carName = carName; + this.position = 0; + } + + public void move(int num) { + if (num >= STANDARD_NUM) { + position++; + } + } + + public int getPosition() { + return position; + } + + + public String getCarName() { + return carName; + } +} diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java new file mode 100644 index 0000000..cf2cff7 --- /dev/null +++ b/src/main/java/domain/Cars.java @@ -0,0 +1,59 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class Cars { + private final List cars; + + public Cars(String carNames) { + this.cars = addCars(carNames); + } + + public List addCars(String carNames) { + String[] carNamesArray = carNames.split(","); + List cars = new ArrayList<>(); + for (String carName : carNamesArray) { + cars.add(new Car(carName.trim())); + } + return cars; + } + + public void moveAllCars() { + for (Car car : cars) { + car.move(generateRandomNumber()); + } + } + + private int generateRandomNumber() { + return (int) (Math.random() * 10); + } + + public int findMaxPosition() { + int maxPosition = 0; + for (Car car : cars) { + int carPosition = car.getPosition(); + if (carPosition > maxPosition) { + maxPosition = carPosition; + } + } + return maxPosition; + } + + + public List getWinners() { + List winners = new ArrayList<>(); + for (Car car : cars) { + int carPosition = car.getPosition(); + int maxPosition = findMaxPosition(); + if (carPosition == maxPosition) { + winners.add(car.getCarName()); + } + } + return winners; + } + + public List getCars() { + return cars; + } +} \ No newline at end of file diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..8dc3fb6 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,23 @@ +package view; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class InputView { + private static final String REQUEST_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."; + private static final String REQUEST_ATTEMPT_NUMBER = "시도할 회수는 몇회인가요?"; + + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + public String getCarNames() throws IOException { + System.out.println(REQUEST_CAR_NAME); + return br.readLine(); + } + + public int getTryCount() throws IOException { + System.out.println(REQUEST_ATTEMPT_NUMBER); + return Integer.parseInt(br.readLine()); + } + +} diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java new file mode 100644 index 0000000..663599e --- /dev/null +++ b/src/main/java/view/ResultView.java @@ -0,0 +1,32 @@ +package view; + +import domain.Car; + +import java.util.List; + +public class ResultView { + public static final String PRINT_FINAL_WINNER = "가 최종 우승했습니다."; + + public void printStatus(List carsList) { + for (Car car : carsList) { + int currentPosition = car.getPosition(); + String carName = car.getCarName(); + System.out.print(carName + " : "); + printPosition(currentPosition); + } + System.out.println(); + } + + private void printPosition(int currenPosition) { + for (int i = 0; i < currenPosition; i++) { + System.out.print("-"); + } + System.out.println(); + } + + public void printWinners(List winners) { + String result = String.join(", ", winners); + System.out.println(result + PRINT_FINAL_WINNER); + } + +}