/java-blackjack_

블랙잭 미션 저장소

Primary LanguageJava

java-blackjack

블랙잭 미션 저장소

기능 요구 사항

전체 진행

이름 받기 -> 배팅금액 받기 -> 기본 카드 공개 -> 플레이어 카드 추가 여부 -> 딜러 추가 카드 여부 -> 카드 및 점수 출력 -> 최종 승패 출력

View

입력

  • 이름 받기

    • 쉼표 기준으로 받기
    • [예외] 플레이어 이름은 공백이 아니어야한다.
  • 플레이어 별 배팅 금액 받기

    • 배팅 금액은 음수가 아니어야한다.
    • 숫자여야한다.
  • 플레이어 카드 추가 여부

    • y또는 n으로만 입력 받기
    • y일 경우에는 카드 한장 더 추가 및 추가 여부 물어보기
    • n일 경우에는 카드 그만 받기
    • [예외] y또는 n 이외의 값이 들어왔을 경우

출력

  • 기본 카드 공개

    • 플레이어와 딜러에게 카드 2장 지급
    • 플레이어는 카드 2장 출력
    • 딜러는 1장만 출력
  • 카드 및 점수 결과 출력

  • 최종 수익 출력
    • 딜러의 수익
    • 플레이어의 수익

Domain

끗수 (Denomination)

  • 끗수는 A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K로 이루어져 있다.
  • 끗수는 각각 고유한 이름을 가지고 있다.
  • 끗수는 각각 가중치를 가지고 있다.
  • 끗수는 가중치를 조회할 수 있다.
  • 점수 합계를 계산해서 반환한다.
    • ACE 가 포함될 경우, ACE의 점수는 1과 11 중 하나를 사용해서 블랙잭(21점)에 가까운 점수로 반환한다.

무늬 (Suit)

  • 무늬는 (스페이드, 하트, 다이아, 클로버) 4가지 종류로 이루어져 있다.
  • 무늬 이름을 조회할 수 있다.

카드 (Card)

카드는 (A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K) Denomination 과 (스페이드, 하트, 다이아, 클로버)라는 suit 를 가진다.

  • 카드 앞자리는 (스페이드, 하트, 다이아, 클로버)라는 suit로 이뤄진다.
  • 카드 뒷자리는 (A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K) Denomination 으로만 이뤄진다.
  • 카드의 점수를 조회할 수 있다.
  • Denomination 과 suit 가 모두 조합된 카드 52장을 만든다.
  • [예외] 조합된 카드는 유일해야 한다. (Set 활용)

카드들 (Cards)

카드 List 를 표현하기 위한 일급 컬렉션이다. 최소 2장을 갖는다.

  • 카드를 받아 List에 추가한다.
  • 카드들의 총점을 계산해서 반환한다.

카드 덱 (Deck)

게임에서 사용되는 카드 52장을 가진 카드 뭉치이다.

  • 카드 52장을 가진다.
  • 카드를 한장 씩 뽑을 수 있다.
  • [예외] 덱이 비어있는 경우 에러를 던진다.

플레이어 (Player)

블랙잭 게임의 참가자이다.

  • 플레이어는 이름을 가질 수 있다.
  • 플레이어는 최소 두장의 카드를 가질 수 있다.
  • 가진 카드의 총점을 계산하여 반환한다.
  • 플레이어의 총 점수가 21점 이하인 경우 hit가 가능하다.
  • 플레이어는 카드를 받아 합칠 수 있다.

플레이어들 (Players)

  • [예외] 1명 이상이어야한다.

딜러(Dealer)

블랙잭 게임의 진행자이다.

  • 딜러라는 이름을 가진다.
  • 딜러는 최소 두장의 카드를 가질 수 있다.
  • 가진 카드의 총점을 계산하여 반환한다.
  • 딜러의 A 는 Bust 가 되기 전까지는 11로 계산한다.
  • 딜러의 점수가 16점 이하인 경우 카드를 받을 수 있다.
  • 딜러는 카드를 받아 합칠 수 있다.

최종 승패

  • 최초의 2장의 합이 21일 떄만 블랙잭이다.

  • 플레이어들의 승패 여부

    • 플레이어 점수가 21 이하이고, 딜러 점수보다 크면 승리한다.
    • 플레이어 점수가 21 이하이고, 딜러 점수보다 작으면 패배한다.
    • 플레이어와 딜러 모두 Bust 이면 플레이어가 패배한다.
    • 플레이어가 Bust 이면 패배이다.
    • 딜러와 플레이어 점수가 같으면 무승부이다.
  • 딜러의 전적

    • 딜러 점수가 21 이하이고, 플레이어 점수보다 크면 승리한다.
    • 딜러 점수가 21 이하이고, 플레이어 점수보다 작으면 패배한다.
    • 플레이어와 딜러 모두 Bust 이면 딜러가 승리한다.
    • 딜러가 Bust 이면 패배이다.
    • 딜러와 플레이어 점수가 같으면 무승부다

배팅 금액

  • 딜러
    • Bust 이면 Bust 가 아닌 플레이어 배팅 금액 만큼 차감
    • 승리하면 플레이어의 배팅 금액을 얻는다.
    • 패배하면 플레이어의 배팅 금액만큼 차감
    • 블랙잭이면 블랙잭이 아닌 플레이어의 모든 배팅 금액을 얻음
    • 무승부이면 아무런 변화 없음 (딜러와 플레이어 동시에 블랙잭일 때도)
  • 플레이어
    • Bust 이면 배팅 금액을 잃는다.
    • 패배하면 배팅 금액을 잃는다.
    • 승리하면 배팅 금액을 얻는다.
    • 블랙잭이면 배팅 금액의 1.5배를 받는다.

흐름

  • 플레이어 이름을 입력받음

  • 플레이어 별 베팅금액을 입력 받음

  • 카드를 2장씩 나눠가짐

  • 플레이어 별 카드를 더 받을 건지

  • 딜러의 카드 합이 17 이상이 될 때까지 카드를 받음

  • 총 점 계산

  • 최종 수익 산출

논의사항

  • 플레이어가 카드를 다 받은 뒤 딜러의 카드 합이 16이하면 한장을 추가로 받는다. (17이상이면 안받음)
    • 논의사항 : 안받을 경우 안내메시지(딜러는 17이상이라 카드를 받지 않았습니다.) 메세지를 출력해야하는가?
  • A,8,3 일 경우 블랙잭
  • A를 어떻게 처리해야 하는가?

페어 룰