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
14 changes: 13 additions & 1 deletion src/main/java/RacingMain.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
import controller.RacingGame;
import view.InputView;
import view.OutputView;

public class RacingMain {

public static void main(String[] args) {
// TODO: MVC 패턴을 기반으로 자동차 경주 미션 구현해보기
System.out.println("Hello, World!");

final var carNames = InputView.getCarNames();
final var tryCount = InputView.getTryCount();

final var racingGame = new RacingGame(carNames, tryCount);
racingGame.race();

OutputView.printWinners(racingGame.getWinners());

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

import java.util.ArrayList;
import java.util.Random;

import model.Car;
import model.RacingCars;

public class RacingGame {
final private static String runMessage = "실행 결과";
final private static int RANDOM_NUMBER_RANGE = 10;
final private static int MOVE_MINIMUM = 4;
private static RacingCars cars;
private static int tryCount;

// 생성자
public RacingGame(ArrayList<String> carNames, int tryCount) {
cars = new RacingCars(carNames);
this.tryCount = tryCount;
}
// 함수
public static int getTryCount() {
return tryCount;
}
// 랜덤 숫자 리턴
private int getRandomNumber() {
return new Random().nextInt(RANDOM_NUMBER_RANGE);
}
// 레이스 진행
private void racing() {
for (Car c : cars.getList()) {
int randomNum = getRandomNumber();
if(randomNum >= MOVE_MINIMUM)
c.move();
c.printNow();
}
System.out.println();
}
// 우승자 업데이트
private void updateResult() {
for(Car c : cars.getList()) {
if(c.getDist() == tryCount) {
c.win();
}
}
}
// 레이스 시작
public void race() {
System.out.println(runMessage);
for(int i=0;i<tryCount;i++) {
racing();
}
updateResult();
}
// 우승자목록 리턴
public ArrayList<String> getWinners() {
ArrayList<String> results = new ArrayList<>();
for(Car c : cars.getList()) {
if(c.getResult())
results.add(c.getCarName());
}

return results;

}


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

public class Car {

final private String carName;
private int dist = 0;
private boolean winCheck = false;

// 생성자
public Car(String carName) {
this.carName = carName;
}

// 함수
public String getCarName() {
return carName;
}
public void move() {
dist++;
}
public int getDist() {
return dist;
}
public void printNow() {
System.out.print(carName + " : ");
for(int i=0;i<dist;i++) {
System.out.print("-");
}
System.out.println();
}
public void win() {
winCheck = true;
}
public boolean getResult() {
return winCheck;
}

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

import java.util.ArrayList;

public class RacingCars {

public static ArrayList<Car> cars = new ArrayList<>();

public RacingCars(ArrayList<String> carNames) {
for(String s : carNames) {
cars.add(new Car(s));
}
}

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class InputView {

final private static String startMessage = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).";
final private static String str1 = "시도할 횟수는 몇회인가요?";
final private static Scanner in = new Scanner(System.in);

// 자동차 이름 입력받기
public static ArrayList<String> getCarNames() {
System.out.println(startMessage);
String input = in.next();
String[] carNames = input.split(",");

ArrayList<String> nameList = new ArrayList<>();
nameList.addAll(Arrays.asList(carNames));

return nameList;
}
// 시도 횟수 입력받기
public static int getTryCount() {
System.out.println(str1);

int tryCount = in.nextInt();
System.out.println();

return tryCount;

}

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

import java.util.ArrayList;

public class OutputView {

public static void printWinners(ArrayList<String> results) {
if(results.size()==0) {
System.out.println("우승자 없음.");
return;
}
for(int i=0;i<results.size();i++) {
System.out.print(results.get(i));
if(i==results.size()-1)
break;
System.out.print(", ");
}
System.out.println("가 최종 우승했습니다.");
}

}