Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import controller.RacingGameManager;

import java.io.IOException;

public class Application {
public static void main(String[] args) throws IOException {
RacingGameManager racingGameManager = new RacingGameManager();
racingGameManager.race();
}
}
7 changes: 0 additions & 7 deletions src/main/java/RacingMain.java

This file was deleted.

31 changes: 31 additions & 0 deletions src/main/java/controller/RacingGameManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package controller;

import domain.Cars;
import view.InputView;
import view.ResultView;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class RacingGameManager {
private final InputView inputView = new InputView();
private final ResultView resultView = new ResultView();

public void race() throws IOException {
String names = inputView.getCarNames();
Cars cars = new Cars(names);

int tryCount = inputView.getTryCount();
runGame(tryCount, cars);

resultView.printWinners(cars.getWinners());
}

void runGame(int tryCount, Cars cars) {
for (int i = 0; i < tryCount; i++) {
cars.moveAllCars();
resultView.printStatus(cars.getCars());
}
}
}
27 changes: 27 additions & 0 deletions src/main/java/domain/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package domain;

public class Car {
private static final int STANDARD_NUM = 4;
private final String carName;
private int position;

public Car(String carName) {
this.carName = carName;
this.position = 0;
}

public void move(int num) {
if (num >= STANDARD_NUM) {
position++;
}
}

public int getPosition() {
return position;
}


public String getCarName() {
return carName;
}
}
59 changes: 59 additions & 0 deletions src/main/java/domain/Cars.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package domain;

import java.util.ArrayList;
import java.util.List;

public class Cars {
private final List<Car> cars;

public Cars(String carNames) {
this.cars = addCars(carNames);
}

public List<Car> addCars(String carNames) {
String[] carNamesArray = carNames.split(",");
List<Car> cars = new ArrayList<>();
for (String carName : carNamesArray) {
cars.add(new Car(carName.trim()));
}
return cars;
}

public void moveAllCars() {
for (Car car : cars) {
car.move(generateRandomNumber());
}
}

private int generateRandomNumber() {
return (int) (Math.random() * 10);
}

public int findMaxPosition() {
int maxPosition = 0;
for (Car car : cars) {
int carPosition = car.getPosition();
if (carPosition > maxPosition) {
maxPosition = carPosition;
}
}
return maxPosition;
}


public List<String> getWinners() {
List<String> winners = new ArrayList<>();
for (Car car : cars) {
int carPosition = car.getPosition();
int maxPosition = findMaxPosition();
if (carPosition == maxPosition) {
winners.add(car.getCarName());
}
}
return winners;
}

public List<Car> getCars() {
return cars;
}
}
23 changes: 23 additions & 0 deletions src/main/java/view/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package view;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputView {
private static final String REQUEST_CAR_NAME = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).";
private static final String REQUEST_ATTEMPT_NUMBER = "시도할 회수는 몇회인가요?";

static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

public String getCarNames() throws IOException {
System.out.println(REQUEST_CAR_NAME);
return br.readLine();
}

public int getTryCount() throws IOException {
System.out.println(REQUEST_ATTEMPT_NUMBER);
return Integer.parseInt(br.readLine());
}

}
32 changes: 32 additions & 0 deletions src/main/java/view/ResultView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package view;

import domain.Car;

import java.util.List;

public class ResultView {
public static final String PRINT_FINAL_WINNER = "가 최종 우승했습니다.";

public void printStatus(List<Car> carsList) {
for (Car car : carsList) {
int currentPosition = car.getPosition();
String carName = car.getCarName();
System.out.print(carName + " : ");
printPosition(currentPosition);
}
System.out.println();
}

private void printPosition(int currenPosition) {
for (int i = 0; i < currenPosition; i++) {
System.out.print("-");
}
System.out.println();
}

public void printWinners(List<String> winners) {
String result = String.join(", ", winners);
System.out.println(result + PRINT_FINAL_WINNER);
}

}