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
5 changes: 4 additions & 1 deletion src/main/java/racingcar/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package racingcar;

import racingcar.controller.GameController;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
GameController gameController = new GameController();
gameController.startGame();
}
}
29 changes: 29 additions & 0 deletions src/main/java/racingcar/controller/GameController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package racingcar.controller;

import racingcar.domain.Car;
import racingcar.domain.RacingGame;
import racingcar.service.GameService;
import racingcar.view.InputGameView;
import racingcar.view.ResultGameView;

import java.util.List;
import java.util.stream.Collectors;

public class GameController {
private final GameService gameService=new GameService();
public void startGame(){
List<String> carNames= InputGameView.carNames();
int tryNum=InputGameView.tryNum();

RacingGame game= gameService.createGame(carNames,tryNum);
System.out.print("\n실행 결과");

while (!game.isFinished()){
gameService.playGame(game);
ResultGameView.midPrint(game.getCars());
}

ResultGameView.finalPrint(game.getWinner());

}
}
29 changes: 29 additions & 0 deletions src/main/java/racingcar/domain/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package racingcar.domain;

import java.util.List;

public class Car {
private String carName;
private int count;

public Car( String carName) {

if (carName.length() > 5) throw new IllegalArgumentException("잘못된 값을 입력하였습니다.");
this.carName = carName;
this.count = 0;
}

public void move(int randomValue) {
if (randomValue >= 4) count++;
}

public String getName() {
return carName;
}
public int getCount() {
return count;
}



}
45 changes: 45 additions & 0 deletions src/main/java/racingcar/domain/RacingGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package racingcar.domain;

import racingcar.view.InputGameView;
import java.util.*;
import java.util.stream.Collectors;

public class RacingGame {
private final List<Car> cars;
private int remainRounds;
private final Random random = new Random();
private InputGameView inputGameView;

public RacingGame(List<Car> cars, int remainRounds) {
this.cars = cars;
this.remainRounds = remainRounds;
}

public boolean isFinished(){
return remainRounds <= 0;
}

public void play(){
cars.forEach(car -> car.move(randomValue()));
remainRounds--;
}

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

public List<String> getWinner(){
int maxDistance=cars.stream()
.mapToInt(Car::getCount)
.max()
.orElse(0);
return cars.stream()
.filter(car -> car.getCount()==maxDistance)
.map(car -> car.getName())
.collect(Collectors.toList());
}

public int randomValue(){
return random.nextInt(10);
}
}
18 changes: 18 additions & 0 deletions src/main/java/racingcar/service/GameService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package racingcar.service;

import racingcar.domain.Car;
import racingcar.domain.RacingGame;

import java.util.List;
import java.util.stream.Collectors;

public class GameService {
public RacingGame createGame(List<String> carNames, int rounds){
List<Car> cars = carNames.stream().map(Car::new).collect(Collectors.toList());
return new RacingGame(cars, rounds);
}

public void playGame(RacingGame racingGame){
racingGame.play();
}
}
22 changes: 22 additions & 0 deletions src/main/java/racingcar/view/InputGameView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package racingcar.view;

import camp.nextstep.edu.missionutils.Console;

import java.util.Arrays;
import java.util.List;

public class InputGameView {
public static List<String> carNames(){
System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)");
return Arrays.stream(Console.readLine().split(","))
.map(String::trim)
.toList();
}

public static int tryNum(){
System.out.println("시도할 횟수는 몇 회인가요?");
return Integer.parseInt(Console.readLine());
}

}

22 changes: 22 additions & 0 deletions src/main/java/racingcar/view/ResultGameView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

package racingcar.view;

import racingcar.domain.Car;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ResultGameView {

public static void midPrint(List<Car>cars){
System.out.println();
cars.forEach(car->
System.out.printf("%s : %s\n", car.getName(),"-".repeat(car.getCount()))
);
}

public static void finalPrint(List<String> carNames){
System.out.printf("최종 우승자 : %s", String.join(", ",carNames));
}
}