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
13 changes: 0 additions & 13 deletions src/main/java/racingGame/controller/Main.java

This file was deleted.

14 changes: 0 additions & 14 deletions src/main/java/racingGame/model/Car.java

This file was deleted.

24 changes: 0 additions & 24 deletions src/main/java/racingGame/util/ResultView.java

This file was deleted.

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

import racinggame.model.Car;
import racinggame.model.RacingGame;
import racinggame.model.WinnerGenerator;
import racinggame.util.InputView;
import racinggame.util.ResultView;

import java.util.List;

public class Main {
public static void main(String[] args) {
RacingGame racingGame = new RacingGame();
WinnerGenerator winnerGenerator = new WinnerGenerator();

racingGame.settingCar(InputView.inputCar()); //main 에서도 변수를 활용하자 String carNames = InputView.getCarNames(); 처럼
List<Car> finishedCars = racingGame.tryAllCarGame(InputView.inputTry()); // 여기서도 InputView.inputTry를 애당초 int tryNo = InputView.getTryNo(); 이런 식으로 활용 했었어야 했다.
ResultView.printResult(finishedCars);
ResultView.printWinner(winnerGenerator.makeWinners(finishedCars));

//느낀점 내가 짠 main은 작성한 메소드를 불러오기에만 급급했다. main 내에서도 변수에 할당 하면 좀더 편했을 것 같다.
}
}
18 changes: 18 additions & 0 deletions src/main/java/racinggame/javajigi_racingGame/RacingMain.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package racinggame.javajigi_racingGame;

import racinggame.javajigi_racingGame.domain.RacingGame;
import racinggame.javajigi_racingGame.dto.RacingResult;
import racinggame.javajigi_racingGame.view.InputView;
import racinggame.javajigi_racingGame.view.ResultView;

public class RacingMain {
public static void main(String[] args) {
String carNames = InputView.getCarNames();
int tryNo = InputView.getTryNo();

RacingGame racingGame = new RacingGame(carNames);
RacingResult result = racingGame.racing(tryNo);

ResultView.printResult(result);
}
}
59 changes: 59 additions & 0 deletions src/main/java/racinggame/javajigi_racingGame/domain/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package racinggame.javajigi_racingGame.domain;

import java.util.Objects;

import racinggame.javajigi_racingGame.dto.CarDto;
import racinggame.javajigi_racingGame.utils.StringUtils;

public class Car {
private static final int FORWARD_NUM = 4;

private String name;
private int position = 0;

public Car(String name) {
if (StringUtils.isBlank(name)) {
throw new IllegalArgumentException("자동차 이름은 값이 존재해야 합니다.");
}
this.name = name.trim();
}

public int getPosition() {
return position;
}

public String getName() {
return name;
}

public void move(int number) {
if (number >= FORWARD_NUM) {
position++;
}
}
public CarDto toCarDto() {
return new CarDto(name, position);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Car car = (Car) o;
return position == car.position &&
Objects.equals(name, car.name);
}

@Override
public int hashCode() {
return Objects.hash(name, position);
}

@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", position=" + position +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package racinggame.javajigi_racingGame.domain;

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

import racinggame.javajigi_racingGame.dto.RacingResult;
import racinggame.javajigi_racingGame.utils.RandomValueGenerator;
import racinggame.javajigi_racingGame.utils.StringUtils;

public class RacingGame {
private static final int MAX_BOUND = 10;

private List<Car> cars = new ArrayList<>();

public RacingGame(String inputNames) {
if (StringUtils.isBlank(inputNames)) {
throw new IllegalArgumentException("사용자 이름은 빈 값이 될 수 없습니다.");
}
this.cars = createCars(inputNames);
}

private static List<Car> createCars(String inputNames) {
List<Car> cars = new ArrayList<>();
String[] names = inputNames.split(",");
for (String name : names) {
cars.add(new Car(name));
}
return cars;
}

public RacingResult racing(int tryNo) {
for (int i = 0; i < tryNo; i++) {
racingPerTry();
}
return getResult();
}

private void racingPerTry() {
for (Car car: cars) {
car.move(RandomValueGenerator.nextInt(MAX_BOUND));
}
}

private RacingResult getResult() {
RacingResult result = new RacingResult();
for (Car car : cars) {
result.add(car.toCarDto());
}
return result;
}
}
58 changes: 58 additions & 0 deletions src/main/java/racinggame/javajigi_racingGame/dto/CarDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package racinggame.javajigi_racingGame.dto;

import java.util.Objects;
import java.util.stream.IntStream;

public class CarDto {
private static final String STATUS_BAR = "-";

private String name;
private int position;

public CarDto(String name, int position) {
this.name = name;
this.position = position;
}

public String getName() {
return name;
}

public int getPosition() {
return position;
}

public boolean isMaxPosition(int maxPosition) {
return maxPosition == this.position;
}

public String createStatus() {
StringBuilder status = new StringBuilder();
IntStream.range(0, position).forEach(i -> {
status.append(STATUS_BAR);
});
return status.toString();
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CarDto carDto = (CarDto) o;
return position == carDto.position &&
Objects.equals(name, carDto.name);
}

@Override
public int hashCode() {
return Objects.hash(name, position);
}

@Override
public String toString() {
return "CarDto{" +
"name='" + name + '\'' +
", position=" + position +
'}';
}
}
54 changes: 54 additions & 0 deletions src/main/java/racinggame/javajigi_racingGame/dto/RacingResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package racinggame.javajigi_racingGame.dto;

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

public class RacingResult {
private static final String COMMA_SEPARATOR = ",";

private List<CarDto> cars = new ArrayList<>();

public void add(CarDto carDto) {
cars.add(carDto);
}

public List<CarDto> getCars() {
return cars;
}

public String createWinnerNames() {
return joinComma(getWinnerNames(getWinners(cars, maxPosition(cars))));
}

public static int maxPosition(List<CarDto> carDtos) {
int maxPosition = 0;
for (CarDto carDto: carDtos) {
if (maxPosition < carDto.getPosition()) {
maxPosition = carDto.getPosition();
}
}
return maxPosition;
}

public static List<CarDto> getWinners(List<CarDto> carDtos, int maxPosition) {
List<CarDto> winners = new ArrayList<>();
for (CarDto carDto: carDtos) {
if (carDto.isMaxPosition(maxPosition)) {
winners.add(carDto);
}
}
return winners;
}

public static List<String> getWinnerNames(List<CarDto> winners) {
List<String> winnerNames = new ArrayList<>();
for (CarDto carDto: winners) {
winnerNames.add(carDto.getName());
}
return winnerNames;
}

public static String joinComma(List<String> winnerNames) {
return String.join(COMMA_SEPARATOR, winnerNames);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package racinggame.javajigi_racingGame.utils;

import java.util.Random;

public class RandomValueGenerator {
private static final Random random = new Random();

public static int nextInt(int bound) {
return random.nextInt(bound);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package racinggame.javajigi_racingGame.utils;

public class StringUtils {
public static boolean isBlank(String value) {
if (value == null || value.isEmpty()) {
return true;
}
return value.trim().isEmpty();
}
}
17 changes: 17 additions & 0 deletions src/main/java/racinggame/javajigi_racingGame/view/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package racinggame.javajigi_racingGame.view;

import java.util.Scanner;

public class InputView {
private static Scanner scanner = new Scanner(System.in);

public static String getCarNames() {
System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).");
return scanner.nextLine();
}

public static int getTryNo() {
System.out.println("시도할 회수는 몇회 인가요?");
return scanner.nextInt();
}
}
14 changes: 14 additions & 0 deletions src/main/java/racinggame/javajigi_racingGame/view/ResultView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package racinggame.javajigi_racingGame.view;

import racinggame.javajigi_racingGame.dto.CarDto;
import racinggame.javajigi_racingGame.dto.RacingResult;

public class ResultView {
public static void printResult(RacingResult result) {
System.out.println("실행 결과");
for ( CarDto carDto: result.getCars() ) {
System.out.println(String.format("%s: %s", carDto.getName(), carDto.createStatus()));
}
System.out.println(String.format("%s가 최종 우승했습니다", result.createWinnerNames()));
}
}
Loading