Skip to content

๐Ÿš€ 5๋‹จ๊ณ„ - ์ž๋™์ฐจ ๊ฒฝ์ฃผ(๋ฆฌํŒฉํ† ๋ง) #6096

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: lee-yugyeong
Choose a base branch
from
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
12 changes: 4 additions & 8 deletions src/main/java/ApplicationMain.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import java.util.List;
import controller.GameController;

public class ApplicationMain {
public static void main(String[] args) {

List<String> carNames = InputView.getCarName();
int tryCount = InputView.getTryCount();
InputView.closeScanner();

Racing racing = new Racing(carNames, tryCount);

racing.start();
GameController gameController = new GameController();

gameController.play();
}

}
32 changes: 0 additions & 32 deletions src/main/java/Car.java

This file was deleted.

66 changes: 0 additions & 66 deletions src/main/java/Racing.java

This file was deleted.

9 changes: 0 additions & 9 deletions src/main/java/RandomUtil.java

This file was deleted.

22 changes: 0 additions & 22 deletions src/main/java/ResultView.java

This file was deleted.

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

import domain.Racing;
import java.util.List;
import view.InputView;
import view.ResultView;

public class GameController {
public void play() {
List<String> carNames = InputView.getCarName();
int tryCount = InputView.getTryCount();
InputView.closeScanner();

Racing racing = new Racing(carNames);

ResultView.printExecuteResult();

for (int i = 0; i < tryCount; i++) {
racing.start();
ResultView.printRaceRound(racing);
}

ResultView.printWinner(racing);

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


public class Car {
private final static int MOVE_BOUND = 4;
private final static int MOVE_STEP = 1;

private final CarName name;
private final Position position;

public Car(String name) {
this.name = new CarName(name);
this.position = new Position(0);
}

public Car(String name, int position) {
this.name = new CarName(name);
this.position = new Position(position);
}

/**
* ์ž๋™์ฐจ๋ฅผ ์•ž์œผ๋กœ ์ „์ง„์‹œํ‚ต๋‹ˆ๋‹ค.
*/
public void move(int randomNo) {
if (randomNo >= MOVE_BOUND) {
this.position.add(MOVE_STEP);
}
}

public int maxComparedTo(int maxScore) {
return this.position.maxComparedTo(maxScore);
}
Comment on lines +30 to +32

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด๊ฒƒ์€ Comparable ๋กœ ํ’€์–ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


public String getName() {
return name.getName();
}

public Boolean isSame(int input) {
return this.position.isSame(input);
}
Comment on lines +38 to +40

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.compareTo() ์˜ค๋ฒ„๋ผ์ด๋“œ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.


public int getPosition() {
return position.getPosition();
}
}
23 changes: 23 additions & 0 deletions src/main/java/domain/CarName.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package domain;

public class CarName {

private static final int MAX_LENGTH = 5;
private final String value;

public CarName(String value) {
if (value == null || value.trim().isEmpty()) {
throw new IllegalArgumentException("์ž๋™์ฐจ ์ด๋ฆ„์€ ๋น„์–ด ์žˆ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค");
}

if (value.trim().length() > 5) {
throw new IllegalArgumentException("์ž๋™์ฐจ ์ด๋ฆ„์€ 5์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค");
}

this.value = value;
}

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

public class Position {
private int value;

public Position(int value) {
if (value < 0) {
throw new IllegalArgumentException("์œ„์น˜ ๊ฐ’์€ ์Œ์ˆ˜๊ฐ€ ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค");
}
this.value = value;
}

public void add(int moveStep) {
this.value += moveStep;
}

public int maxComparedTo(int input) {
return Math.max(this.value, input);
}

public Boolean isSame(int input) {
return value == input;
}

public int getPosition() {
return value;
}
}
33 changes: 33 additions & 0 deletions src/main/java/domain/Racing.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package domain;

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

public class Racing {
private final List<Car> carList = new ArrayList<>(); // ์ž๋™์ฐจ ๋ฆฌ์ŠคํŠธ

/**
* @param carNames
* ๋ ˆ์ด์‹ฑ ์ดˆ๊ธฐํ™”
*/
public Racing(List<String> carNames) {
for (String name : carNames) {
carList.add(new Car(name));
}
}

/**
* ๋ ˆ์ด์‹ฑ ์‹œ์ž‘
*/
public void start() {
for (Car car : carList) {
int randomNo = RandomUtil.generate();
car.move(randomNo);
}
}

public List<Car> getCarList() {
return carList;
}
}
27 changes: 27 additions & 0 deletions src/main/java/domain/Winners.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package domain;

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

public class Winners {

/**
* ์šฐ์Šน์ž๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
* @param cars
* @return
*/
public static List<Car> findWinners(List<Car> cars) {

int maxScore = 0;
for (Car car : cars) {
maxScore = car.maxComparedTo(maxScore);
}

int finalMaxScore = maxScore;

return cars.stream()
.filter(car -> car.isSame(finalMaxScore))
.collect(Collectors.toList());
}
}
11 changes: 11 additions & 0 deletions src/main/java/util/RandomUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package util;

import java.util.Random;

public class RandomUtil {
private static final int BOUND = 10;

public static int generate() {
return new Random().nextInt(BOUND);
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
package view;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/view/ResultView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package view;

import domain.Car;
import domain.Racing;
import domain.Winners;
import java.util.List;
import java.util.stream.Collectors;

public class ResultView {

public static void printRaceRound(Racing racing) {
for (Car car : racing.getCarList()) {
System.out.println(car.getName() + " : " + "-".repeat(car.getPosition()));
}
System.out.println("\n");
}

public static void printExecuteResult() {
System.out.println("์‹คํ–‰ ๊ฒฐ๊ณผ");
}

public static void printWinner(Racing racing) {
List<Car> winners = Winners.findWinners(racing.getCarList());

String winnerNames = winners.stream()
.map(Car::getName)
.collect(Collectors.joining(", "));

System.out.println(winnerNames + "๊ฐ€ ์ตœ์ข… ์šฐ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค.");
}
}
Loading