블랙잭 미션 저장소
접두어로 docs
, test
, feat
, fix
, refactor
, chore
사용
example feat: 사용자 입력 후 도메인 사용
- 생성 시점에서 카드를 섞는다.
- 카드를 뽑을 수 있다.
- 카드가 존재하지 않을 경우, 예외가 발생한다.
- 승패를 계산해서 반환한다.
- 딜러는 모든 플레이어와 결과를 계산한다.
- 플레이어는 딜러와의 결과만을 계산한다.
- 딜러가 bust되었을 경우
- 21이하 참가자는 모든 1승
- bust된 참가자는 패로 기록한다.
- 딜러가 21 이하인데, 플레이어랑 다른 겨우
- 참가자는 숫자를 비교하여 21에 가까운 사람이 승리한다.
- 딜러와 참가자의 수가 같은 경우, 패로 기록한다.
- bust된 참가자는 패로 기록한다.
- 딜러와 플레이어의 점수가 같은 경우
- 블랙잭인 사람이 승리한다.
- 그래도 무승부일 경우는 무승부로 판정한다.
- 참가자가 카드를 뽑는다.
- 딜러의 손패는 한장만 반환한다.
- 딜러는 16점 이하면 카드를 추가 지급한다.
- 16점 비교 로직을 딜러 내에서 관리한다.
- 참가자가 카드를 뽑는다.
- 참가자가 뽑을 수 있는 상태인지 확인한다.
- 들고 있는 카드의 전체 점수를 반환한다.
- 카드는 점수를 반환한다.
- Ace는 1 또는 11점으로 계산한다.
- J,Q,K는 10으로 계산한다.
- Ace는 21보다 클 경우에는 1로, 그렇지 않으면 11로 계산한다.
- 카드의 기호와 숫자를 반환한다.
- 참가자 이름을 입력 받는다.
- 각 참가자는 ,로 구분한다.
- 참가자 이름의 중복을 검증한다.
- 위의 형식에 맞지 않은 이름 형식은 예외가 발생한다.
- 딜러의 카드는 한 장만 공개한다.
- 게임 완료 후 승패를 출력한다.
- 카드 분배 결과를 출력한다.
- 카드를 추가 지급 받을지 물어본다.
- 응답은 y/n로만 받을 수 있다.
- 응답이 n이거나 카드의 합이 21일때까지 물어본다.
- y/n 여부와 상관없이 현플레이어의 손패를 출력한다.
- 위의 형식에 맞지 않은 응답은 예외가 발생한다.
- 플레이어가 딜러로부터 카드를 받도록 리팩터링한다.
- 딜러는 덱을 필드로 갖는다.
- 딜러의 이름 필드를 제거한다.
-
protected
필드 직접 접근 문제 해결한다. -
Participant
를Gamer
로 변경한다. - 불변 리스트로 변환한다.
-
Judge
의 테스트를 진행한다. -
Rank
,Suit
를 trumpCard 패키지로 변경한다. -
calculateAce
메서드명을 변경한다. -
BlackjackResult
에서 count 대신 getter로 변경한다. -
BlackjackGame
메서드 분리 - 호출되는 메서드는 호출하는 메서드 아래에 위치한다.
- 여러 곳에서 호출될 경우, 마지막 호출 메서드 아래에 위치한다.
- 순서가 conflict될 경우, 함수 내의 호출 순서로 메서드 위치를 결정한다.
- 딜러라는 이름을 사용할 수 없게 한다.
- 숫자를 이름으로 쓸 수 없게 한다.
- Factory 내의 생성 로직을 카드의 타입을 인자로 전달하고 하나의 메서드로 처리한다.
- 기본 생성자를 명시적으로 작성하지 않는다.
- 명시적으로
NoShuffleStrategy
같은 이름을 사용해주면 테스트의 가독성을 높인다. - drawn에서 draw로 변경한다.
- selfDraw를 인자로 횟수를 전달한다.
- Player가 Card를 넘겨받게 수정한다.
- System.lineSeperator() 가 반복적으로 나오면서 가독성을 해친다. 이를 수정한다.
- 트럼프카드의 심볼을 복수로 변경한다.
- Enum 마지막에 ,를 넣어 세미콜론을 하나 아래로 내리면 나중에 값을 추가할 때 conflict을 방지한다.
- requestExtraCard처럼 동사형 메서드 네이밍을 갖게 한다.
- 게임 로직 관리 중에서 Player가 카드를 계속 받을지 말지 결정하는 로직을 제외하고는 별도의 객체 안에서 관리하게 한다.
- CardView라는 객체를 만들어서 그 안에 RankView, SuitView를 가지고 있고 카드 출력에 책임을 전부 관리하게 한다.
- print 내의 비즈니스 로직은 뽑아낸다.