KS-KIM / java-blackjack-precourse

프리코스 블랙잭 미션

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

블랙잭

우아한 테크코스 - 프리코스 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 준수
  • 3항 연산자 사용하지 않기
  • else 예약어를 사용하지 않기
    • 함수로 분리하여 return 키워드 사용하기
  • switch/case문 사용하지 않기
  • 배열보다는 Collections 사용
  • 불필요한 공백 만들지 않기
  • 메서드는 공백 포함 10라인을 넘지 않기
  • 상수를 하드코딩하지 않기
  • 들여쓰기의 depth를 1까지만 허용
    • Stream API를 활용하기
  • 함수의 인자 수를 최대 3개까지만 허용
  • 이름을 통해 의도 드러내기
    • 정말 특별한 경우가 아니라면 주석을 사용하지 않기
  • 이름을 축약하지 않기

About

프리코스 블랙잭 미션


Languages

Language:Java 100.0%