Skip to content

Cl8D/java-blackjack

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🪜 블랙잭 게임 구현 미션

Pair: 져니 ⛄️, 지토 👽

✔ 기능 요구사항

Participant (참가자)

  • 딜러와 플레이어를 관리한다.
    • 카드를 한 장 이상 받는다.
    • 버스트인지 확인한다.
    • 블랙잭인지 확인한다.
    • 카드에 적힌 숫자의 합을 계산한다.
    • 가진 모든 카드를 조회한다.
    • 참가자의 이름을 조회한다.
    • ParticipantName (참가자 이름)
      • 플레이어의 이름의 앞뒤를 공백을 제거한다.
      • 플레이어의 이름은 공백이 들어갈 수 없다.
      • 플레이어의 이름은 1자 ~ 20자까지 가능하다.
    • ParticipantCard (참가자가 가진 카드)
      • 카드를 추가한다.
      • 카드에 적힌 숫자의 합을 계산한다.
      • 버스트 (카드의 합이 21 초과)인지 확인한다.
      • 블랙잭 (카드가 2장이면서, 합이 21)인지 확인한다.
      • 모든 카드를 조회한다.

ParticipantMoney (참가자 돈)

  • 베팅 금액이 정수값인지 검증한다.
  • 베팅 금액이 1,000원 이상, 100,000,000원 이하인지 검증한다.
  • 베팅 금액의 합을 반환한다.
  • 베팅 금액의 차를 반환한다.
  • 베팅 금액의 곱을 반환한다.

Participants (참가자들)

  • 딜러와 플레이어를 관리한다.

Playable (동작 관리 인터페이스)

  • 플레이어와 딜러의 동작을 관리한다.

Player (플레이어)

  • 플레이어는 '딜러'라는 이름을 가질 수 없다.
  • 돈을 베팅한다.
  • 베팅한 금액을 그대로 얻는다.
  • 베팅한 금액을 잃는다.
  • 베팅한 금액의 보너스를 얻는다.
  • 카드를 받는다.
  • 카드를 한 장 더 받을 수 있는지 판단한다.
  • 블랙잭인지 판단한다.
  • 버스트인지 판단한다.
  • 카드의 점수를 계산한다.
  • 점수를 계산한다.
  • 돈을 전부 잃는다.

Players (플레이어들)

  • 플레이어의 수는 1명 ~ 7명까지 가능하다.
  • 플레이어의 이름은 중복될 수 없다.

Dealer (딜러)

  • 첫 번째 카드를 조회한다.
  • 돈을 참가자가 잃은만큼 얻는다.
  • 돈을 참가자가 얻은 만큼 잃는다.
  • 카드를 받는다.
  • 카드를 한 장 더 받아야 하는지 판단한다.
  • 블랙잭인지 판단한다.
  • 버스트인지 판단한다.
  • 카드의 점수를 계산한다.
  • 점수를 계산한다.
  • 돈을 전부 잃는다.

Deck (카드들)

  • 52장의 카드 뭉치를 생성한다.
  • 카드 한 장을 뽑는다.

Card (카드)

  • 카드 패턴과 카드 번호를 조합하여, 카드를 생성한다.
  • 카드가 Ace인지 확인한다.
  • CardPattern (카드 패턴)
    • '하트', '스페이드', '다이아', '클로버'를 반환한다.
  • CardNumber (카드 번호)
    • 2~10, Ace, King, Queen, Jack을 반환한다.
    • 카드가 Ace인지 확인한다.
    • 카드의 번호를 조회한다.

CardRandomShuffler (카드 랜덤 셔플러)

  • 주어진 카드 뭉치를 랜덤으로 섞는다.

CardShuffler (카드 셔플러)

  • 주어진 카드 뭉치를 섞는다.

Score (점수)

  • 점수의 합을 계산한다.
  • 점수의 차를 계산한다.
  • 기준 점수보다 더 큰지 계산한다.
  • 기준 점수보다 더 크거나 같은지 계산한다.

GameManager (게임 관리자)

  • 게임 시작 시, 참가자들에게 카드 2장을 건네준다.
  • 첫 턴의 결과를 판단하여 플레이어의 돈을 딜러에게 혹은 플레이어에게 보너스를 준다.
  • 참가자가 원한다면 카드 1장을 건네준다.
  • 최종적으로 수익을 계산한다.
  • 딜러가 추가로 돈을 받을 수 있는지 체크한다.

EarningRate (수익률)

  • 수익률 조건에 따라 베팅 금액을 계산한다.

BettingManager (베팅 금액 분배자)

  • 처음에 2장을 받은 후, 딜러가 승리한지 판단하고 돈을 분배한다.
  • 처음에 2장을 받은 후, 플레이어가 승리한지 판단하고 돈을 분배한다.
  • 최종적으로 딜러가 승리한지 판단하고 돈을 분배한다.
  • 최종적으로 플레이어가 승리한지 판단하고 돈을 분배한다.

MoneyMultiplier (금액 곱셈기)

  • 조건에 따라 곱해야 하는 값을 관리한다.

InputView

  • 플레이어의 이름을 쉼표로 구분하여 입력받는다.
  • 일반 참가자가 카드를 한 장 더 받을지에 대한 유무를 입력받는다.

OutputView

  • 게임 시작 시, 플레이어의 카드 정보를 출력한다.
  • 카드를 받을지에 대한 여부를 입력하면, 현재 가지고 있는 카드를 출력한다.
  • 딜러가 카드를 더 받을지에 대한 여부를 출력한다.
  • 게임이 완료되면, 플레이어의 카드 종류와 카드의 합을 출력한다.
  • 게임이 완료되면, 각 플레이어의 카드 합을 판단하여 최종 승패를 출력한다.

GameController

  • 게임을 실행한다.
  • DrawCardCommand (사용자 입력 명령어)
    • 사용자가 어떤 명령어를 입력했는지 판단한다.

✔ 기능 다이어그램


✔️ 프로그래밍 요구사항

  • indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다.
  • 3항 연산자를 쓰지 않는다.
  • else 예약어를 쓰지 않는다. (switch/case 포함)
  • 모든 기능을 TDD로 구현해 단위 테스트가 존재해야 한다. 단, UI(System.out, System.in) 로직은 제외
  • 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
  • 함수(또는 메서드)의 길이가 10라인을 넘어가지 않도록 구현한다.
  • 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라.
  • 배열 대신 컬렉션을 사용한다.
  • 모든 원시 값과 문자열을 포장한다
  • 줄여 쓰지 않는다(축약 금지).
  • 일급 컬렉션을 쓴다.
  • 모든 엔티티를 작게 유지한다.
  • 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  • 딜러와 플레이어에서 발생하는 중복 코드를 제거해야 한다.

About

블랙잭 미션 저장소

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%