Não consigo criar uma boa arquitetura para o meu jogo de cartas. Preciso de ajuda para entender como os jogos geralmente são projetados.
Primeiro, descreverei as regras do jogo.
Regras do jogo
Configuração- Existem quatro jogadores, cada dois jogadores formam uma equipe.
- Cada jogador recebe 12 cartas embaralhadas
- Existem 4 cartas cegas na mesa (rio)
- A ordem dos jogadores é assim

- Cada jogador pode passar ou selecionar um número maior que a aposta atual entre 100 e 160
- As apostas começam no primeiro jogador e circulam até que um time passe
- Depois que um jogador passa, ele não pode mais apostar
- A equipe que vence a rodada de apostas deve coletar pelo menos pontos iguais à sua aposta para ganhar o jogo
A equipe que perdeu a rodada de apostas não deve permitir que a equipe alcance seu objetivo
Se a equipe que venceu a rodada de apostas obtiver todos os pontos, a outra equipe receberá pontos negativos iguais à sua aposta
- se a equipe que perdeu a rodada de apostas acumular todos os pontos, a outra equipe receberá o dobro de pontos negativos
Fluxo do jogo e pontos de coleta
- O jogador que venceu a rodada de apostas ( o rei ) recebe quatro cartas restantes na mesa.
- Depois, ele / ela pode salvar um conjunto de quatro cartas no banco de cartas de sua equipe, mesmo sem jogá-las.
- O rei escolherá um naipe como o governante e informará aos outros que
- King inicia o jogo colocando uma carta da mão na mesa. Cada outro jogador deve jogar nesta ordem
- se eles têm o mesmo naipe dessa carta na mão, precisam jogar uma dessas cartas
- se não tiverem, podem jogar qualquer outro naipe
- Após todos os outros jogadores terem jogado suas mãos, o vencedor da rodada será:
- Aquele que tiver a carta mais alta, se todas as cartas forem iguais
- Aquele que tiver a carta mais alta de "governante", se houver
- O vencedor da rodada irá coletar cartões e colocá-los em seu banco
- O jogador que venceu a rodada anterior começará a próxima rodada
- Isso continuará até que a mão de todos esteja vazia
Contando pontos
- Ganhar cada rodada tem 5 pontos. Isso significa que cada 4 cartas tem pelo menos 5 pontos.
- Ter Ace, 10 ou 5 no banco, acrescenta 5 pontos
Meu design
Aulas
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(){}
}
Meu problema
Agora que defini todas essas classes, não sei como vincular essas definições a um banco de dados (como o Mongo) e controlar o fluxo do jogo.
- Para onde toda essa lógica deve ir?
- Como devo manter o estado em um cenário de servidor / cliente?
Nota:
Estou usando o Dart para programar isso, mas não preciso que as respostas sejam escritas no Dart.