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/RacingMain.java b/src/main/java/controller/RacingMain.java new file mode 100644 index 0000000..9ec9774 --- /dev/null +++ b/src/main/java/controller/RacingMain.java @@ -0,0 +1,22 @@ +package controller; + +import view.InputView; +import view.OutputView; +import domain.RacingGame; + +import java.io.IOException; + +public class RacingMain { + + public static void main(String[] args) throws IOException { + final var carNames = InputView.getCarNames(); + final var tryCount = InputView.getTryCount(); + + final var racingGame = new RacingGame(carNames, tryCount); + OutputView.printAnnouncement(); + racingGame.race(); + + OutputView.printWinners(racingGame.getWinners()); + + } +} diff --git a/src/main/java/domain/RacingGame.java b/src/main/java/domain/RacingGame.java new file mode 100644 index 0000000..f705ed7 --- /dev/null +++ b/src/main/java/domain/RacingGame.java @@ -0,0 +1,80 @@ +package domain; + +import view.OutputView; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.random.RandomGenerator; + +public class RacingGame { + String[] carNames; + String[] tmpCarNames; + int carCnt; + int tryCount; + int[] carMoveRecord; + + public RacingGame(String str, int cnt) { + this.tmpCarNames = str.split(","); + carNames = nameError(); + this.carCnt = carNames.length; + this.tryCount = cnt; + carMoveRecord = new int[carCnt]; + for(int i = 0; i < carCnt; i++) + { + carMoveRecord[i] = 0; + } + } + + public void race() { + for (int i = 0; i < tryCount; i++) + { + getRandomForCarMove(); + OutputView.moveCarResult(carNames, carMoveRecord); + } + getWinners(); + } + + public void getRandomForCarMove() + { + for(int i = 0; i < carCnt; i++) { // 전진: true + if (canMove(RandomGenerator.getDefault().nextInt(10))) { + carMoveRecord[i]++; + } + } + } + + public boolean canMove(int num) + { + return num >= 4; + } + + public List getWinners() { + int winnerRecord = Arrays.stream(carMoveRecord).max().getAsInt(); + List winnerName = new ArrayList(); + + for (int i = 0; i < carMoveRecord.length; i++) + { + if (winnerRecord == carMoveRecord[i]) + { + winnerName.add(carNames[i]); + } + } + return winnerName; + } + + public String[] nameError() + { + int idx = 0; + List validCarNames = new ArrayList<>(); + for (String s : tmpCarNames) + { + if (s.length() <= 5) // 길이 5이하만 자동차 이름 등록 + { + validCarNames.add(s); + } + } + return validCarNames.toArray(new String[0]); + } + +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..e79e593 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,20 @@ +package view; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class InputView { + static BufferedReader Console = new BufferedReader(new InputStreamReader(System.in)); + public static String getCarNames() throws IOException { + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + return Console.readLine(); + } + + public static int getTryCount() throws IOException { + System.out.println("시도할 회수는 몇회인가요?"); + String str = Console.readLine(); + return Integer.parseInt(str); + } + +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 0000000..9f68a60 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,37 @@ +package view; + +import java.util.List; + +public class OutputView { + + public static void printAnnouncement(){ + System.out.println("실행 결과"); + } + public static void moveCarResult(String[] carNames, int[] carMoveRecord) { + int idx = 0; + for(String s : carNames) + { + System.out.print(s + " : "); + String result = "-".repeat(carMoveRecord[idx++]); + System.out.println(result); + } + System.out.print("\n"); + } + public static void printWinners(List winners) { + boolean comma = false; + for(String s : winners) + { + if(comma) + { + System.out.println(", "); + } + else if(!comma) + { + comma = true; + } + System.out.print(s); + } + System.out.println("가 최종 우승했습니다."); + } + +}