diff --git a/README.md b/README.md index 1969313..a1b2e54 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,14 @@ 자동차 경주 미션 저장소 +객체 생성 + +사용자 -> 게임기 + +사용자 자동차 이름, 시도회수 입력 받음 +입력값으로 차량 생성 + +게임기 -> 생성된 자동차로 시도횟수만큼 실행 +랜덤으로 자동차 출발 +최종 우승 자동차 반환 +사용자한테 출력 diff --git a/src/main/java/RacingMain.java b/src/main/java/RacingMain.java index 4394287..59d32e5 100644 --- a/src/main/java/RacingMain.java +++ b/src/main/java/RacingMain.java @@ -1,7 +1,10 @@ -public class RacingMain { +import racingcar.controller.RacingController; +public class RacingMain { + private static final RacingController racingController = new RacingController(); public static void main(String[] args) { // TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기 - System.out.println("Hello, World!"); + racingController.start(); + } } diff --git a/src/main/java/racingcar/controller/RacingController.java b/src/main/java/racingcar/controller/RacingController.java new file mode 100644 index 0000000..2daf6b7 --- /dev/null +++ b/src/main/java/racingcar/controller/RacingController.java @@ -0,0 +1,33 @@ +package racingcar.controller; + +import racingcar.model.Car; +import racingcar.model.RacingGame; +import racingcar.model.WinningResult; +import racingcar.view.InputView; +import racingcar.view.OutputView; + +import java.util.List; + +public class RacingController { + private final RacingGame racinggame = new RacingGame(); + private final WinningResult winningresult = new WinningResult(); + private final InputView inputView = new InputView(); + private final OutputView outputview = new OutputView(); + + public void start() { + String[] names = inputView.getNames(); + int round = inputView.getRound(); + List cars = racinggame.saveCars(names); + roundResult(round, cars); + winningresult.winningScore(cars); + outputview.result(cars, winningresult.winningScore); + } + + private void roundResult(int round, List cars) { + System.out.println(""); + for (int i = 0; i < round; i++) { + racinggame.updatePhase(cars); + outputview.round(cars); + } + } +} diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java new file mode 100644 index 0000000..66c676b --- /dev/null +++ b/src/main/java/racingcar/model/Car.java @@ -0,0 +1,26 @@ +package racingcar.model; +public class Car { //자동차 객체 생성 + private String name; + private int position = 0; + + public Car(String name, int position) { + this.name = name; + this.position = position; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } +} diff --git a/src/main/java/racingcar/model/RacingGame.java b/src/main/java/racingcar/model/RacingGame.java new file mode 100644 index 0000000..1b1013e --- /dev/null +++ b/src/main/java/racingcar/model/RacingGame.java @@ -0,0 +1,26 @@ +package racingcar.model; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class RacingGame { + + public List saveCars(String[] carNames) { + List cars = new ArrayList<>(); + for (int i = 0; i < carNames.length; i++) { + String name = carNames[i]; + cars.add(new Car(name, 0)); + } + return cars; + } + public void updatePhase(List cars) { + Random random = new Random(); + for (int j = 0; j < cars.size(); j++) { + int randomNum = random.nextInt(10); + if (randomNum >= 4) { + cars.get(j).setPosition(cars.get(j).getPosition() + 1); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/model/WinningResult.java b/src/main/java/racingcar/model/WinningResult.java new file mode 100644 index 0000000..a3e2317 --- /dev/null +++ b/src/main/java/racingcar/model/WinningResult.java @@ -0,0 +1,17 @@ +package racingcar.model; + +import java.util.List; +import java.util.Random; + +public class WinningResult { + public int winningScore = 0; + + public void winningScore(List cars) { + for (int m = 0; m < cars.size(); m++) { + if (winningScore < cars.get(m).getPosition()) { + winningScore = cars.get(m).getPosition(); + } + } + } + +} diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java new file mode 100644 index 0000000..0b1519c --- /dev/null +++ b/src/main/java/racingcar/view/InputView.java @@ -0,0 +1,56 @@ +package racingcar.view; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class InputView { //입력관련 메서드 집합 + Scanner sc = new Scanner(System.in); + + public String[] getNames() { + System.out.print("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String inputname = sc.next(); + String[] names = inputname.split(","); //쉼표로 분리해서 넣기 + try { + nameRange(names); //글자가 5개 이상이거나, + sameName(names); //같은 이름이 있을 경우 + } catch (IllegalArgumentException e) { + getNames(); + } + return names; + } + + private void nameRange(String[] names) { + for (String name : names) { + if (name.length() > 5) { + System.out.print("글자가 5자리 아래여야만함"); + throw new IllegalArgumentException(); + } + } + } + + private void sameName(String[] names) { + List check = new ArrayList<>(); + for (String name : names) { + if (check.contains(name)) { + System.out.print("중복이름 X"); + throw new IllegalArgumentException(); + } else { + check.add(name); + } + } + } + + public int getRound() { + System.out.print("시도할 회수는 몇회인가요?"); + String inputround = sc.next(); + int round = 0; + try { + round = Integer.parseInt(inputround); + } catch (IllegalArgumentException e) { + System.out.print("숫자나 입력하세여"); + getRound(); + } + return round; + } + +} \ No newline at end of file diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 0000000..b47f642 --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,29 @@ +package racingcar.view; + +import racingcar.model.Car; + +import java.util.ArrayList; +import java.util.List; + +public class OutputView { + + public void round(List cars) { + for (Car car : cars) { + System.out.print(car.getName()); + System.out.print(" : "); + System.out.println("-".repeat(car.getPosition())); + } + System.out.println(); + } + + public void result(List cars, int firstPrize) { + System.out.print(""); + List winner = new ArrayList<>(); + for (int n = 0; n < cars.size(); n++) { + if (cars.get(n).getPosition() == firstPrize) { + winner.add(cars.get(n).getName()); + } + } + System.out.println(String.join(", ", winner)); + } +} \ No newline at end of file diff --git a/src/test/java/racingcar/model/CarTest.java b/src/test/java/racingcar/model/CarTest.java new file mode 100644 index 0000000..38c532f --- /dev/null +++ b/src/test/java/racingcar/model/CarTest.java @@ -0,0 +1,12 @@ +package racingcar.model; + +import org.junit.jupiter.api.Test; + +class CarTest { + + @Test + void move() { + Car car = new Car("June", 0); + System.out.println(car.getPosition()); + } +} \ No newline at end of file