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/RacingError.java b/src/main/java/controller/RacingError.java new file mode 100644 index 0000000..1b9edb6 --- /dev/null +++ b/src/main/java/controller/RacingError.java @@ -0,0 +1,32 @@ +package controller; + +import java.util.Arrays; + + +public class RacingError { + public static boolean nameError(String[] carnames) { + String[] b = new String[carnames.length]; + String target = "-1"; + + for(int i = 0; i < carnames.length; ++i) { + b[i] = RacingError.namelenth(carnames[i]); + } + + boolean found = Arrays.asList(b).contains(target); + + return found; + } + + public static String namelenth(String carname) { + if(carname.length() > 5) return "-1"; + return "1"; + } + + public static boolean tryNumberError(int tryNumbers) { + boolean number = false; + + if(tryNumbers == 0) number = true; + + return number; + } +} diff --git a/src/main/java/controller/RacingGame.java b/src/main/java/controller/RacingGame.java new file mode 100644 index 0000000..37cc5fe --- /dev/null +++ b/src/main/java/controller/RacingGame.java @@ -0,0 +1,70 @@ +package controller; + +import view.Output; + +import java.util.*; + +public class RacingGame { + + public static int[] racingStart(String[] carNames, int tryNumbers) { + int[] saveNumbers = new int[tryNumbers]; + + for(int i = 0; i < tryNumbers; ++i) { + saveNumbers = randomGo(saveNumbers, carNames.length); + Output.racingResultO(carNames, saveNumbers); + } + + return saveNumbers; + } + public static int[] randomGo(int[] saveNumbers, int len) { + + for(int i = 0; i < len; ++i) { + saveNumbers[i] = RacingGame.saveResult(saveNumbers[i]); + } + + return saveNumbers; + } + + public static int random() { + Random random = new Random(); + int number = random.nextInt(9); + + if (number >= 4) return 1; + return -1; + } + + public static int saveResult(int saveNumber) { + int b = RacingGame.random(); + + if(b == 1) { + return ++saveNumber; + } + + return saveNumber; + } + + public static List gameWinner(int[] saveNumbers, String[] carNames) { + int max = 0, c = 0; + String[] winner = new String[carNames.length]; + + for (int saveNumber : saveNumbers) { + max = Math.max(max, saveNumber); + } + for (int i = 0; i < carNames.length; i++) { + winner[i] = RacingGame.gameWinnerName(max, saveNumbers[i], carNames[i]); + } + + List gamewinner = new ArrayList<>(Arrays.asList(winner)); + gamewinner.removeIf(Objects::isNull); + + return gamewinner; + } + + public static String gameWinnerName(int max, int saveNumber, String carName) { + if(max == saveNumber){ + return carName; + } + return null; + } + +} diff --git a/src/main/java/controller/RacingMain.java b/src/main/java/controller/RacingMain.java new file mode 100644 index 0000000..31f5631 --- /dev/null +++ b/src/main/java/controller/RacingMain.java @@ -0,0 +1,28 @@ +package controller; + +import model.Car; +import model.CarFactory; +import view.Input; +import view.Output; + +import java.util.List; + +public class RacingMain { + + public static void main(String[] args) { + /*var carFactory = new CarFactory(); + var cars = carFactory.create();*/ + + String[] carNames = Input.carNameI(); + int tryNumbers = Input.tryNumbersI(); + + int[] saveNumbers = RacingGame.racingStart(carNames, tryNumbers); + + Output.racingResultO(carNames, saveNumbers); + + List gamewinner = RacingGame.gameWinner(saveNumbers, carNames); + + Output.racingWinner(gamewinner); + } + //입력, 클래스랑 메소드 호출 +} diff --git a/src/main/java/model/Car.java b/src/main/java/model/Car.java new file mode 100644 index 0000000..8b62352 --- /dev/null +++ b/src/main/java/model/Car.java @@ -0,0 +1,15 @@ +package model; + +public class Car { + private String _name; + private int _move; + + public Car(String name) { + _name = name; + _move = 0; + } + + public void move() { + + } +} diff --git a/src/main/java/model/CarFactory.java b/src/main/java/model/CarFactory.java new file mode 100644 index 0000000..e09cb9a --- /dev/null +++ b/src/main/java/model/CarFactory.java @@ -0,0 +1,24 @@ +package model; + +import model.Car; +import view.Output; + +import java.util.Scanner; + +public class CarFactory { + public Car[] create() { + Output.carNameO(); + + Scanner sc = new Scanner(System.in); + String str = sc.next(); + String[] names = str.split(","); + Car[] cars = new Car[names.length]; + + for (int i = 0; i < names.length; ++i) { + cars[i] = new Car(names[i]); + } + + return cars; + } + +} diff --git a/src/main/java/view/Input.java b/src/main/java/view/Input.java new file mode 100644 index 0000000..c00feb0 --- /dev/null +++ b/src/main/java/view/Input.java @@ -0,0 +1,38 @@ +package view; + +import controller.RacingError; + +import java.util.Scanner; + +public class Input { + public static String[] carNameI() { + Output.carNameO(); + + Scanner sc = new Scanner(System.in); + String str = sc.next(); + String[] carNames = str.split(","); + + boolean b = RacingError.nameError(carNames); + if(b) { + Output.carNameError(); + Input.carNameI(); + } + + return carNames; + } + + public static int tryNumbersI() { + Output.tryNumbersO(); + + Scanner sc = new Scanner(System.in); + int tryNumbers = sc.nextInt(); + + if(RacingError.tryNumberError(tryNumbers)) { + Output.tryNumbersError(); + Input.tryNumbersI(); + } + + return tryNumbers; + } + +} diff --git a/src/main/java/view/Output.java b/src/main/java/view/Output.java new file mode 100644 index 0000000..ff8e3b1 --- /dev/null +++ b/src/main/java/view/Output.java @@ -0,0 +1,50 @@ +package view; + +import java.util.List; + +public class Output { + + public static void carNameO() { + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + } + + public static void carNameError() { + System.out.println("경주할 자동차 이름은 5글자 이하만 가능합니다."); + } + + public static void tryNumbersO() { + System.out.println("시도할 횟수는 몇회인가요?"); + } + + public static void tryNumbersError() { + System.out.println("시도할 횟수는 0번 이상만 가능합니다."); + } + + public static void saveResultO(int go) { + for(int i = 0; i < go; ++i) { + System.out.print("-"); + } + System.out.println(); + } + + public static void racingResultO(String[] carNames, int[] saveNumbers) { + int i = 0; + for(String str : carNames) { + System.out.print(str + " : "); + saveResultO(saveNumbers[i++]); + } + System.out.println(); + } + + public static void racingWinner(List gamewinner) { + for(int i = 1; i < gamewinner.size(); i += 2) { + gamewinner.add(i, ", "); + } + for(int i = 0; i < gamewinner.size(); ++i) { + System.out.print(gamewinner.get(i)); + } + System.out.println("가 최종 우승했습니다."); + } + + +} diff --git a/src/test/java/RacingGameTest.java b/src/test/java/RacingGameTest.java new file mode 100644 index 0000000..4b90923 --- /dev/null +++ b/src/test/java/RacingGameTest.java @@ -0,0 +1,16 @@ +import org.junit.jupiter.api.Test; + +public class RacingGameTest { + + @Test + //전진 조건 테스트 + void racingCarGoOrStop() { + + } + + @Test + //승자 찾기 + void racingWinnerFound() { + + } +} diff --git a/src/test/java/RacingMainTest.java b/src/test/java/RacingMainTest.java new file mode 100644 index 0000000..357fa64 --- /dev/null +++ b/src/test/java/RacingMainTest.java @@ -0,0 +1,18 @@ +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class RacingMainTest { + //@DisplayName("") + + @Test + //기능 >>> 자동차 이름입력시 저장, 시도 횟수만큼 전진가능성 부여, 입출력 테스트 + void 기능_테스트() { + + } + + @Test + //예외 >>> try가 0일경우, 이름이 5자 초과일 경우 + void 예외_테스트() { + + } +}