[우아한 테크 코스 프리코스 5기] 4주차

seheo·2022년 11월 26일
0
post-thumbnail

다리 건너기

🚀 기능 요구 사항

위아래 둘 중 하나의 칸만 건널 수 있는 다리를 끝까지 건너가는 게임이다.

  • 위아래 두 칸으로 이루어진 다리를 건너야 한다.
    • 다리는 왼쪽에서 오른쪽으로 건너야 한다.
    • 위아래 둘 중 하나의 칸만 건널 수 있다.
  • 다리의 길이를 숫자로 입력받고 생성한다.
    • 다리를 생성할 때 위 칸과 아래 칸 중 건널 수 있는 칸은 0과 1 중 무작위 값을 이용해서 정한다.
    • 위 칸을 건널 수 있는 경우 U, 아래 칸을 건널 수 있는 경우 D값으로 나타낸다.
    • 무작위 값이 0인 경우 아래 칸, 1인 경우 위 칸이 건널 수 있는 칸이 된다.
  • 다리가 생성되면 플레이어가 이동할 칸을 선택한다.
    • 이동할 때 위 칸은 대문자 U, 아래 칸은 대문자 D를 입력한다.
    • 이동한 칸을 건널 수 있다면 O로 표시한다. 건널 수 없다면 X로 표시한다.
  • 다리를 끝까지 건너면 게임이 종료된다.
  • 다리를 건너다 실패하면 게임을 재시작하거나 종료할 수 있다.
    • 재시작해도 처음에 만든 다리로 재사용한다.
    • 게임 결과의 총 시도한 횟수는 첫 시도를 포함해 게임을 종료할 때까지 시도한 횟수를 나타낸다.
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다.
    • Exception이 아닌 IllegalArgumentException, IllegalStateException 등과 같은 명확한 유형을 처리한다.

추가된 요구 사항

  • 함수(또는 메서드)의 길이가 10라인을 넘어가지 않도록 구현한다.
    • 함수(또는 메서드)가 한 가지 일만 잘하도록 구현한다.
  • 메서드의 파라미터 개수는 최대 3개까지만 허용한다.
  • 아래 있는 InputView, OutputView, BridgeGame, BridgeMaker, BridgeRandomNumberGenerator 클래스의 요구사항을 참고하여 구현한다.
    • 각 클래스의 제약 사항은 아래 클래스별 세부 설명을 참고한다.
    • 이외 필요한 클래스(또는 객체)와 메서드는 자유롭게 구현할 수 있다.
    • InputView 클래스에서만 camp.nextstep.edu.missionutils.Console 의 readLine() 메서드를 이용해 사용자의 입력을 받을 수 있다.
    • BridgeGame 클래스에서 InputView, OutputView 를 사용하지 않는다.

기능 분석

게임 운영

  • 플레이어가 떨어지면 재시작 or 종료 입력
  • 플레이어가 클리어하면 종료
  • 종료되면 게임 시도 횟수, 클리어 여부 출력

다리

  • 다리 생성
  • 입력한 길이만큼의 다리 생성

게임 실행

  • 입력을 통해 다리 이동
    • 생성된 다리를 통해 이동가능 여부확인
    • 이동가능 여부에 따라 다리 상태출력
      • 다리의 순서가 1이 아니면 "|" 추가

예외

  • 다리 길이 3 ~ 20이 아닌경우
  • 재시작 종료 입력값 검증
  • 플레이어 이동 입력값 검증

실수한 부분

요구 사항 명세서 자하게 보기

기능 요구 사항

IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 "그 부분부터 입력을 다시 받는다."

	private String validateReadMoving(String moveInput) {
		if (!(moveInput.equals(UP) || moveInput.equals(DOWN))) {
			throw new IllegalArgumentException(ERROR_READ_MOVING);
		}

		return validateNull(moveInput);
	}

에러 메시지를 출력하고 그 부분부터 입력을 다시 받지 않고, 에러 메시지만 출력하고 종료한다 2, 3주차 과제가 전부 재입력을 받지 않아서 당연하게 재입력을 받지 않는다고 생각하고 제대로 읽지도 않고 구현했다.....

기본 제공 클래스 변경

Chore : package 구조 변경

bridge.service -> bridge

과제에서 package 구조를 건드려도 괜찮다고 되어있는 클래스가 있었고, 명시되어 있지 않는 클래스들이 있었다.
명시되어 있지 않는 BridgeNumber 등 모두 bridge.service package로 변경했는데, 제출 했을때, 실행 중 예기치 못한 오류가 발생한다고 해서 다시 테스트 코드를 실행 해봐도 잘 실행됐는데, commit 기록을 다시 보는데, ApplicationTest의 package의 import가 추가 된걸보고, 원래대로 package 구조를 수정하니 정상적으로 제출되었다.

0개의 댓글