Skip to content
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

[bridge] 박준수 미션 제출합니다. #1

Open
wants to merge 102 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
67d9c07
docs: 기능목록/에러 처리 정의
GaBaljaintheroom Aug 10, 2023
5509034
feat: bridgeSize 입력 메서드 작성
GaBaljaintheroom Aug 11, 2023
9717019
feat: 다리 생성 길이 validate 작성
GaBaljaintheroom Aug 11, 2023
b0b3de9
feat: InputManager 작성
GaBaljaintheroom Aug 11, 2023
ba7fb13
refactor: InputView 매개변수 추가
GaBaljaintheroom Aug 11, 2023
2c50f26
docs: 다리 길이 입력 기능
GaBaljaintheroom Aug 11, 2023
3e20e91
test: 다리의 길이가 3~20사이의 숫자가 아니면 에러
GaBaljaintheroom Aug 11, 2023
6088b05
feat: 다리 생성 메서드 작성
GaBaljaintheroom Aug 11, 2023
84ba912
feat: InputManager 다리 생성 메서드 작성
GaBaljaintheroom Aug 11, 2023
2f1334e
test: 다리가 'U', 'D' 형태로 랜덤 생성 되었는지 확인
GaBaljaintheroom Aug 11, 2023
60ef94c
docs: 다리 랜덤 생성
GaBaljaintheroom Aug 11, 2023
1a8b32e
feat: 입력할 칸을 입력 메서드 작성
GaBaljaintheroom Aug 11, 2023
3dad34a
feat: 입력할 칸 validate 작성
GaBaljaintheroom Aug 11, 2023
d84dc86
test: 이동할 칸이 'U' 또는 'D'가 아니면 에러
GaBaljaintheroom Aug 11, 2023
2f5eabe
docs: 이동할 칸 입력 기능
GaBaljaintheroom Aug 11, 2023
613b4ce
feat: BridgeGame 이동 메서드 구현
GaBaljaintheroom Aug 11, 2023
06207fe
feat: BridgeGame 관련 메서드 작성
GaBaljaintheroom Aug 11, 2023
64ca2b9
refactor: inputBridgeMoveStep 메세지 이동
GaBaljaintheroom Aug 11, 2023
82979c1
feat: BridgeGameController 생성
GaBaljaintheroom Aug 11, 2023
4e4c039
test: 이동할 수 있는 칸을 입력했을 때 True를 반환
GaBaljaintheroom Aug 11, 2023
943a122
feat: BridgeWindow enum 생성
GaBaljaintheroom Aug 11, 2023
de9e388
feat: Bridge 성공 메서드 작성
GaBaljaintheroom Aug 11, 2023
d9502fb
feat: Bridge 실패 메서드 작성
GaBaljaintheroom Aug 11, 2023
b7a33df
feat: Bridge 출력형태 작성
GaBaljaintheroom Aug 11, 2023
bd054be
feat: 다리 이동 메서드 작성
GaBaljaintheroom Aug 11, 2023
793123e
feat: 게임 다시 시도할지 여부 입력 메서드 작성
GaBaljaintheroom Aug 11, 2023
b1d017b
feat: 게임 다시 시도할지 여부 입력 validate 작성
GaBaljaintheroom Aug 11, 2023
7f6903b
refactor: 다리 이동 메서드명 수정
GaBaljaintheroom Aug 11, 2023
4c28d1b
feat: BridgeGame retry 메서드 작성
GaBaljaintheroom Aug 11, 2023
40d20b0
feat: checkRetryGame 메서드 작성
GaBaljaintheroom Aug 11, 2023
dad97a0
refactor: move 매개변수 명 수정
GaBaljaintheroom Aug 11, 2023
2a17ac7
refactor: 입력 메시지 이동
GaBaljaintheroom Aug 11, 2023
df974d4
feat: 다리 상태 입력 메서드 작성
GaBaljaintheroom Aug 11, 2023
1c65a5e
refactor: InputValidateTest 수정
GaBaljaintheroom Aug 11, 2023
0f57536
test: 게임을 다시 시도 입력이 'R', 'Q'가 아니면 에러
GaBaljaintheroom Aug 11, 2023
29b703c
docs: 게임 재시작/종료 여부
GaBaljaintheroom Aug 11, 2023
7ab3d05
refactor: inputGameCommand 입력 메시지 이동
GaBaljaintheroom Aug 12, 2023
0f71241
refactor: inputRetryCommand 변수명 수정
GaBaljaintheroom Aug 12, 2023
8dd27c3
feat: printResult 메서드 작성
GaBaljaintheroom Aug 12, 2023
d6b294f
refactor: 다리 이동 메서드 수정
GaBaljaintheroom Aug 12, 2023
07a73dc
feat: 게임 결과 객체 생성
GaBaljaintheroom Aug 12, 2023
be788da
feat: 게임 시작 메서드 작성
GaBaljaintheroom Aug 12, 2023
5ae5482
test: 생성된 Bridge가 BridgeGame에 저장이 되는지 확인
GaBaljaintheroom Aug 12, 2023
d9e1c0e
test: 게임 시도 횟수가 하나씩 증가하는지 확인
GaBaljaintheroom Aug 12, 2023
90a6db0
refactor: 게임 시도 횟수 기본값 수정
GaBaljaintheroom Aug 12, 2023
4bdc787
refactor: BridgeStatus 메서드 종료 추가
GaBaljaintheroom Aug 12, 2023
d568fbc
test: 윗 칸을 누르고 성공했을 때 게임 화면이 만들어지는지 확인
GaBaljaintheroom Aug 12, 2023
ddf4aaa
refactor: test이름 수정
GaBaljaintheroom Aug 12, 2023
4470056
test: 아랫 칸을 누르고 실패했을 때 게임 화면이 만들어지는지 확인
GaBaljaintheroom Aug 12, 2023
ee60aed
refactor: 게임 화면 Success 수정
GaBaljaintheroom Aug 12, 2023
f26de50
test: 윗 칸을 누르고 성공했을 때 게임 화면이 만들어지는지 확인
GaBaljaintheroom Aug 12, 2023
4e0b1db
test: 아랫 칸을 누르고 성공했을 때 게임 화면이 만들어지는지 확인
GaBaljaintheroom Aug 12, 2023
2fd6362
docs: 다리의 상태를 출력
GaBaljaintheroom Aug 12, 2023
b05bf83
refactor: 변수명 수정
GaBaljaintheroom Aug 12, 2023
c8f59c5
test: 게임 클리어 실패시 '성공'에서 '실패'로 변하는지 확인
GaBaljaintheroom Aug 12, 2023
be4ddca
docs: 게임 성공 여부를 확인 후 출력
GaBaljaintheroom Aug 12, 2023
a89188b
test: 재시작/종료 명령어가 R이면 true, Q이면 false를 반환
GaBaljaintheroom Aug 12, 2023
79d8694
refactor: inputBridgeSize 빈칸 추가
GaBaljaintheroom Aug 12, 2023
ae944c7
refactor: BridgeStatus 화면 수정
GaBaljaintheroom Aug 12, 2023
652a43c
refactor: 게임 메시지 추가
GaBaljaintheroom Aug 12, 2023
e4d3289
feat: 게임 시작 메서드 추가
GaBaljaintheroom Aug 12, 2023
e60a5b6
refactor: 게임 에러처리 추가
GaBaljaintheroom Aug 12, 2023
0684fbe
refactor: 숫자/문자 validate 추가
GaBaljaintheroom Aug 12, 2023
ef5c177
test: 다리의 길이가 숫자가 아니면 에러
GaBaljaintheroom Aug 12, 2023
d50e201
test: 이동할 칸이 대문자 영어가 아니면 에러
GaBaljaintheroom Aug 12, 2023
aecb240
test: 게임을 다시 시도 입력이 대문자 영어가 아니면 에러
GaBaljaintheroom Aug 12, 2023
b51e9a7
test: 게임 재시작 시 다리 초기화
GaBaljaintheroom Aug 12, 2023
29febc9
refactor: isClearGame 메서드 분리
GaBaljaintheroom Aug 12, 2023
4cabbe3
refactor: 반환타입 수정
GaBaljaintheroom Aug 12, 2023
dbe5dfa
refactor: GameProgressMessage enum 생성
GaBaljaintheroom Aug 12, 2023
ec1500b
refactor: 상수 추출
GaBaljaintheroom Aug 12, 2023
0e27b6b
feat: GameCommand enum 생성
GaBaljaintheroom Aug 12, 2023
6193f2f
refactor: GameCommand enum 적용
GaBaljaintheroom Aug 12, 2023
b623a2b
refactor: 상수 처리
GaBaljaintheroom Aug 12, 2023
895a59f
refactor: 결과 메시지 상수 처리
GaBaljaintheroom Aug 12, 2023
8385e0d
refactor: ErrorMessage 적용
GaBaljaintheroom Aug 12, 2023
e1a70d1
refactor: GameProgressMessage 게임시작 메시지 추가
GaBaljaintheroom Aug 12, 2023
50c158b
refactor: getStair 삭제
GaBaljaintheroom Aug 12, 2023
193e99a
refactor: 다리가 'U', 'D' 형태로 랜덤 생성 되었는지 확인 수정
GaBaljaintheroom Aug 12, 2023
21a05d7
refactor: 게임 재시작 시 다리는 초기화 수정
GaBaljaintheroom Aug 12, 2023
2e303dc
refactor: getBridge 삭제
GaBaljaintheroom Aug 12, 2023
1e95d2a
refactor: 생성된 Bridge가 BridgeGame에 저장이 되는지 확인 수정
GaBaljaintheroom Aug 12, 2023
63f73c1
docs: Readme 작성
GaBaljaintheroom Aug 12, 2023
ca9de50
style: 메서드명 수정
GaBaljaintheroom Aug 17, 2023
3b34a08
refactor: validateRandomNumber 추가
GaBaljaintheroom Aug 17, 2023
e69cc54
refactor: BridgeSize Error 발생 시 재시작 메서드 추가
GaBaljaintheroom Aug 17, 2023
c8e6905
refactor: BridgeMoveStep Error 발생 시 재시작 메서드 추가
GaBaljaintheroom Aug 17, 2023
1f814d8
refactor: RetryCommand Error 발생 시 재시작 메서드 추가
GaBaljaintheroom Aug 17, 2023
9f09b79
refactor: BridgeGameController 불필요 메서드 제거
GaBaljaintheroom Aug 18, 2023
b6850ed
refactor: BridgeStatus 숫자 상수 처리
GaBaljaintheroom Aug 18, 2023
5620162
refactor: GameResultManager로 클래스명 수정
GaBaljaintheroom Aug 18, 2023
b958a1f
refactor: GameResultManager로 클래스명 수정
GaBaljaintheroom Aug 18, 2023
cb95b8b
refactor: isRetryGame 메서드 중복 제거
GaBaljaintheroom Aug 18, 2023
a5d6e8c
docs: README.md 수정
GaBaljaintheroom Aug 18, 2023
3bced2e
refactor: 패키지 분리
GaBaljaintheroom Aug 18, 2023
65e5112
refactor: 상수 유지보수
GaBaljaintheroom Aug 18, 2023
6b3ec84
refactor: BridgeGame 메서드 반환 타입 수정
GaBaljaintheroom Aug 20, 2023
90097b7
refactor: BridgeStatus isNextStage 필드 추가
GaBaljaintheroom Aug 20, 2023
a909b76
refactor: GameResultManager 필요없는 책임 삭제
GaBaljaintheroom Aug 20, 2023
943f1d5
refactor: OutputView printResult 매개변수 수정
GaBaljaintheroom Aug 20, 2023
719a023
refactor: InputManager 메서드 수정
GaBaljaintheroom Aug 20, 2023
7c191a3
refactor: gameStart 내부 수정
GaBaljaintheroom Aug 20, 2023
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
56 changes: 56 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# 기능 목록

## BridgeGameController
- [x] 게임 시작 메서드(gameStart)

## InputManager
- [x] bridge 길이 반환(makeBridge)
- [x] 게임 성공/실패 여부 반환(isClearMoveBridge)
- [x] 게임 재시작/종료 여부 반환(isRetryGame)

## InputView
- [x] 길이 입력 에러 발생 시 이 부분에서 다시 시작(readBridgeSize)
- [x] 이동할 칸 입력 에러 발생 시 이 부분에서 다시 시작(readMoving)
- [x] 게임 재시도 여부 입력 에러 발생 시 이 부분에서 다시 시작(readGameCommand)
- [x] bridge 길이 입력(inputBridgeSize)
- [x] 사용자가 이동할 칸 입력(inputBridgeMoveStep)
- [x] 사용자가 게임을 재시도 여부 입력(inputRetryCommand)

## InputValidator
- [x] bridge 길이 validate(validateBridgeSize)
- [x] bridge 이동 명령어 validate(validateBridgeMoveStep)
- [x] bridge 재시작 명령어 validate(validateBridgeStartCommand)
- [x] bridge 길이 숫자 validate(validateInputNumber)
- [x] 명령어 대문자 영어 validate(validateInputUpperEnglish)

## BridgeGame
- [x] 칸 이동 성공/실패 반환(move)
- [x] bridge 재시도 여부 반환(retry)
- [x] bridge 길이(단계) 반환(stages)

## BridgeMaker
- [x] 생성된 bridge 반환(makeBridge)

## BridgeStatus
- [x] bridge 성공 시 게임화면 추가(successStair)
- [x] bridge 실패 시 게임 화면 추가(failStair)
- [x] bridge 중간 괄호 추가(inputDivision)
- [x] bridge 게임 화면 초기세팅(init)
- [x] bridge 게임 화면 초기화(reset)

## GameResultManager
- [x] bridge 실패 시 게임화면 출력(printFailBridge)
- [x] bridge 성공 시 게임화면 출력(printSuccessBridge)
- [x] bridge 게임 횟수 증가(upAttemptCount)
- [x] bridge 최종 게임 결과 출력(printGameResult)
- [x] bridge 게임 실패 여부(gameClearFail)

## OutputView
- [x] 진행 상황 게임 화면 출력(printMap)
- [x] 최종 게임 결과 출력(printResult)

## 열거형 목록
- [x] 게임 화면 요소(BridgeWindow)
- [x] 에러 메시지(ErrorMessage)
- [x] 게임 명령어(GameCommand)
- [x] 게임 진행 명령어(GameProgressMessage)
5 changes: 4 additions & 1 deletion src/main/java/bridge/Application.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package bridge;

import bridge.controller.BridgeGameController;

public class Application {

public static void main(String[] args) {
// TODO: 프로그램 구현
BridgeGameController bridgeGameController = new BridgeGameController();
bridgeGameController.gameStart();
}
}
23 changes: 0 additions & 23 deletions src/main/java/bridge/BridgeGame.java

This file was deleted.

23 changes: 0 additions & 23 deletions src/main/java/bridge/BridgeMaker.java

This file was deleted.

28 changes: 0 additions & 28 deletions src/main/java/bridge/InputView.java

This file was deleted.

23 changes: 0 additions & 23 deletions src/main/java/bridge/OutputView.java

This file was deleted.

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

public enum BridgeWindow {

START("[ "),
SUCCESS("O"),
FAIL("X"),
DIVISION(" | "),
BLANK(" "),
END(" ]");

private final String value;

BridgeWindow(String value) {
this.value = value;
}

@Override
public String toString() {
return value;
}
}
19 changes: 19 additions & 0 deletions src/main/java/bridge/constant/ErrorMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package bridge.constant;

public enum ErrorMessage {
NOT_RANGE("다리의 길이는 %d~%d 사이의 숫자입니다."),
NOT_MOVE_STAGE("이동할 칸은 '%s' 혹은 '%s' 입니다."),
NOT_RETRY_COMMAND("게임을 다시 시도할 명령어는 '%s' 혹은 '%s' 입니다."),
NOT_NUMBER_STRING("숫자로된 문자열이 아닙니다."),
NOT_UPPER_ENGLISH("대문자 영어가 아닙니다.");

private final String message;

ErrorMessage(String message) {
this.message = message;
}

public String getMessage() {
return "[ERROR]" + message;
}
}
31 changes: 31 additions & 0 deletions src/main/java/bridge/constant/GameCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package bridge.constant;

public enum GameCommand {

UP_BRIDGE("U"),
DOWN_BRIDGE("D"),
RETRY("R"),
QUIT("Q");

private final String command;

GameCommand(String command) {
this.command = command;
}

public String getCommand() {
return command;
}

public static String bridgeStageCase(int num){
if (num == 0){
return GameCommand.DOWN_BRIDGE.getCommand();
}
return GameCommand.UP_BRIDGE.getCommand();
}

@Override
public String toString() {
return command;
}
}
25 changes: 25 additions & 0 deletions src/main/java/bridge/constant/GameProgressMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package bridge.constant;

public enum GameProgressMessage {

START_BRIDGE_GAME("다리 건너기 게임을 시작합니다.\n"),
INPUT_BRIDGE_LENGTH("다리의 길이를 입력해주세요."),
INPUT_MOVE_STAIR("이동할 칸을 선택해주세요. (위: %s, 아래: %s)"),
INPUT_RETRY_GAME("게임을 다시 시도할지 여부를 입력해주세요. (재시도: %s, 종료: %s)"),
BLANK(" ");

private final String message;

GameProgressMessage(String message) {
this.message = message;
}

@Override
public String toString() {
return message;
}

public String getMessage() {
return message;
}
}
28 changes: 28 additions & 0 deletions src/main/java/bridge/controller/BridgeGameController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package bridge.controller;

import bridge.model.BridgeGame;
import bridge.constant.GameProgressMessage;

public class BridgeGameController {

private final InputManager inputManager;
private final GameResultManager gameResultManager;
public BridgeGameController() {
this.inputManager = new InputManager();
this.gameResultManager = new GameResultManager();
}

public void gameStart(){
System.out.println(GameProgressMessage.START_BRIDGE_GAME);
BridgeGame bridgeGame = new BridgeGame(inputManager.makeBridge());
boolean isProceed = true;
while (isProceed) {
gameResultManager.upAttemptCount();
if (inputManager.isSuccessMoveStage(bridgeGame,gameResultManager)){
break;
}
isProceed = inputManager.isRetryGame(bridgeGame, gameResultManager);
}
}

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

public class GameResultManager {

private static final String GAME_SUCCESS = "성공";
private static final String GAME_FAIL = "실패";
private int attemptCount = 0;
private String gameClear = GAME_SUCCESS;


public void upAttemptCount(){
attemptCount++;
}

public void gameClearFail(){
gameClear = GAME_FAIL;
}

public String getGameClear() {
return gameClear;
}

public int getAttemptCount() {
return attemptCount;
}
}
55 changes: 55 additions & 0 deletions src/main/java/bridge/controller/InputManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package bridge.controller;

import bridge.*;
import bridge.io.view.InputView;
import bridge.io.view.OutputView;
import bridge.model.BridgeGame;
import bridge.model.BridgeMaker;
import bridge.model.BridgeStatus;

import java.util.List;

public class InputManager {

private final InputView inputView;
private final BridgeMaker bridgeMaker;
private final OutputView outputView;

public InputManager() {
this.inputView = new InputView();
this.bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator());
this.outputView = new OutputView();
}

public List<String> makeBridge(){
int bridgeSize = inputView.readBridgeSize();
return bridgeMaker.makeBridge(bridgeSize);
}

public boolean isSuccessMoveStage(BridgeGame bridgeGame, GameResultManager gameResultManager) {
BridgeStatus bridgeStatus = null;
for (int stage = 0; stage < bridgeGame.stages(); stage++){
String bridgeMoveStep = inputView.readMoving();
bridgeStatus = bridgeGame.move(bridgeMoveStep, stage);
outputView.printMap(bridgeStatus);
if (!bridgeStatus.isNextStage()){
return false;
}
}
outputView.printResult(bridgeStatus, gameResultManager);
return true;

}

public boolean isRetryGame(BridgeGame bridgeGame, GameResultManager gameResultManager){
String command = inputView.readGameCommand();
BridgeStatus bridgeStatus = bridgeGame.retry(command);
if(bridgeStatus.isNextStage()){
return true;
}
gameResultManager.gameClearFail();
outputView.printResult(bridgeStatus ,gameResultManager);
return false;
}

}
Loading