네이버의 사다리 타기 게임과 같이 콘솔 환경에서 사다리 게임을 진행할 수 있는 프로그램
✅ 사다리는 4x4 크기로 고정되고, 연결 여부는 랜덤으로 결정한다.
✅ 사다리 타기가 정상적으로 동작하려면 라인이 겹치지 않도록 해야 한다.
-
나의
오른쪽
사다리와 연결 여부를 나타내는Link enum클래스
➡️LINKED
/UNLINKED
두 가지 타입을 갖는다. -
사다리의 수평 구조물을 의미하는
HorizontalLine 클래스
➡️ 필드로 Link 클래스의 리스트를 갖는다.
➡️ 가로로 사다리를 건널 수 있을 지 없을 지를 Link 타입으로 알 수 있다. -
전체 사다리를 의미하는
Ladder 클래스
➡️ 필드로 HorizontalLine 클래스의 리스트를 갖는다.
➡️ 세로가 아닌 가로로 사다리의 정보를 갖는다.
✅ 사다리는 크기를 입력 받아 생성할 수 있다.
-
InputView 클래스
를 통해 사다리 높이와 넓이를 입력받는다.
➡️ 컨트롤러에서InputView 클래스
의 메서드를 호출해 높이와 넓이를 입력받는다. -
Ladder 클래스
의정적 팩토리 메서드 of
에 입력받은 크기 정보를 넘겨주어 사다리를 생성한다.
✅ 사다리의 시작 지점과 도착 지점을 출력한다.
-
MovingDirection enum 클래스
를 통해 사다리의 이동 전략을 관리한다.
➡️ Enum 클래스에서 함수형 인터페이스를 통해 이동 방향별(RIGHT / LEFT / STAY) 전략을 람다식으로 설정한다. -
사다리 게임 진행
➡️ Ladder 클래스의ride 메서드
를 통해 시작 위치를 전달하면 결과 위치를 반환한다.
➡️ HorizontalLine 클래스의move 메서드
를 통해 현재 위치에서 움직일 수 있는지 판단하고 위치를 옮긴다.
✅ 사다리 게임에 참여하는 사람에 이름을 최대 5글자까지 부여할 수 있다. 사다리를 출력할 때 사람 이름도 같이 출력한다.
✅ 사람 이름은 쉼표(,)를 기준으로 구분한다.
✅ 개인별 이름을 입력하면 개인별 결과를 출력하고, "all"을 입력하면 전체 참여자의 실행 결과를 출력한다.
-
게임 참가자의 이름과 사다리 위치 정보를 갖는
User 클래스
와 이러한 User 클래스를 리스트로 갖는Users 클래스
를 통해 게임에 참가하는 유저를 관리 -
게임 결과의 이름과 사다리 위치 정보를 갖는
Prize 클래스
와 이러한 Prize 클래스를 리스트로 갖는Prizes 클래스
를 통해 게임의 결과정보를 관리 -
입력 포맷에 대한 검사는 view단에서 빠르게 처리하고, 그 외 도메인과 관련이 깊은 입력의 유효성 검사는 각 도메인 클래스에서 처리한다.
➡️ 이름,결과 입력 포멧 검사 -InputValidator 클래스
➡️ 이름 중복, 길이, 유효한 이름인지 검사 -Users 클래스
➡️ 실행 결과 입력 개수 검사 -Prizes 클래스
-
사다리 게임의 결과 집계
➡️LadderGameResult 클래스
- <User, Prize> 를 key-value로 하는 결과MAP을 생성한다.