/java-ladder

사다리타기 미션을 위한 저장소

Primary LanguageJava

기능 요구 사항

도메인

  • 사다리 게임에 참여하는 사람의 이름은 한 글자 이상 다섯 글자 이하이다.
    • 이름이 다섯글자를 초과하거나 공백이면 예외를 던진다.
  • Users는 User 들로 이루어진 일급 컬렉션이다.
    • 중복이름이 있으면 예외가 발생한다.
    • List의 size가 1이하일떄 예외가 발생한다.
  • 사다리의 높이는 1 이상이다.
  • 사다리의 너비는 User들의 수보다 1 적다.
  • 한 층은 Point들의 집합으로 이루어진다.
  • Point는 두 칸 사이를 이어주는 다리이다.
    • Point의 필드 값이 true이면 생성된 다리이다.
      • 생성된 다리일 경우 Point.FILLED, 미생성시 Point.EMPTY
    • 한 층의 이웃한 Point는 연속해서 생성될 수 없다.
  • Ladder에서 NumberGenerator를 통해 다리 생성 결정 값 리스트를 만들어서 Floor에 전달한다.
    • 전략 패턴을 이용해 TestNumberGenerator를 만들어서 테스트한다.

입력

  • User 이름을 "," 기준으로 입력 받는다.
  • 사다리 층수를 입력받는다.
    • 숫자만 입력 받을 수 있다.

출력

  • 이름과 사다리를 출력한다.

변경 요구 사항

  • README.md 업데이트
  • 컨벤션 정리
  • 방어적 복사 적용
  • 테스트 케이스 보강
  • name String 원시값 포장

추가 변경

  • 랜덤 생성을 nextInt에서 nextBoolean 으로 변경
  • Line 객체 역할을 Point enum이 대체

step2

변경 요구 사항

  • given when then 스타일 테스트 작성
  • 보는 사람이 읽기 쉬운 코드 작성!
  • 컨트롤러 메인문 분리

기능 추가 사항

  • 사다리 추첨에 따른 상품을 추가한다.
    • 상품 이름은 공백을 입력할 수 없다.
    • 상품 컬렉션의 크기는 유저 컬렉션의 크기와 같다.
  • Username 이나 all 을 입력 받고 결과를 출력한다.
    • all을 입력받을 떄까지 입력은 반복해서 받는다.
    • 없는 유저 이름을 입력하면 안내 메시지를 출력한다.
    • all 이라는 유저 이름을 입력 받지 못하게 한다.
  • 결과 도출 로직 구현
    • users내의 인덱스를 파라미터로 받아서 작동한다.
    • 한 층에서 좌우의 Point 존재 여부를 확인하고 이동한다.
    • 마지막 층에 도달하면 해당 인덱스의 상품을 출력한다.