Nie mogę wymyślić dobrej architektury dla mojej gry karcianej. Potrzebuję pomocy, aby zrozumieć, w jaki sposób gry są zazwyczaj projektowane.
Najpierw opiszę zasady gry.
Zasady gry
Ustawiać- Jest czterech graczy, każdy z nich tworzy drużynę.
- Każdy gracz otrzymuje 12 przetasowanych kart
- Na stole znajdują się 4 zaślepione karty (rzeka)
- Kolejność graczy jest taka

- Każdy gracz może spasować lub wybrać liczbę większą niż obecny zakład między 100 a 160
- Zakłady rozpoczynają się od pierwszego gracza i kręgów, aż drużyna przejdzie
- Gdy gracz spasuje, nie może już obstawiać
- Zespół, który wygra rundę licytacji, powinien przynajmniej zdobyć punkty równe swojemu zakładowi, aby wygrać
Zespół, który przegrał rundę licytacji, nie powinien pozwolić swojemu zespołowi osiągnąć swojego celu
Jeśli drużyna, która wygrała rundę licytacji, zdobędzie wszystkie punkty, druga drużyna otrzyma ujemne punkty równe ich zakładowi
- jeśli drużyna, która przegrała rundę licytacji, zbierze wszystkie punkty, druga drużyna otrzyma podwójne ujemne punkty
Przepływ gry i zbieranie punktów
- Gracz, który wygrał rundę licytacji ( król ), otrzymuje cztery pozostałe karty na stole.
- Następnie on / on może zapisać zestaw czterech kart w banku kart drużyny, nawet ich nie zagrywając.
- Król wybierze garnitur jako kostium władcy i powiadomi o tym innych
- King rozpoczyna grę, kładąc kartę ze swojej ręki na stole. Każdy inny gracz powinien grać w tej kolejności
- jeśli mają na ręce ten sam kolor tej karty, muszą zagrać jedną z tych kart
- jeśli go nie mają, mogą grać w dowolnym kolorze
- Po tym, jak wszyscy inni gracze rozegrają ręce, zwycięzcą rundy będzie:
- Ten, który ma najwyższą kartę, jeśli wszystkie karty są takie same
- Ten, który ma najwyższą kartę „władcy”, jeśli taka istnieje
- Zwycięzca rundy zbierze karty i umieści je w swoim banku
- Gracz, który wygrał poprzednią rundę, rozpocznie kolejną rundę
- Będzie to trwało, dopóki ręka nie będzie pusta
Liczenie punktów
- Wygrana w każdej rundzie ma 5 punktów. Oznacza to, że każda 4 karty ma co najmniej 5 punktów.
- Posiadanie asa, 10 lub 5 w banku dodaje 5 punktów
Mój projekt
Klasy
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(){}
}
Mój problem
Teraz, gdy zdefiniowałem wszystkie te klasy, nie wiem, jak powiązać te definicje z bazą danych (np. Mongo) i kontrolować przebieg gry.
- Gdzie powinna iść cała ta logika?
- Jak powinienem zachować stan w scenariuszu serwer / klient?
Uwaga:
Używam Dart do programowania tego, ale nie potrzebuję, aby odpowiedzi były pisane w Dart.