카드(Card)는 1 ~ 13까지 있다. 각 번호당 다음 4개의 문양이 있다.
- ♠: 스페이드
- ♥: 하트
- ♦: 다이아몬드
- ♣: 클로버
예시: 1(♠), 1(♥), 1(♦), 1(♣), 2(♠), 2(♥), 2(♦), 2(♣) ... 13(♠), 13(♥), 13(♦), 13(♣)
따라서 13 × 4 = 총 52장의 카드가 있다.
- 52장의 카드가 있는 카드 뭉치를 **덱(
Deck)**이라 한다. - **2명의 플레이어(
Player)**가 게임을 진행한다.
- 덱에 있는 카드를 랜덤하게 섞는다.
- 각 플레이어는 덱에서 카드를 5장씩 뽑는다.
- 각 플레이어는 5장의 카드를 정렬된 순서대로 보여준다.
- 정렬 기준:
- 작은 숫자가 먼저 나온다.
- 같은 숫자의 경우 ♠, ♥, ♦, ♣ 순으로 정렬한다. ♠가 가장 먼저 나온다.
- 예시: 1(♠), 1(♥), 2(♦), 3(♣) 순서로 출력
- 정렬 기준:
- 카드 숫자의 합계가 큰 플레이어가 승리한다.
- 게임을 단순화하기 위해 숫자만 계산한다.
- 합계가 같으면 무승부이다.
플레이어1의 카드: [2(♠), 7(♥), 7(♦), 8(♣), 13(♠)], 합계: 37
플레이어2의 카드: [1(♠), 1(♣), 6(♠), 9(♠), 9(♣)], 합계: 26
플레이어1 승리
플레이어1의 카드: [2(♦), 3(♠), 6(♥), 10(♣), 13(♦)], 합계: 34
플레이어2의 카드: [2(♠), 4(♣), 5(♠), 11(♣), 12(♥)], 합계: 34
무승부
"\u2660" // 스페이드(♠)
"\u2665" // 하트(♥)
"\u2666" // 다이아몬드(♦)
"\u2663" // 클로버(♣)- 역할: 카드 한 장을 표현
- 속성:
int num: 카드 번호 (1~13)String pattern: 카드 패턴 ("Spade", "Heart", "Diamond", "Club")
- 주요 메서드:
toString(): 카드를 "7(♥)" 형태로 출력compareTo(): 카드 정렬을 위한 비교 (Comparable 구현)getPattern(): 패턴을 숫자로 변환 (정렬 기준)
- 역할: 52장 카드 뭉치 관리
- 속성:
List<Card> cards: 52장의 카드 저장
- 주요 메서드:
- 생성자: 52장 카드 자동 생성
cardShuffle(): 카드 섞기draw(): 카드 한 장 뽑기size(): 남은 카드 개수 확인
- 역할: 플레이어와 손에 든 카드 관리
- 속성:
String name: 플레이어 이름List<Card> hand: 손에 든 카드들 (5장)
- 주요 메서드:
receiveCard(): 카드 받기sortHand(): 손에 든 카드 정렬calculateSum(): 카드 합계 계산showHand(): 카드 출력
- 역할: 전체 게임 진행 관리
- 주요 메서드:
start(): 게임 시작dealCards(): 카드 나눠주기determineWinner(): 승부 판정displayResult(): 결과 출력
- Card 클래스 완전 구현
- Deck 클래스 완전 구현
- Player 클래스 완전 구현
- Referee 클래스 완전 구현
- 기본 동작 테스트 완료
- ENUM 도입