/기본 규칙/
카드값은 2~10까지는 그대로, JQK 는 10, Ace 는 11로 취급한다.
하지만 Ace 를 11로 취급했을 때 버스트가 난다면 이것은 1로 간주한다.
==========
/전체적인 흐름/
블랙잭 시작
플레이어, 딜러 각각 1명씩 생성
시작하자마자 서로 카드 2장씩 뽑음
플레이어 => 딜러 순을 반복하며 카드를 뽑음. 한 쪽이 더이상 뽑지 않는다면
상대 쪽은 한장씩 더 뽑을지, 그대로 멈출지 결정한다.
플레이어는 카드 값 합이 21을 넘기지 않는 한에서 계속 카드 뽑기 가능.
딜러는 카드 값 합이 17 이상이 될 때 까지 계속 카드를 뽑음.
카드를 추가로 뽑을 때, 한 쪽이 21을 넘겼다면 버스트. 상대편이 승리.
둘 다 카드를 더이상 받지 않는 상태가 되면 서로의 카드를 공개하고, 카드값의 합을 보여줌.
카드값의 합이 21에 가까운 쪽이 승리. 서로 같다면 무승부.
==========
/클래스/
핸드 부분에서 플레이어와 딜러 각자의 핸드 상태를 출력하기 위해 List 를 get으로 선언하고,
손패 전체를 가져오는 List GetCards() 를 만들었다.
손패 현황을 출력할 때, 가시성을 향상시키기 위해 ToString 부분을 수정하였다.
블랙잭 클래스의 코드에 각종 기능들과 변수들이 과하게 집중되는 것을 분산시키려고
Stay 여부를 확인하는 부분은 Player 클래스 쪽의 변수와 함수로 넘겨두었다.
-
Card 클래스 - 문장과 랭크를 public 변수로 가지고, 카드값 반환(return int)과 카드 내용을 반환(return string)하는 기능이 있다.
-
Deck 클래스 - 생성자 호출 시 중복 없는 52개의 카드를 가진 리스트를 자동으로 생성, 카드 섞기까지 완료함.
카드들의 리스트를 private 변수로 가진다. 카드 섞기, 카드 뽑기 기능이 있다. -
Hand 클래스 - 처음에는 비어 있는 카드 리스트를 읽기 한정 private 변수로 가진다.
카드 뽑기(return Card), 카드값 합 반환(return int), 카드 리스트 반환(return List) 기능이 있다. -
Player 클래스 - 생성자 호출 시 핸드 객체를 생성한다. 핸드 객체를 읽기 한정 public 변수로 가진다.
덱에서 카드 뽑기(Deck 입력받고 return Card) 기능이 있다. -
Dealer(Player 상속) 클래스 - 딜러 역할의 객체 생성. 대부분은 플레이어의 것과 같은 기능을 가지나,
카드값의 합이 17 이상이 될 때 까지 카드를 뽑는 기능만 추가한 형태. -
Blackjack - 실질적으로 본 게임을 담당할 클래스. 시작하자마자 2개의 패를 각자의 핸드에 집어넣는 기능,
각 플레이어의 현재 상태를 출력하는 기능, 승부가 났는지 확인하는 기능 등 게임 진행에 필요한 기능들을 총괄한다. -
main - 단순히 Blackjack 객체를 생성해서 Blackjack.GameStart() 함수만 호출할 예정.