Non riesco a trovare una buona architettura per il mio gioco di carte. Ho bisogno di aiuto per capire come sono progettati i giochi di solito.
In primo luogo, 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 (fiume)
- L'ordine dei giocatori è così
Scommesse
- Ognigiocatorepuòpassareoselezionareunnumeromaggioredellascommessaattualetra100e160
- Lescommesseinizianodalprimogiocatoreedallecerchiefinoalpassaggiodiunasquadra
- Unavoltacheungiocatorepassa,nonpuòpiùscommettere
- Lasquadrachevinceilgirodiscommessedovrebberaccoglierealmenopuntipariallapropriascommessapervincerelapartita
Lasquadrachehapersoilgirodipuntatenondovrebbeconsentirealproprioteamdiraggiungereilproprioobiettivo
Selasquadrachehavintoilgirodiscommesseottienetuttiipunti,l'altrasquadraottienepuntinegativipariallasuascommessa
- selasquadrachehapersoilrounddiscommesseraccoglietuttiipuntichel'altrasquadraotterràduepuntinegativi
Flussodelgiocoepuntidiraccolta
- Ilgiocatorechehavintoilgirodiscommesse(ilre)ottienequattrocarterimanentisultavolo.
- Quindipuòsalvareunsetdiquattrocartenellapropriabancadellecartesquadrasenzanemmenogiocarle.
- Ilresceglieràunsemecomesemedelgovernanteefaràsapereaglialtriche
- Kinginiziailgiocomettendounacartadallasuamanosultavolo.Ognialtrogiocatoredovrebbegiocareinquestoordine
- sehannolostessosemediquellacartanellaloromano,devonogiocareunadiquellecarte
- senoncel'hanno,possonogiocarequalsiasialtroseme
- Dopochetuttiglialtrigiocatorihannogiocatoleloromani,ilvincitoredelroundsarà:
- Chihalacartapiùaltasetuttelecartesonouguali
- Quellochehalacarta"righello" più alta se ce n'è una
- Il vincitore del round raccoglierà le carte e le metterà nella propria banca
- Il giocatore che ha vinto il turno precedente inizierà il prossimo round
- Questo continuerà finché la mano di tutti non 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 aggiunge 5 punti
Il mio design
Corsi
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 del gioco.
- Dove dovrebbe andare tutta quella logica?
- Come dovrei mantenere lo stato in uno scenario server / client?
Nota:
Uso Dart per programmarlo ma non è necessario che le risposte vengano scritte in Dart.