우아한 테크코스 - 프리코스 3주차 '블랙잭' 구현
- 사용자로부터 게임에 참여할 사람의 이름을 입력받는다.
- 예외: 이름이 콤마(',') 단위로 구분되지 않은 경우
- 예외: 각 이름의 길이가 1~5자 사이가 아닌 경우
- 예외: 이름 사이에 공백이 포함된 경우
- 예외: 참여 인원이 1~8명 사이가 아닌 경우
- 예외: 참여자명이 중복되는 경우
- 사용자로부터 모든 플레이어의 베팅 금액을 입력받는다.
- 예외: 베팅하는 금액이 0보다 작거나 같은 경우
- 각 플레이어와 딜러에게 두 장의 카드를 지급한다.
- 한 게임이 진행될 동안 동일한 카드는 지급되지 않는다.
- 딜러는 자신이 받은 두 장의 카드 중 한 장만 보여준다.
- 플레이어는 자신이 받은 카드 두 장을 보여준다.
- 각 플레이어로부터 한 장의 카드를 더 받을지 여부를 입력받는다.
- 예외: 입력값이 "y"(히트) 또는 "n"(스탠드)이 아닌 경우
- 한 명의 플레이어는 카드 합이 21을 넘기 전까지 계속 카드를 받을 수 있다.
- "n"을 입력하여 카드 받기를 멈추면 다음 플레이어의 턴으로 넘어간다.
- 딜러가 카드 드로우를 시작한다.
- 카드 합이 16 이하인 경우 반드시 1장의 카드를 추가로 뽑는다.
- 카드 합이 17 이상인 경우 턴을 종료한다.
- 카드의 합이 21을 넘지 않으면 ACE를 11로 취급한다.
- 플레이어의 선택과 딜러의 카드 결정이 끝난 후에는 가지고 있는 카드의 상태를 출력한다.
- 종료: 모든 플레이어가 "n"(스탠드)를 선택했거나 수가 21을 초과하여 더 이상 카드를 드로우 할 수 없는 경우
- 숫자 카드를 제외한 King, Queen, Jack 카드는 10으로 계산한다.
- ACE는 1 또는 11, 유리한 쪽으로 선택할 수 있다.
- ACE 하나를 11로 취급했을때 21보다 작거나 같은 값이 나오면 11로 취급한다.
- ACE 하나를 11로 취급했을때 21보다 큰 값이 나오면 1로 취급한다.
- 딜러와 플레이어의 점수를 출력한다.
- 딜러와 플레이어의 최종 수익을 출력한다.
- 우선순위: 딜러가 블랙잭 > 플레이어가 블랙잭 > 딜러가 버스트 > 이외의 경우
- 딜러가 가진 두 장의 카드 합이 21인 경우 (블랙잭)
- 무승부: 딜러와 플레이어가 동시에 블랙잭인 경우 (이익: 베팅액의 0.0배)
- 플레이어 패배: 딜러만 블랙잭인 경우 (이익: 베팅액의 -1.0배)
- 딜러의 카드 합이 21을 초과하는 경우 (버스트)
- 플레이어 우승: 플레이어의 카드 합이 21을 초과하지 않는 경우 (이익: 베팅액의 1.0배)
- 플레이어 패배: 플레이어의 카드 합이 21을 초과하는 경우
- 딜러의 카드 합이 21 이하인 경우
- 플레이어 우승: 딜러보다 높은 점수를 가진 경우
- 플레이어가 블랙잭인 경우 (이익: 베팅액의 1.5배)
- 단순히 카드 합이 높은 경우 (이익: 베팅액의 1.0배)
- 무승부 딜러와 플레이어의 카드 (이익: 베팅액의 0.0배)
- 플레이어 패배 딜러보다 낮은 점수를 가진 경우 (이익: 베팅액의 -1.0배)
- 플레이어 우승: 딜러보다 높은 점수를 가진 경우
- 카드를 받는다.
- 점수를 계산한다.
- 블랙잭 여부를 판별한다.
- 버스트 여부를 판별한다.
- 다음 카드를 드로우 할 수 있는지 판단한다.
- 베팅액을 가진다.
- 이율을 입력받아 수익을 계산한다.
- 딜러와 패를 비교하여 결과를 판별한다.
- java coding convention 준수
- java coding convention
- 개발 도구의 code format 활용
- 3항 연산자 사용하지 않기
- else 예약어를 사용하지 않기
- 함수로 분리하여 return 키워드 사용하기
- switch/case문 사용하지 않기
- 배열보다는 Collections 사용
- 불필요한 공백 만들지 않기
- 메서드는 공백 포함 10라인을 넘지 않기
- 상수를 하드코딩하지 않기
- 들여쓰기의 depth를 1까지만 허용
- Stream API를 활용하기
- 함수의 인자 수를 최대 3개까지만 허용
- 이름을 통해 의도 드러내기
- 정말 특별한 경우가 아니라면 주석을 사용하지 않기
- 이름을 축약하지 않기