데브허브 | DEVHUB | Go Fish (Card Game) - Low Level Design Interview QuestionGo Fish (Card Game) - Low Level Design Interview Question
- Go Fish 게임의 핵심 목표: 플레이어는 상대방에게 특정 랭크의 카드를 요청하여 4장의 동일 랭크 카드 세트(책)를 모으는 것이 목표입니다. 🎣
- 설계의 결정론적 특성: 테스트 용이성을 위해 덱 생성, 카드 분배, 턴 진행, 요청 랭크 선택 등 모든 게임 동작이 무작위성 없이 고정된 규칙에 따라 진행됩니다. ⚙️
- 플레이어 수 및 초기 카드 분배: 2
6명의 플레이어가 필요하며, 23명일 경우 7장, 4~6명일 경우 5장의 카드를 초기에 받습니다. 👥
- 턴 진행 로직: 현재 플레이어는 다음 플레이어에게 손에 있는 가장 낮은 랭크의 카드를 요청합니다. 상대방이 해당 카드를 가지고 있으면 모두 가져오고 턴을 유지하며, 없으면 덱에서 한 장을 뽑고, 뽑은 카드가 요청 랭크와 같으면 턴을 유지합니다. 🔄
- '책' 완성 및 처리: 플레이어가 동일한 랭크의 카드 4장을 모으면, 해당 카드들은 손에서 제거되고 플레이어의 '책' 카운트가 1 증가합니다. 📚
- 게임 종료 조건: 덱이 완전히 비어 있고 모든 플레이어의 손에 카드가 남아있지 않을 때 게임이 종료됩니다. 🏁
- 승자 결정 방식: 게임 종료 시 가장 많은 '책'을 모은 플레이어가 승자가 되며, 동점일 경우 먼저 해당 점수에 도달한 플레이어가 승리합니다. 🏆
- 클래스 구조 및 역할:
Card (카드 정보), Deck (덱 관리), Player (플레이어 상태 및 카드 조작), Game (전체 게임 로직)의 명확한 역할 분담으로 구성됩니다. 🏗️
Player 클래스의 핵심 기능: 카드 추가/제거, 특정 랭크 보유 확인, 손 안의 고유 랭크 반환, 그리고 내부적으로 '책'을 확인하고 처리하는 기능(_check_for_books)을 포함합니다. 🖐️
Deck 클래스의 결정론적 생성: 하트, 다이아몬드, 클럽, 스페이드 순으로 에이스부터 킹까지 52장의 카드를 고정된 순서로 생성합니다. 🃏