Skip to content

Commit

Permalink
[step4] 자동차 경주(우승자) 리뷰 부탁드립니다 (#2077)
Browse files Browse the repository at this point in the history
* [step4] 자동차 경주(우승자) 리뷰 부탁드립니다

* feat : 4단계 - 자동차 경주(우승자)

2021. 03. 15
자동차 경주(우승자)를 제출합니다.
1) 패키지로 UI, 도메인 분류
2) 자동차 참가회수 -> 자동차 이름으로 변경
3) 우승자 구분에 따른 기능 추가
4) 상수들을 상수 클래스로 관리
5) 기타 피드백 반영

Resolves : loop-study
See also : changgunyee

* refector(Cars): 자동차 사이즈 유효성 추가

2021. 03. 15
자동차 이름으로 ",,,,," 입력 시
자동차 Size 없이 진행되어 유효성 추가합니다.

Resolves : loop-study
See also : changgunyee

* refactor(README) : 구현 목록 수정

2020. 03. 15
기존 3단계에서 추가된 4단계 구현 요소 추가함

Resolves : loop-study
See also : changgunyee
  • Loading branch information
loop-study committed Mar 15, 2021
1 parent 2610239 commit 83d927c
Show file tree
Hide file tree
Showing 28 changed files with 573 additions and 376 deletions.
28 changes: 0 additions & 28 deletions src/main/java/new_racingcar/Car.java

This file was deleted.

40 changes: 0 additions & 40 deletions src/main/java/new_racingcar/Cars.java

This file was deleted.

24 changes: 0 additions & 24 deletions src/main/java/new_racingcar/GrandPrix.java

This file was deleted.

47 changes: 0 additions & 47 deletions src/main/java/new_racingcar/InputView.java

This file was deleted.

14 changes: 0 additions & 14 deletions src/main/java/new_racingcar/MoveOneStrategy.java

This file was deleted.

6 changes: 0 additions & 6 deletions src/main/java/new_racingcar/MoveStrategy.java

This file was deleted.

34 changes: 28 additions & 6 deletions src/main/java/new_racingcar/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
# [3단계] 레이싱카 정리
# [4단계] 레이싱카 정리

## 기능 요구사항
## 이전 3단계 요구사항
- 초간단 자동차 경주 게임을 구현한다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다.
- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다.

## 프로그래밍 요구사항
## 4단계 요구사항
- 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다.
- 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분한다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다.

## 프로그래밍 3단계 요구사항
- 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외
- 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
- UI 로직을 InputView, ResultView와 같은 클래스를 추가해 분리한다.
Expand All @@ -17,15 +23,19 @@
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.

## 4단계 요구사항
- indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
- 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.

## 기능 목록 및 commit 로그 요구사항
- 기능을 구현하기 전에 README.md 파일에 구현할 기능 목록을 정리해 추가한다.
- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
- 참고문서: AngularJS Commit Message Conventions

## 구현 기능 목록
- [X] 경주에 참가할 자동차 수를 입력 받는다
- [X] 1명 이 성공 확인
- [X] 0명 이하 실패 처리
- [X] 실행 횟수 n를 입력 받는다
- [X] 1번 이상 성공 확인
- [X] 0번 이하 실패 처리
Expand All @@ -37,7 +47,19 @@
- [X] 라운드마다 결과저장
- [X] 레이스 종료 후 결과 출력

## 추가 요구사항
- [X] 자동차 이름을 받는다
- [X] , 구분으로 여러대의 이름을 한번에 받음
- [X] 자동차의 이름은 최대 5글자
- [X] 최종 우승자 출력
- [X] 최대 주행거리 max 구하기
- [X] 최대한 주행한 자동차 구하기
- [X] UI, 도메인을 패키지로 구분

## 변경된 요구사항으로 없어진 내용
- [X] 경주에 참가할 자동차 수를 입력 받는다
- [X] 1명 이 성공 확인
- [X] 0명 이하 실패 처리



Expand Down
13 changes: 3 additions & 10 deletions src/main/java/new_racingcar/RacingMain.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
package new_racingcar;

import java.util.List;
import new_racingcar.controller.RacingController;

public class RacingMain {

public static void main(String[] args) {
InputView inputView = new InputView();
int playerCount = inputView.setPlayer();
int turnCount = inputView.setTurn();

GrandPrix grandPrix = new GrandPrix(playerCount, turnCount);
List<Round> rounds = grandPrix.start();

ResultView resultView = new ResultView();
resultView.printGrandPrixRecords(rounds);
RacingController racingController = new RacingController();
racingController.run();
}
}
31 changes: 0 additions & 31 deletions src/main/java/new_racingcar/ResultView.java

This file was deleted.

15 changes: 0 additions & 15 deletions src/main/java/new_racingcar/Round.java

This file was deleted.

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

public class MsgConstants {

// InputView Message
public static final String INPUT_CAR_NAME_MESSAGE = "경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분), 자동차당 최대 5글자 제한입니다";
public static final String INPUT_TURN_MESSAGE = "시도할 회수는 몇회인가요?";
public static final String INPUT_CAR_NAME_ERROR = "자동차 이름이 없습니다.";

// ResultView Message
public static final String RESULT_RACING_END_MESSAGE = "경기 결과";

// Cars, Car Message
public static final String CAR_NAME_ERROR_MESSAGE = "자동차 이름이 잘못되었습니다.";

// GrandPrix Message
public static final String ROUND_ERROR_MESSAGE = "시도할 횟수가 잘못되었습니다.";
}
23 changes: 23 additions & 0 deletions src/main/java/new_racingcar/controller/RacingController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package new_racingcar.controller;

import new_racingcar.domain.Round;
import new_racingcar.service.GrandPrix;
import new_racingcar.view.InputView;
import new_racingcar.view.ResultView;

import java.util.List;

public class RacingController {

public void run() {
InputView inputView = new InputView();
List<String> carNames = inputView.inputNames();
int turnCount = inputView.inputTurn();

GrandPrix grandPrix = new GrandPrix(carNames, turnCount);
List<Round> rounds = grandPrix.start();

ResultView resultView = new ResultView();
resultView.printGrandPrixRecords(rounds);
}
}

0 comments on commit 83d927c

Please sign in to comment.