Non riesco a trovare una buona architettura per il mio gioco di carte. Ho bisogno di aiuto per capire come sono progettati i giochi.
Per prima cosa, descriverò le regole del gioco.
Regole del gioco
Impostare- Ci sono quattro giocatori, ogni due giocatori formano una squadra.
- Ogni giocatore riceve 12 carte mescolate
- Ci sono 4 carte accecate sul tavolo (river)
- L'ordine dei giocatori è così
- Ogni giocatore può passare o selezionare un numero maggiore della scommessa corrente tra 100 e 160
- Le scommesse iniziano dal primo giocatore e circolano fino al passaggio di una squadra
- Una volta che un giocatore passa non può più scommettere
- La squadra che vince il giro di puntate dovrebbe almeno raccogliere punti pari alla propria scommessa per vincere la partita
La squadra che ha perso il giro di puntate non dovrebbe permettere alla propria squadra di raggiungere il proprio obiettivo
Se la squadra che ha vinto il giro di puntate ottiene tutti i punti, l'altra squadra otterrà punti negativi pari alla propria scommessa
- se la squadra che ha perso il giro di puntate raccoglie tutti i punti, l'altra squadra otterrà doppi punti negativi
Flusso di gioco e punti di raccolta
- Il giocatore che ha vinto il giro di puntate ( il re ) ottiene quattro carte rimanenti sul tavolo.
- Quindi può salvare un set di quattro carte nel loro banco di carte di squadra senza nemmeno giocarle.
- Il re sceglierà un seme come seme del sovrano e lo farà sapere agli altri
- King inizia il gioco mettendo sul tavolo una carta dalla sua mano. Ogni altro giocatore dovrebbe giocare in questo ordine
- se hanno in mano lo stesso seme di quella carta, devono giocare una di quelle carte
- se non ce l'hanno, possono giocare con qualsiasi altro seme
- Dopo che tutti gli altri giocatori hanno giocato le loro mani, il vincitore del round sarà:
- Colui che ha la carta più alta se tutte le carte sono uguali
- Colui che ha la carta "righello" più alta se ce n'è una
- Il vincitore del round raccoglierà le carte e le metterà nella loro banca
- Il giocatore che ha vinto il round precedente inizierà il round successivo
- Questo continuerà fino a quando la mano di tutti sarà vuota
Punti di conteggio
- Vincere ogni round ha 5 punti. Ciò significa che ogni 4 carte ha almeno 5 punti.
- Avere Asso, 10 o 5 in banca ciascuno aggiunge 5 punti
Il mio design
Classi
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(){}
}
Il mio problema
Ora che ho definito tutte queste classi, non so come associare queste definizioni a un database (come Mongo) e controllare il flusso di gioco.
- Dove dovrebbe andare tutta quella logica?
- Come devo mantenere lo stato in uno scenario server / client?
Nota:
Sto usando Dart per programmare questo, ma non è necessario che le risposte vengano scritte in Dart.