-
Notifications
You must be signed in to change notification settings - Fork 252
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[2단계 - 사다리 생성] 제이미(임정수) 미션 제출합니다. (#201)
* docs: 요구사항 및 기능 목록 추가 2단계 미션에 대한 요구사항 반영 * feat: 결과 기능 추가 * feat: 결과들 기능 추가 * feat: 사다리 게임 전체 결과 인덱스 가져오기 기능 추가 * rename: 파일명 오타로 인한 수정 * feat: 사다리 게임의 결과 판단 기능 추가 * feat: 요청 값에 따른 결과 반환 기능 추가 * fix: 출력 포맷 수정 * feat: 결과 입력 및 출력 기능 추가 * refactor: GameMap 제거 및 Ladder로 기능 전달 * refactor: 메서드 명으로 변경 map -> ladder * refactor: 사용하지 않는 패키지 제거 * refactor: 메서드 및 변수명 변경 map -> ladder * feat: 보고 싶은 사람 입력 기능 추가 * feat: 보고 싶은 사람의 실행 결과 출력 기능 추가 * refactor: 사용하지 않는 패키지 제거 * fix: 기능 추가에 따른 입출력 수정 * refactor: private 생성자 추가 유틸 클래스 생성 방지를 위해 * refactor: outputview에서 domain을 파라미터로 받지 않도록 수정 * refactor: 게임 결과 도메인 명 변경 * feat: 게임을 실행하는 도메인 추가 * refactor: 이름과 결과 입력 시 양옆의 공백 허용 * refactor: 컨벤션 적용 - 사용하지 않는 패키지 제거 - 가독성 및 디버깅을 위한 개행 추가 * rename: ErrorMessage 경로 수정 * docs: 요구사항 완료 체크 * fix: 로직 문제에 대한 수정 * refactor: 라인 상태에 대한 객체 추가 * rename: view 내부 패키지 제거 * refactor: 파라미터 변수명 수정 더 명확한 이름이 되도록 수정 * refactor: 컨트롤러의 생성자 추가 의존성 주입을 생성자 주입으로 수정함 * refactor: 예외 메시지 출력 기능 outputView로 이동 * refactor: 재입력 인터페이스 생성 및 적용 * refactor: 사용하지 않는 메서드 제거 * refactor: 변수명을 명확하게 수정 * refactor: 객체 비교 기능 추가 * feat: TestGenerator 추가 원하는 랜덤 테스트를 위한 클래스 추가 * docs: 네이밍 관련 수정 * docs: 완료 기능 체크 * rename: readme 파일 합침 * fix: 잘못된 조건 수정 10이하는 가능한데, 9까지만 입력 가능하도록 제한되어 있었음 이를 수정함 * refator: 사용하지 않는 패키지 제거 * feat: List 미션 수행 - ArrayList - LinkedList
- Loading branch information
Showing
50 changed files
with
1,665 additions
and
412 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,93 +0,0 @@ | ||
# java-racingcar | ||
|
||
<br> | ||
|
||
## 📚 도메인 모델 네이밍 사전 | ||
|
||
| 한글명 | 영문명 | 설명 | | ||
|-------|--------------|---------------------| | ||
| 참가자 | Participants | 사다리 게임에 참가하는 사람들을 지칭 | | ||
| 사람 | Person | 사람을 지칭 | | ||
| 맵 | Map | 맵 정보 지칭 | | ||
| 사다리 | Ladder | 사다리 지칭 | | ||
| 라인 | Line | 사다리의 한줄을 지칭 | | ||
|
||
<br> | ||
|
||
## 👨🍳 기능 목록 | ||
|
||
- 참가자 | ||
- [x] 사람은 10명까지 ( 테스트 원할한 범위 ) | ||
- [x] 사람은 2명 이상이다. | ||
- [x] 사람이름은 ',' 로 구분한다. | ||
- [x] 중복된 이름을 가질 수 없다. | ||
|
||
|
||
- 사람 | ||
- [x] 이름은 최대 5글자까지 가능하다 | ||
- [x] 이름은 빈문자 혹은 공백으로만 이루어지면 안 된다 | ||
|
||
|
||
- 맵 (사다리) | ||
- [x] 사다리의 높이는 숫자여야 한다. | ||
- [x] 사다리의 최소 높이는 1이다. | ||
- [x] 사다리의 최대 높이는 10이다. ( 테스트 원할한 범위 ) | ||
- [x] 사다리는 높이만큼의 라인을 가진다. | ||
- [x] 사다리의 라인은 1이상 9이하의 갯수의 상태를 갖는다. (참가자수에서 1을 뺀 값) | ||
|
||
|
||
- 라인 | ||
- [x] 라인은 1이상 9이하의 갯수의 상태를 갖는다. | ||
- [x] 상태는 두 가지 경우를 가진다 (연결 혹은 비연결) | ||
- [x] true, false 중 랜덤한 boolean을 생성한다. | ||
- [x] 연속으로 연결상태를 가질 수 없다. | ||
|
||
|
||
- 출력 | ||
- [x] 사람 이름은 5자 기준으로 출력하기에 폭도 이에 맞춘다. | ||
|
||
|
||
- 입력 | ||
- [x] 참여자 이름을 입력한다. | ||
- [x] 최대 사다리 높이를 입력한다. | ||
|
||
## 요구 사항 | ||
|
||
- [x] 사다리 게임에 참여하는 사람에 이름을 최대5글자까지 부여할 수 있다. | ||
- [x] 사다리를 출력할 때 사람 이름도 같이 출력한다. | ||
- [x] 사람 이름은 쉼표(,)를 기준으로 구분한다. | ||
- [x] 사람 이름을 5자 기준으로 출력하기 때문에 사다리 폭도 넓어져야 한다. | ||
- [x] 사다리 타기가 정상적으로 동작하려면 라인이 겹치지 않도록 해야 한다. | ||
- [x] |-----|-----| 모양과 같이 가로 라인이 겹치는 경우 어느 방향으로 이동할지 결정할 수 없다. | ||
<br> | ||
|
||
## 📌 Commit Convention | ||
|
||
커밋 메시지는 다음과 같은 형태로 작성합니다. | ||
|
||
```Bash | ||
> "커밋의 타입: 커밋 메세지 내용" | ||
ex) "docs: 기능 목록 추가" | ||
``` | ||
|
||
커밋의 타입은 아래 10가지 중 가장 적절한 것을 선택해 작성합니다. | ||
|
||
| 커밋의 타입 | 설명 | | ||
| :---------: | :-----------------------------------------------: | | ||
| feat | 새로운 기능 추가 | | ||
| fix | 버그 수정 | | ||
| comment | 필요한 주석 추가 및 변경 | | ||
| test | 테스트 코드 추가 | | ||
| docs | 문서를 추가 혹은 수정 (ex. README 수정) | | ||
| rename | 파일 혹은 폴더명을 수정하거나 옮기는 작업 | | ||
| remove | 파일을 삭제하는 작업만 수행 | | ||
| chore | 빌드 태스크 업데이트, 패키지 매니저를 설정 | | ||
| refactor | 코드 리팩토링 | | ||
| style | 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 | | ||
|
||
<br> | ||
|
||
## 📌 Code Convention | ||
|
||
- 구글 Java 코딩 컨벤션을 준수합니다. | ||
- IntelliJ의 Formatter를 적용합니다. | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,19 @@ | ||
import controller.RadderGameController; | ||
import controller.LadderGameController; | ||
import util.RandomBooleanGenerator; | ||
import view.input.InputView; | ||
import view.output.OutputView; | ||
import view.InputView; | ||
import view.OutputView; | ||
|
||
import java.util.Scanner; | ||
|
||
public class Application { | ||
|
||
public static void main(String[] args) { | ||
InputView inputView = new InputView(); | ||
InputView inputView = new InputView(new Scanner(System.in)); | ||
OutputView outputView = new OutputView(); | ||
RandomBooleanGenerator randomBooleanGenerator = new RandomBooleanGenerator(); | ||
RadderGameController radderGameController = new RadderGameController(); | ||
radderGameController.play(inputView, outputView, randomBooleanGenerator); | ||
|
||
LadderGameController ladderGameController = | ||
new LadderGameController(inputView, outputView, randomBooleanGenerator); | ||
ladderGameController.play(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package controller; | ||
|
||
import domain.*; | ||
import util.BooleanGenerator; | ||
import util.Task; | ||
import view.InputView; | ||
import view.OutputView; | ||
|
||
public class LadderGameController { | ||
|
||
private static final String RESULT_ALL = "all"; | ||
|
||
private final InputView inputView; | ||
private final OutputView outputView; | ||
private final BooleanGenerator booleanGenerator; | ||
|
||
public LadderGameController(InputView inputView, OutputView outputView, | ||
BooleanGenerator booleanGenerator) { | ||
this.inputView = inputView; | ||
this.outputView = outputView; | ||
this.booleanGenerator = booleanGenerator; | ||
} | ||
|
||
public void play() { | ||
Participants participants = setParticipants(); | ||
Results results = setResults(participants); | ||
Ladder ladder = generateLadder(participants, booleanGenerator); | ||
|
||
LadderGame ladderGame = new LadderGame(participants, results, ladder); | ||
printLadder(ladderGame); | ||
|
||
printResult(ladderGame); | ||
} | ||
|
||
private Participants setParticipants() { | ||
return Task.retryUntilSuccess(() -> { | ||
String participantNames = inputView.enterParticipantNames(); | ||
return new Participants(participantNames); | ||
}, outputView); | ||
} | ||
|
||
private Results setResults(Participants participants) { | ||
return Task.retryUntilSuccess(() -> { | ||
String results = inputView.enterResults(); | ||
return new Results(results, participants.getParticipantCount()); | ||
}, outputView); | ||
} | ||
|
||
private Ladder generateLadder(Participants participants, BooleanGenerator booleanGenerator) { | ||
return Task.retryUntilSuccess(() -> { | ||
Height height = new Height(inputView.enterHeight()); | ||
Weight weight = new Weight(participants.getParticipantCount()); | ||
return new Ladder(height, weight, booleanGenerator); | ||
}, outputView); | ||
} | ||
|
||
private void printLadder(LadderGame ladderGame) { | ||
outputView.printLadder(ladderGame.getParticipants(), ladderGame.getLadder(), | ||
ladderGame.getResults()); | ||
} | ||
|
||
private void printResult(LadderGame ladderGame) { | ||
boolean isContinue = true; | ||
while (isContinue) { | ||
isContinue = getResult(ladderGame); | ||
} | ||
} | ||
|
||
private boolean getResult(LadderGame ladderGame) { | ||
try { | ||
String inputResult = inputView.enterGetResult(); | ||
return getResultByInput(ladderGame, inputResult); | ||
} catch (IllegalArgumentException exception) { | ||
outputView.printErrorMessage(exception); | ||
return true; | ||
} | ||
} | ||
|
||
private boolean getResultByInput(LadderGame ladderGame, String inputValue) { | ||
if (RESULT_ALL.equals(inputValue)) { | ||
outputView.printMatchAllResult(ladderGame.getGameAllResult(), | ||
ladderGame.getParticipants()); | ||
return false; | ||
} | ||
|
||
outputView.printMatchResult(ladderGame.getGameResultByName(inputValue)); | ||
return true; | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.