Je ne peux pas proposer une bonne architecture pour mon jeu de cartes. J'ai besoin d'aide pour comprendre comment les jeux sont généralement conçus.
Tout d'abord, je décrirai les règles du jeu.
Regles du jeu
Installer- Il y a quatre joueurs, chacun deux joueurs forment une équipe.
- Chaque joueur reçoit 12 cartes mélangées
- Il y a 4 cartes aveugles sur la table (rivière)
- L'ordre des joueurs est comme ça
- Chaque joueur peut passer ou sélectionner un nombre supérieur au pari actuel entre 100 et 160
- Les paris commencent à partir du premier joueur et tournent jusqu'à ce qu'une équipe passe
- Une fois qu'un joueur passe, il ne peut plus parier
- L'équipe qui remporte le tour d'enchères doit au moins collecter des points égaux à son pari afin de gagner la partie
L'équipe qui a perdu le tour d'enchères ne doit pas permettre à son équipe d'atteindre son objectif
Si l'équipe qui a gagné le tour d'enchères obtient tous les points, l'autre équipe recevra des points négatifs égaux à sa mise
- si l'équipe qui a perdu le tour d'enchères collecte tous les points, l'autre équipe obtiendra le double de points négatifs
Flux de jeu et points de collecte
- Le joueur qui a gagné le tour d'enchères ( le roi ) reçoit quatre cartes restantes sur la table.
- Ensuite, il / elle peut enregistrer un jeu de quatre cartes dans leur banque de cartes d'équipe sans même les jouer.
- Le roi choisira un costume comme costume de règle et fera savoir aux autres que
- King commence la partie en mettant une carte de sa main sur la table. Chaque autre joueur doit jouer dans cet ordre
- s'ils ont la même couleur de cette carte en main, ils doivent jouer une de ces cartes
- s'ils ne l'ont pas, ils peuvent jouer n'importe quel autre costume
- Après que tous les autres joueurs auront joué leurs mains, le vainqueur du tour sera:
- Celui qui a la carte la plus élevée si toutes les cartes sont identiques
- Celui qui a la plus haute carte "souverain" s'il y en a
- Le gagnant du tour récupérera les cartes et les déposera dans sa banque
- Le joueur qui a gagné le tour précédent commencera le tour suivant
- Cela continuera jusqu'à ce que la main de tout le monde soit vide
Points de comptage
- Gagner chaque tour a 5 points. Cela signifie que toutes les 4 cartes ont au moins 5 points.
- Avoir Ace, 10 ou 5 en banque ajoute 5 points
Ma conception
Des classes
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(){}
}
Mon problème
Maintenant que j'ai défini toutes ces classes, je ne sais pas comment lier ces définitions à une base de données (comme Mongo) et contrôler le déroulement du jeu.
- Où devrait aller toute cette logique?
- Comment dois-je conserver l'état dans un scénario serveur / client?
Remarque:
J'utilise Dart pour programmer cela, mais je ne veux pas nécessairement que les réponses soient écrites en Dart.
architecture
Mohsen
la source
la source
Réponses:
Vous faites une erreur classique ici. Quelqu'un vous a dit de créer une application Web pour un jeu de cartes, et vous essayez de déterminer comment faire tout cela à la fois. Cette approche confond même les meilleurs programmeurs, car des études ont montré que vous ne pouvez conserver que 7 éléments d'information facilement disponibles dans votre esprit à la fois. Essayer de jongler avec plus nécessite une concentration intense et vous ne pouvez pas vous attendre à continuer.
Essayez plutôt de vous concentrer davantage sur l'écriture d'une bibliothèque de jeux de cartes comme si quelqu'un allait appeler votre bibliothèque pour jouer à votre jeu de cartes. Vous semblez avoir un excellent départ sur votre modèle. C'est bien, mais vous devez créer
Game
l'interface par laquelle les appelants peuvent utiliser make move et ainsi de suite.Je m'attends donc à ce que Game ait plusieurs nouvelles méthodes comme:
En bref, tout ce que vous devez savoir pour exécuter le jeu, vous pouvez le faire en utilisant votre objet
Game
. Ce n'est qu'une fois que vous avez cela que vous passez à l'étape 2.Écrivez une classe distincte dont le seul but est de recevoir les demandes entrantes, de les appliquer
Game
et de renvoyer la sortie à l'utilisateur. Si vous voulez convertir laGame
sortie en JSON, vous le faites en dehors deGame
car ce n'est pas le but deGame
!Afin de conserver ces informations, vous pouvez créer une autre classe qui fournit une interface à MongoDB. Cette classe ne connaîtrait pas l'existence de
Game
et ne connaîtraitGame
pas non plus l'existence de cette classe.En bref, concentrez-vous sur les composants individuels et tout ira bien. Vous commencez à vous tromper lorsque vous essayez de prendre en compte trop d'aspects lors de l'écriture de votre programme. Comme un professeur avisé me l'a dit un jour: " Sachez et acceptez le fait que le premier programme que vous écrivez pour un projet sera réécrit dans son intégralité à la fin. "
la source
Commencez par le mettre dans votre
Game
classe.Il s'agit d'un jeu basé sur des règles avec un nombre limité d'états. Je le modéliserais comme une machine d'état . Le modèle d'état vous aidera énormément.
Finalement, vous voudrez extraire ce FSM dans des classes distinctes, mais ne vous en faites pas pour l'instant.
Il est impossible de répondre sans en savoir plus sur votre configuration. La sérialisation de votre objet Game et de ses états dans la base de données à chaque tour peut faire l'affaire.
la source