(c)도경구 version 1.0 (2022/10/28)
8. 인터페이스와 클래스 계층 구조
숙제 - 블랙잭 카드 게임 (제출 마감: 11월 10일)
블랙잭(Sudoku)은 카지노에서 가장 인기 있는 카드게임 중 하나이다. 갖고 있는 카드 점수의 합이 21을 넘지 않는 한도 내에서, 딜러와 겨루어 점수가 높으면 이기는 게임이다.
블랙잭에 사용하는 놀이 카드는 스페이드(spade), 하트(heart), 클럽(club), 다이아몬드(diamond)의 네 가지 무늬(suit)가 있으며, 무늬별로 A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K의 13 가지 끗수(rank)가 있어서, 총 52장으로 구성된다.
블랙잭의 카드 점수 매기는 규칙
- A(Ace) 카드는 1점 또는 11점 중 유리한대로 선택할 수있다.
- J, Q, K 카드의 점수는 각각 10점이다.
- 나머지 카드 2~10의 점수는 액면대로 매긴다.
블랙잭 게임 규칙
- 딜러가 카드 두 장을 손님과 자신에게 각각 한 장씩 교대로 나누어 준다.
- 딜러의 첫째 카드는 공개하지 않고, 나머지 카드는 모두 공개한다.
- 처음 받은 카드 두 장이 A와 10, J, Q, K 중 하나로 구성되어 합이 21이 되면 블랙잭으로 손님이 무조건 이긴다.
- 손님은 먼저 받은 카드 두 장의 합이 21에 못 미치면, 원하는 만큼 한 장씩 더 받을 수 있다.
- 21을 초과하면 버스트(bust)가 되어 무조건 진다.
- 딜러는 카드의 합이 16 이하이면 카드를 무조건 더 받아야 하고, 17 이상이면 더 이상 받을 수 없다.
- 딜러 카드의 합과 손님 카드의 합이 같으면 비긴다.
블랙잭 카드게임 애플리케이션을 아래의 클래스 다이어그램에서 제시한 대로 구현하자.
일단 다음의 요구 사항대로 구현한다.
요구 사항
-
손님의 이름을 입력 받는다.
-
카드는 1벌(52장)을 잘 섞어서 사용한다. 다 쓰면 1벌을 새로 만들어 다시 잘 섞 어서 사용한다. (수업 시간에 작성한
Card
와CardDeck
클래스 활용) -
카드는 처음 2장씩 나누어 주는데, 손님, 딜러, 손님, 딜러 순으로 나누어주고, 딜 러의 첫 카드는 감춘다.
-
손님은 점수가 21점 미만인 경우 카드를 추가로 요청할 수 있다.
-
손님에게 추가 카드를 원하는지 물어봐야 하며, 손님은 y(예) 또는 n(아니오)로 의사를 표시한다.
-
딜러는 카드의 합이 16점 이하이면 카드를 추가로 한 장 무조건 받아야 하며, 16점을 넘으면 더 이상 받을 수 없다.
-
A(에이스)는 1점 또는 11점 중 하나를 유리한 쪽으로 선택할 수 있어야 한다.
-
손님은 이길 때마다 칩을 하나씩 획득한다. 첫 두장의 합이 21이 되면 딜러의 카드는 볼 필요 없이 손님이 이기는데, 이 경우 칩을 두개 획득한다. 손님이 지면 칩을 하나 잃는다. 손님이 보유하고 있는 칩의 개수는 매 라운드가 진행하면서 항상 보여주어야 한다. 잃은 경우 음수가 될 수도 있다.
-
매 라운드마다 게임을 계속할지 물어봐야 하며, 손님은 y(예) 또는 n(아니오)로 의사를 표시한다.
-
게임을 진행하면서 받은 딜러와 손님의 카드는 모두 텍스트로 보여주어야 하며, 손님이 보유하고 있는 칩의 개수도 텍스트로 보여주어야 한다.
-
게임의 진행하면서 입력은
swing
패키지의JOptionPane.showInputDialog()
활용하고, 출력은System.out
을 활용하여 실행창에 보여준다. 추후에 이벤트 구동 프로그래밍을 배운 다음 다양한 GUI를 활용하는 걸로 입출력 방식을 개선할 수 있다.