Skip to content
Closed
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
2 changes: 2 additions & 0 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import java.util.Random;

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

Expand Down
68 changes: 0 additions & 68 deletions src/main/java/racingcar/Car.java

This file was deleted.

85 changes: 0 additions & 85 deletions src/main/java/racingcar/CarList.java

This file was deleted.

28 changes: 0 additions & 28 deletions src/main/java/racingcar/Game.java

This file was deleted.

20 changes: 0 additions & 20 deletions src/main/java/racingcar/RacingCarApplication.java

This file was deleted.

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

import java.util.Objects;

public class Car {
public static final int MAX_BOUND = 10;
public static final int FORWARD_NUM = 4;
private final Name name;
private Position position = new Position();

public Car(final String name) {
this(name , 0);
}

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

public Position getPosition() {
return position;
}

public void move(RandomNumber randomNumber) {
if (randomNumber.isMovable()) {
position.move();
}
}

public boolean isWinner(int maxPosition) {
return position.samePosition(maxPosition);
}

public int max(int maxPosition) {
if (position.isGreaterThan(maxPosition)) {
return position.getPosition();
}

return maxPosition;
}

public Name getName() {
return this.name;
}

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

@Override
public int hashCode() {
return Objects.hash(name, position);
}
}
50 changes: 50 additions & 0 deletions src/main/java/racingcar/javajigi/domain/Cars.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package racingcar.javajigi.domain;

import racingcar.javajigi.utils.RandomUtil;

import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Cars {
private final List<Car> cars;
private Random random = new Random();
public Cars(List<Car> cars) {
this.cars = Collections.unmodifiableList(cars);
}

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

public void moveAll() {
for (Car car : cars) {
RandomNumber randomNumber = new RandomNumber(RandomUtil.getRandomZeroToNine());
car.move(randomNumber);
}
}

public Winners findWinner() {
return filterWinners(getMaxPosition());
}

public Winners filterWinners(int maxPosition) {
Winners winners = new Winners();
for (Car car : cars) {
if (car.isWinner(maxPosition)) {
winners.add(car);
}
}

return winners;
}

public int getMaxPosition() {
int maxPosition = 0;
for (Car car : cars) {
maxPosition = car.max(maxPosition);
}

return maxPosition;
}
}
36 changes: 36 additions & 0 deletions src/main/java/racingcar/javajigi/domain/Name.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package racingcar.javajigi.domain;

import java.util.Objects;

public class Name {
public static final int NAME_LENGTH = 5;
private final String name;

public Name(String name) {
if ("".equals(name)) {
throw new IllegalArgumentException("자동차는 이름을 갖고 있어야 합니다.");
}
if (name.length() > NAME_LENGTH) {
throw new IllegalArgumentException("자동차 이름의 길이는 5이하여야 합니다.");
}
this.name = name;
}

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

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

@Override
public String toString() {
return name;
}
}
Loading