나는 카드 게임을위한 좋은 아키텍처를 생각 해낼 수 없다. 게임의 디자인 방식을 이해하려면 도움이 필요합니다.
먼저 게임 규칙을 설명하겠습니다.
게임 규칙
설정- 4 명의 선수가 있으며, 각각 2 명이 한 팀을 구성합니다.
- 각 플레이어는 셔플 카드 12 장을받습니다
- 탁자 (강)에는 4 장의 장님 카드가 있습니다
- 플레이어 순서는 다음과 같습니다
- 각 플레이어는 현재 내기보다 100에서 160 사이의 숫자를 통과하거나 선택할 수 있습니다
- 첫 번째 플레이어와 서클에서 베팅이 시작되고 팀이 통과 할 때까지
- 플레이어가 패스하면 더 이상 내기를 할 수 없습니다
- 베팅 라운드에서 승리 한 팀은 게임에서 승리하기 위해 베팅과 동일한 포인트를 모아야합니다.
베팅 라운드에서 패배 한 팀은 팀이 목표를 달성 할 수 없어야합니다
베팅 라운드에서 승리 한 팀이 모든 포인트를 얻으면 다른 팀은 베팅과 동일한 마이너스 포인트를 얻습니다
- 베팅 라운드에서 패한 팀이 모든 포인트를 모으면 다른 팀은 두 배의 마이너스 포인트를 얻습니다
게임 흐름 및 수집 포인트
- 베팅 라운드에서 승리 한 플레이어 ( 왕 )는 테이블에 남은 카드 4 장을 얻습니다.
- 그런 다음 팀 카드 뱅크에 카드 4 장을 저장하지 않고도 카드를 저장할 수 있습니다.
- 왕은 양복을 통치자 양복 으로 골라 다른 사람들에게
- King은 자신의 카드를 손에 놓아 게임을 시작합니다. 다른 플레이어는이 순서대로 플레이해야합니다
- 그들이 같은 카드를 가지고 있다면, 그 카드 중 하나를 플레이해야합니다
- 그들이 없다면 다른 옷을 입을 수 있습니다
- 다른 플레이어가 모두 손을 대면 라운드의 승자는 다음과 같습니다.
- 모든 카드가 같은 경우 가장 높은 카드를 가진 사람
- "룰러"카드가 가장 높은 사람
- 라운드의 승자는 카드를 모아서 은행에 넣습니다.
- 이전 라운드에서이긴 플레이어는 다음 라운드를 시작합니다
- 모든 사람의 손이 비워 질 때까지 계속됩니다
계산 포인트
- 각 라운드마다 5 점을 얻습니다. 이것은 모든 4 장의 카드가 5 점 이상임을 의미합니다.
- 뱅크에 에이스, 10 또는 5가 있으면 5 점이 추가됩니다
내 디자인
클래스
class Card {
string suit;
string rank
}
class Deck {
List cards = [];
List suits = ['S', 'H', 'D', 'C'];
List ranks = ['1', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'];
private void init(){..}
void shuffle(){...}
}
class Game{
Deck deck = new Deck();
Player player1;
Player player2;
Player player3;
Player player4;
int _isOn = 0;
Game(this.player1, this.player2, this.player3, this.player4){
deck.makeCards();
deck.shuffle();
start();
}
void start(){
player1.cards.addAll( deck.cards.getRange(0, 12) );
player2.cards.addAll( deck.cards.getRange(12, 24) );
player3.cards.addAll( deck.cards.getRange(24, 36) );
player4.cards.addAll( deck.cards.getRange(36, 48) );
deck.cards.removeRange(0, 48);
}
String toJson(){
}
String toString(){
}
}
class Player{
String name;
int points;
List cards = [];
Player(this.name, {this.points});
String toJson(){}
String toString(){}
}
내 문제
이제이 모든 클래스를 정의 했으므로이 정의를 Mongo와 같은 데이터베이스에 바인딩하고 게임 흐름을 제어하는 방법을 모르겠습니다.
- 모든 논리는 어디로 가야합니까?
- 서버 / 클라이언트 시나리오에서 어떻게 상태를 유지해야합니까?
노트 :
나는 이것을 프로그래밍하기 위해 다트를 사용하고 있지만 답을 다트에 쓸 필요는 없다.