diff --git a/src/main/java/Car.java b/src/main/java/Car.java new file mode 100644 index 000000000..9fc5f9c62 --- /dev/null +++ b/src/main/java/Car.java @@ -0,0 +1,34 @@ +public class Car { + private String name; + private int position; + + public Car() { + } + + public Car(String name) { + this.name = name; + this.position = 0; + } + + public Car(String name, int position) { + this.name = name; + this.position = position; + } + + public void progress(int randomGenerate) { + if(randomGenerate >=4) movePosition(); + } + + + public int getPosition() { + return position; + } + + public String getName() { + return name; + } + + public void movePosition() { + this.position+=1; + } +} diff --git a/src/main/java/GameStart.java b/src/main/java/GameStart.java new file mode 100644 index 000000000..eb1a18e4c --- /dev/null +++ b/src/main/java/GameStart.java @@ -0,0 +1,18 @@ +import java.util.Arrays; +import java.util.Scanner; + +public class GameStart { + public static boolean validate(String input) { + if(input.length() > 5) return false; + return true; + } + + public String[] input(String s) { + String[] split = s.split(","); + Arrays.stream(split) + .filter(x->validate(x)) + .findAny() + .orElseThrow(()-> new IllegalArgumentException("5 글자 미만이어야합니다.")); + return split; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 000000000..c84945450 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,23 @@ +import java.util.List; +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + Racing racing = new Racing(); + Scanner scanner = new Scanner(System.in); + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + String input = scanner.nextLine(); + System.out.println("시도할 회수는 몇회인가요?"); + int game = scanner.nextInt(); + List cars = racing.start(input,game); + + boolean play = true; + while(play){ + play = racing.play(); + } + + Result.printResult(cars); + + + } +} diff --git a/src/main/java/Racing.java b/src/main/java/Racing.java new file mode 100644 index 000000000..00b413417 --- /dev/null +++ b/src/main/java/Racing.java @@ -0,0 +1,56 @@ +import java.util.*; + + +public class Racing { + List cars; + int game; + + public Racing() { + this.cars = new ArrayList<>(); + this.game = 0; + } + + public Racing(List cars, int game) { + this.cars = cars; + this.game = game; + } + + public List start(String input, int game){ + GameStart gameStart = new GameStart(); + String[] split = gameStart.input(input); + for(String s : split){ + this.cars.add(new Car(s)); + } + + this.game = game; + return this.cars; + } + + public static int randomGenerate() { + Random random = new Random(); + int ran = random.nextInt(9); + return ran; + } + + public List getCars() { + return cars; + } + + public int getGame() { + return game; + } + + private boolean consumeGame(){ + if(getGame() == 0) { + return false; + } + cars.stream().forEach(car-> car.progress(Racing.randomGenerate())); + Result.printProgreeBar(this.cars); + this.game-=1; + return true; + } + + public boolean play() { + return consumeGame(); + } +} diff --git a/src/main/java/Result.java b/src/main/java/Result.java new file mode 100644 index 000000000..0036951b3 --- /dev/null +++ b/src/main/java/Result.java @@ -0,0 +1,32 @@ +import java.util.*; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.groupingBy; + +public class Result { + public static List endGame(List cars) { + cars.sort(Comparator.comparing(Car::getPosition).reversed()); + List carList = new ArrayList<>(); + carList.add(cars.get(0)); + for(int i=1;i< cars.size();i++){ + if(cars.get(i-1).getPosition() != cars.get(i).getPosition()){ + break; + } + carList.add(cars.get(i)); + } + return carList; + } + + public static void printProgreeBar(List cars){ + for(int i=0;i cars){ + List result = endGame(cars); + System.out.print("우승자는 "); + result.stream().forEach(x-> System.out.print(x.getName() + " ")); + } +} diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java new file mode 100644 index 000000000..d3f53ec83 --- /dev/null +++ b/src/test/java/CarTest.java @@ -0,0 +1,15 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CarTest { + + @Test + void progress_over_4(){ + Racing racing = new Racing(); + int position = 3; + Car car = new Car("pobi", position); + car.progress(racing.randomGenerate()); + assertEquals(car.getPosition() , position+1); + } +} diff --git a/src/test/java/GameStartTest.java b/src/test/java/GameStartTest.java new file mode 100644 index 000000000..5e9dfa886 --- /dev/null +++ b/src/test/java/GameStartTest.java @@ -0,0 +1,28 @@ +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class GameStartTest { + + + @Test + void car_name_split(){ + GameStart gs = new GameStart(); + String[] str = gs.input("pobi,crong,honux"); + assertEquals(str[0], "pobi"); + assertEquals(str[1], "crong"); + assertEquals(str[2], "honux"); + } + + + @Test + void car_name_under_5(){ + String input1 = "crong"; + String input2 = "crongs"; + + assertTrue(GameStart.validate(input1)); + assertTrue(!GameStart.validate(input2)); + } + +} diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java new file mode 100644 index 000000000..330365550 --- /dev/null +++ b/src/test/java/RacingTest.java @@ -0,0 +1,31 @@ +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +public class RacingTest { + + @Test + void randomGenerate_random_1_9(){ + int num = Racing.randomGenerate(); + assertTrue(num <= 9 ); + assertTrue(num >= 0 ); + } + + @Test + @DisplayName("Racing의 this.game은 1이 줄어들고, progress는 진행한다.") + void play(){ + Racing racing = new Racing(); + List cars = racing.start("pobi,crong,honux",4); + racing.play(); + assertEquals(racing.getGame(),3); + assertEquals(cars.get(0).getName(), "pobi"); + assertEquals(cars.get(1).getName(), "crong"); + assertEquals(cars.get(2).getName(), "honux"); + } + + + +} diff --git a/src/test/java/ResultTest.java b/src/test/java/ResultTest.java new file mode 100644 index 000000000..83bba4155 --- /dev/null +++ b/src/test/java/ResultTest.java @@ -0,0 +1,24 @@ +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +class ResultTest { + + @Test + void printResult(){ + + } + + @Test + void endGame(){ + List cars = Arrays.asList(new Car("pobi", 4), new Car("crong", 2), new Car("honux", 4)); + List result = Result.endGame(cars); + assertEquals(result.get(0).getName(), "pobi"); + assertEquals(result.get(0).getPosition(), 4); + assertEquals(result.get(1).getName(), "honux"); + assertEquals(result.get(1).getPosition(), 4); + } + +} \ No newline at end of file