diff --git a/docs/README.md b/docs/README.md index e69de29b..c1f78d16 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,8 @@ +1. 자동차 이름입력받기 +2. 시도할 경주횟수 입력받기 +3. 차 객체 만들기 +4. 경주차 리스트 만들기 +5. 차 움직이기 +6. 모든차의 위치 보여주기 +7. 우승자 결정 +8. 우승자 출력 \ No newline at end of file diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7..ea5918d1 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,44 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.List; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + List cars = inputCarNames(); + RacingResultPrinter printer = new RacingResultPrinter(); + int attempts = inputAttemptCount(); + RacingGame game = new RacingGame(cars); + System.out.println("\n실행 결과"); + game.play(attempts); + printer.printWinners(game.findWinners()); + } + + private static List inputCarNames() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String input = Console.readLine(); + String[] carNames = input.split(","); + List cars = new ArrayList<>(); + + for (String carName : carNames) { + carName = carName.trim(); + if (carName.length() > 5) { + throw new IllegalArgumentException("자동차 이름은 5자 이하만 가능합니다."); + } + cars.add(new Car(carName)); + } + return cars; + } + + private static int inputAttemptCount() { + System.out.println("시도할 회수는 몇회인가요?"); + try { + return Integer.parseInt(Console.readLine()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("숫자를 입력해야 합니다."); + } } } + diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 00000000..df970f3c --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,25 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; + +public class Car { + private final String carName; + private int position = 0; + + public Car(String carName) { + this.carName = carName; + } + + public void move() { + if (Randoms.pickNumberInRange(0, 9) >= 4) + position++; + } + + public int getPosition() { + return position; + } + + public String getName() { + return carName; + } +} diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java new file mode 100644 index 00000000..f59fd783 --- /dev/null +++ b/src/main/java/racingcar/RacingGame.java @@ -0,0 +1,36 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.List; + +public class RacingGame { + private final List cars; + private final RacingResultPrinter printer = new RacingResultPrinter(); + public RacingGame(List cars) { + this.cars = cars; + } + + public void play(int attempts) { + for (int i = 0; i < attempts; i++) { + cars.forEach(Car::move); + printer.printCurrentCarPosition(cars); + } + } + + public List findWinners() { + int fastest = 0; + for (Car car : cars) { + if (car.getPosition() > fastest) { + fastest = car.getPosition(); + } + } + + List winners = new ArrayList<>(); + for (Car car : cars) { + if (car.getPosition() == fastest) { + winners.add(car.getName()); + } + } + return winners; + } +} diff --git a/src/main/java/racingcar/RacingResultPrinter.java b/src/main/java/racingcar/RacingResultPrinter.java new file mode 100644 index 00000000..39a70002 --- /dev/null +++ b/src/main/java/racingcar/RacingResultPrinter.java @@ -0,0 +1,19 @@ +package racingcar; + +import java.util.List; + +//출력관련 클래스 +public class RacingResultPrinter { + //경주 후 차위치 출력 + public void printCurrentCarPosition(List cars) { + for (Car car : cars) { + System.out.print(car.getName() + " : "); + System.out.println("-".repeat(car.getPosition())); + } + System.out.println(); + } + + public void printWinners(List winners) { + System.out.println("최종 우승자 : " + String.join(", ", winners)); + } +}