블랙잭 게임을 변형한 프로그램을 구현한다. 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21 또는 21에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다.
- 카드의 숫자 계산은 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다.
- 게임을 시작하면 플레이어는 두 장의 카드를 지급 받으며, 두 장의 카드 숫자를 합쳐 21을 초과하지 않으면서 21에 가깝게 만들면 이긴다. 21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다.
- 입출력 담당
- 카드 구성 [Card] 는 [Suit] 와 [Number] 로 구성 되어 있따.
- 최초 카드 목록 [CardDeck] (랜덤으로 구성, 사용자에게 1장씩 나뉘어 줄 수 있다.)
- 참여자가 가지게 되는 카드 목록 [Cards] (최초 2장 이상이르 구성, 포인트를 계산 할 수 있다.)
- 게임 참여자 [Player](카드를 한장 얻거나, Bust 유무를 알 수 있다.)
2단계를 기반으로 추가 요구사항을 구현
- 딜러는 처음에 받은 2장의 합계가 16이하이면 반드시 1장의 카드를 추가로 받아야 하고, 17점 이상이면 추가로 받을 수 없다.
- 딜러가 21을 초과하면 그 시점까지 남아 있던 플레이어들은 가지고 있는 패에 상관 없이 승리한다.
- 게임을 완료한 후 각 플레이어별로 승패를 출력한다.
- [Player] 와 [Dealer] 의 공통 기능을 추상화한 [Participant] 클래스 추가
- 게임의 결과를 판별하는 [Winner] 클래스 추가
3단계를 기반으로 추가 요구사항을 구현
- 플레이어는 게임을 시작할 때 베팅 금액을 정해야 한다.
- 카드를 추가로 뽑아 21을 초과할 경우 베팅 금액을 모두 잃게 된다.
- 처음 두 장의 카드 합이 21일 경우 블랙잭이 되면 베팅 금액의 1.5 배를 딜러에게 받는다. 딜러와 플레이어가 모두 동시에 블랙잭인 경우 플레이어는 베팅한 금액을 돌려받는다.
- 딜러가 21을 초과하면 그 시점까지 남아 있던 플레이어들은 가지고 있는 패에 상관 없이 승리해 베팅 금액을 받는다.
- 참여자(딜러, 플레이어)는 베팅,수익 금액에 대한 정보를 기록하도록 수정 한다.
- 게임의 결과는 Winner 와 Loser 로 구분한다.
- 승패에 따라 수익을 계산 하는 Income 객체를 추가한다.
- 플레이어만 블랙잭인 경우 1.5 배의 수익을 계산한다.