diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..3c4e87c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,7 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + GameManager gameManager = new GameManager(); + gameManager.start(); } } diff --git a/src/main/java/racingcar/AttemptReader.java b/src/main/java/racingcar/AttemptReader.java new file mode 100644 index 0000000..3366f26 --- /dev/null +++ b/src/main/java/racingcar/AttemptReader.java @@ -0,0 +1,15 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; + +public class AttemptReader { + public static int read() { + System.out.println("시도할 회수는 몇 회인가요?"); + String inputNum = Console.readLine(); + int attempts = Integer.parseInt(inputNum); + if (attempts <= 0 ) { + throw new IllegalArgumentException ("0이상 입력하세요."); + } + return attempts; + } +} diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..8f4de47 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,30 @@ +package racingcar; + +public class Car implements Raceable{ + private final String name; + private int distance = 0; + public Car (String name) { + validateName(name); + this.name = name; + } + + private void validateName(String name){ + if (name == null || name.isBlank() || name.length() > 5 || name.contains(" ")) { + throw new IllegalArgumentException ("올바른 값을 입력해주세요. (문자열을 입력하세요.)"); + } + } + + public void move(int randomNumber) { + if (randomNumber >= 4) { + distance ++; + } + } + + public int getDistance() { + return distance; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/racingcar/CarCreator.java b/src/main/java/racingcar/CarCreator.java new file mode 100644 index 0000000..237a89f --- /dev/null +++ b/src/main/java/racingcar/CarCreator.java @@ -0,0 +1,26 @@ +package racingcar; +import camp.nextstep.edu.missionutils.Console; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class CarCreator { + public static List createCars() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String inputName = Console.readLine(); + String[] names = inputName.split(","); + + Set nameSet = new HashSet<>(List.of(names)); + if (nameSet.size() != names.length) { + throw new IllegalArgumentException("중복된 값 입니다."); + } + + List cars = new ArrayList<>(); + for (String name : names) { + cars.add(new Car(name)); + } + + return cars; + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/GameManager.java b/src/main/java/racingcar/GameManager.java new file mode 100644 index 0000000..b154702 --- /dev/null +++ b/src/main/java/racingcar/GameManager.java @@ -0,0 +1,24 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; +import java.util.List; + +public class GameManager { + public void start() { + List cars = CarCreator.createCars(); + int attempts = AttemptReader.read(); + + System.out.println(); + System.out.println("실행 결과"); + for(int i = 1; i <= attempts; i++){ + for (Raceable car : cars) { + int randomNumber = Randoms.pickNumberInRange(0, 9); + car.move(randomNumber); + System.out.println(car.getName() + " : " + "-".repeat(car.getDistance())); + } + System.out.println(); + } + WinnerPicker winnerPicker = new WinnerPicker(); + winnerPicker.printWinner(cars); + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/Raceable.java b/src/main/java/racingcar/Raceable.java new file mode 100644 index 0000000..852507a --- /dev/null +++ b/src/main/java/racingcar/Raceable.java @@ -0,0 +1,7 @@ +package racingcar; + +public interface Raceable { + String getName(); + int getDistance(); + void move(int randomNumber); +} \ No newline at end of file diff --git a/src/main/java/racingcar/WinnerPicker.java b/src/main/java/racingcar/WinnerPicker.java new file mode 100644 index 0000000..fcc84f3 --- /dev/null +++ b/src/main/java/racingcar/WinnerPicker.java @@ -0,0 +1,23 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.List; + +public class WinnerPicker { + public void printWinner(List cars) { + int maxdistance = 0; + for (Raceable car : cars) { + if (car.getDistance() > maxdistance) { + maxdistance = car.getDistance(); + } + } + + List winnercars = new ArrayList<>(); + for (Raceable car : cars) { + if (car.getDistance() == maxdistance) { + winnercars.add(car.getName()); + } + } + System.out.println("최종 우승자 : " + String.join(", ", winnercars)); + } +}