Skip to content

chxghee/java-ladder-func-playground

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

사다리 타기 🪜

네이버의 사다리 타기 게임과 같이 콘솔 환경에서 사다리 게임을 진행할 수 있는 프로그램


1단계 - 사다리 출력

📝 기능 요구사항

✅ 사다리는 4x4 크기로 고정되고, 연결 여부는 랜덤으로 결정한다.

✅ 사다리 타기가 정상적으로 동작하려면 라인이 겹치지 않도록 해야 한다.

💻 구현 전략

  1. 나의 오른쪽 사다리와 연결 여부를 나타내는 Link enum클래스
    ➡️ LINKED / UNLINKED 두 가지 타입을 갖는다.

  2. 사다리의 수평 구조물을 의미하는 HorizontalLine 클래스
    ➡️ 필드로 Link 클래스의 리스트를 갖는다.
    ➡️ 가로로 사다리를 건널 수 있을 지 없을 지를 Link 타입으로 알 수 있다.

  3. 전체 사다리를 의미하는 Ladder 클래스
    ➡️ 필드로 HorizontalLine 클래스의 리스트를 갖는다.
    ➡️ 세로가 아닌 가로로 사다리의 정보를 갖는다.



2단계 - 사다리 생성

📝 기능 요구사항

✅ 사다리는 크기를 입력 받아 생성할 수 있다.

💻 구현 전략

  1. InputView 클래스를 통해 사다리 높이와 넓이를 입력받는다.
    ➡️ 컨트롤러에서 InputView 클래스의 메서드를 호출해 높이와 넓이를 입력받는다.

  2. Ladder 클래스정적 팩토리 메서드 of에 입력받은 크기 정보를 넘겨주어 사다리를 생성한다.


3단계 - 사다리 타기

📝 기능 요구사항

✅ 사다리의 시작 지점과 도착 지점을 출력한다.

💻 구현 전략

  1. MovingDirection enum 클래스를 통해 사다리의 이동 전략을 관리한다.
    ➡️ Enum 클래스에서 함수형 인터페이스를 통해 이동 방향별(RIGHT / LEFT / STAY) 전략을 람다식으로 설정한다.

  2. 사다리 게임 진행
    ➡️ Ladder 클래스의 ride 메서드를 통해 시작 위치를 전달하면 결과 위치를 반환한다.
    ➡️ HorizontalLine 클래스의 move 메서드를 통해 현재 위치에서 움직일 수 있는지 판단하고 위치를 옮긴다.



4단계 - 게임 실행

📝 기능 요구사항

✅ 사다리 게임에 참여하는 사람에 이름을 최대 5글자까지 부여할 수 있다. 사다리를 출력할 때 사람 이름도 같이 출력한다.

✅ 사람 이름은 쉼표(,)를 기준으로 구분한다.

✅ 개인별 이름을 입력하면 개인별 결과를 출력하고, "all"을 입력하면 전체 참여자의 실행 결과를 출력한다.

💻 구현 전략

  1. 게임 참가자의 이름과 사다리 위치 정보를 갖는 User 클래스와 이러한 User 클래스를 리스트로 갖는 Users 클래스를 통해 게임에 참가하는 유저를 관리

  2. 게임 결과의 이름과 사다리 위치 정보를 갖는 Prize 클래스와 이러한 Prize 클래스를 리스트로 갖는 Prizes 클래스를 통해 게임의 결과정보를 관리

  3. 입력 포맷에 대한 검사는 view단에서 빠르게 처리하고, 그 외 도메인과 관련이 깊은 입력의 유효성 검사는 각 도메인 클래스에서 처리한다.
    ➡️ 이름,결과 입력 포멧 검사 - InputValidator 클래스
    ➡️ 이름 중복, 길이, 유효한 이름인지 검사 - Users 클래스
    ➡️ 실행 결과 입력 개수 검사 - Prizes 클래스

  4. 사다리 게임의 결과 집계
    ➡️ LadderGameResult 클래스 - <User, Prize> 를 key-value로 하는 결과MAP을 생성한다.

About

초록 스터디 자바 기초 과정 사다리 미션을 위한 저장소

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%