2022년 정리8

조용휘·2023년 1월 22일
0

2022

목록 보기
8/10

기능 구현 목록
InputView
사용자로부터 입력을 받는 역할
패키지 변경 가능
메서드의 시그니처(parameter, name)와 리턴 타입 변경 가능
사용자 값 입력을 위해 필요한 메서드 추가 가능
public int readBridgeSize()
다리의 길이를 입력받는다.
public String readMoving()
사용자가 이동할 칸을 입력받는다.
public String readGameCommand()
사용자가 게임을 다시 시도할지 종료할지 여부를 입력받는다.
OutputView
사용자에게 게임 진행 상황과 결과를 출력하는 역할
패키지 변경 가능
메서드의 이름 변경 불가
parameter나 리턴타입은 필요에 따라 추가하거나 변경 가능
값 출력을 위해 필요한 메서드 추가 가능
public void printMap()
현재까지 이동한 다리의 상태를 정해진 형식에 맞춰 출력한다. 출력을 위해 필요한 메서드의 인자(parameter)는 자유롭게 추가, 변경이 가능하다.
public void printResult()
게임의 최종 결과를 정해진 형식에 맞춰 출력한다. 출력을 위해 필요한 메서드의 인자(parameter)는 자유롭게 추가, 변경이 가능하다.
BridgeGame
다리 건너기 게임을 관리하는 클래스
클래스에 필드(인스턴스 변수) 추가 가능
패키지 변경 가능
메서드의 이름은 변경 불가
parameter와 리턴타입은 필요에 따라 추가하거나 변경 가능
게임 진행을 위해 필요한 메서드를 추가하거나 변경 가능
public void move()
사용자가 칸을 이동할 때 사용하는 메서드. 이동을 위해 필요한 메서드의 반환 타입(return type),인자(parameter)는 자유롭게 추가하거나 변경할 수 있다.
public void retry()
사용자가 게임을 다시 시도할 때 사용하는 메서드. 재시작을 위해 필요한 메서드의 반환 타입(return type),인자(parameter)는 자유롭게 추가하거나 변경할 수 있다.
BridgeMaker
다리의 길이를 입력 받아서 다리를 생성해주는 역할
클래스의 필드(인스턴스 변수) 변경 불가
메서드의 시그니처(parameter, name)와 리턴 타입 변경 불가
public class BridgeMaker {

private final BridgeNumberGenerator bridgeNumberGenerator;

public BridgeMaker(BridgeNumberGenerator bridgeNumberGenerator) {
    this.bridgeNumberGenerator = bridgeNumberGenerator;
}

/**
@paramsize다리의 길이
@return입력받은 길이에 해당하는 다리 모양.위 칸이면"U",아래 칸이면"D"로 표현해야 한다.
*/
public List makeBridge(int size) {
return null;
}
}
BridgeRandomNumberGenerator
Random값 추출은 bridge.BridgeRandomNumberGenerator의 generate() 사용
이 클래스와 BridgeNumberGenerator 인터페이스의 코드는 변경 불가.
public class BridgeRandomNumberGenerator implements BridgeNumberGenerator {

private static final intRANDOM_LOWER_INCLUSIVE= 0;
private static final intRANDOM_UPPER_INCLUSIVE= 1;

@Override
public int generate() {
    return Randoms.pickNumberInRange(RANDOM_LOWER_INCLUSIVE,RANDOM_UPPER_INCLUSIVE);
}

}

기능구현목록 - 1차

Constants

FrontMan (from 오징어게임)

게임 중 출력되는 멘트들을 모아놓은 클래스.

  • "다리 건너기 게임을 시작합니다."
  • "다리의 길이를 입력해주세요."
  • "이동할 칸을 선택해주세요. (위: U, 아래: D)"
  • "게임을 다시 시도할지 여부를 입력해주세요. (재시도: R, 종료: Q)"
  • "최종 게임 결과"
  • "게임 성공 여부: "
  • "총 시도한 횟수: "

ErrorMessages

게임 중 발생하는 예외 상황들에 대한 멘트들을 모아놓은 클래스.

"[ERROR]"로 시작하는 에러 메시지를 출력한다.

IllegalArgumentException

  • "[ERROR] 다리 길이는 3부터 20 사이의 숫자여야 합니다."
  • "[ERROR] 윗칸(U)이나 아랫칸(D)으로만 갈 수 있습니다."
  • "[ERROR] 재시도(R) 혹은 종료(Q)중에서 선택해주십시오."

Domain Logic

Application

  • BridgeGame을 trigger한다.

BridgeGame

  • 입력된 다리 길이에 맞춰 BridgeMaker에게 다리를 건설하게 한다.
  • 입력된 값을 따라 U나 D로 이동시킨다.
  • 이동할 칸이 O인지 X인지 판단한다.
    • 이동할 수 있는 칸이라면 이동한다.
    • 이동할 수 없는 칸이라면 이동 후 실패를 선언한다.
      • 재시작 여부를 받아 게임을 재시작하거나 종료시킨다.
  • 다리 길이만큼 이동을 했다면 성공을 선언한 후 종료시킨다.

BridgeMaker

  • 0(Lower)과 1(Upper)를 다리 길이만큼 랜덤하게 뽑아 다리를 건설한다.

Database

BridgeData

  • BridgeMaker로 만들어진 다리에 대한 정보를 저장한다.
  • 현재까지 들어온 유저의 입력을 저장한다.
  • 총 시도한 횟수를 저장한다.

UI Logic

InputView

  • 다리의 길이를 입력받는다.
    • <예외 처리> 다리 길이는 3 이상 20 이하의 숫자이다.
  • U, D중 하나의 칸을 입력받는다.
    • <예외 처리> U나 D만 받을 수 있다.
  • 게임 실패시, 재시작(R)하거나 종료신호(Q)를 입력받는다.
    • <예외 처리> R이나 Q만 받을 수 있다.

OutputView

  • 게임 시작 문구를 출력한다.
  • 이동할 칸 선택 문구를 출력한다.
  • 현재 칸까지 이동한 다리의 상태를 형식에 맞춰 출력한다.
  • 게임 실패시, 재시도 여부 문구를 출력한다.
  • (1)게임 실패후 종료 혹은 (2)게임 성공시 최종 게임 결과 그림을 출력한다.
  • 최종 게임 성공 여부와 총 시도한 횟수를 출력한다.
profile
Progress Gradually, Never Stop

0개의 댓글