Я не могу придумать хорошую архитектуру для моей карточной игры. Мне нужна помощь, чтобы понять, как обычно создаются игры.
Сначала я опишу правила игры.
Правила игры
Настроить- Есть четыре игрока, каждый из двух игроков формируют команду.
- Каждый игрок получает 12 перемешанных карт
- На столе (река) 4 ослепленных карты
- Порядок игроков такой
- Каждый игрок может передать или выбрать число больше текущей ставки от 100 до 160
- Ставки начинаются с первого игрока и кругов до командного паса
- После того, как игрок прошел, он больше не может делать ставки
- Команда, которая выиграет раунд ставок, должна набрать как минимум очки, равные их ставке, чтобы выиграть игру
Команда, проигравшая раунд ставок, не должна позволять своей команде достигать своей цели
Если команда, выигравшая раунд ставок, получает все очки, другая команда получит отрицательные очки, равные их ставке.
- если команда, проигравшая в раунде ставок, наберет все очки, другая команда получит двойные отрицательные очки
Ход игры и сбор очков
- Игрок, выигравший раунд ставок ( король ), получает четыре оставшиеся карты на столе.
- Затем она / он может сохранить набор из четырех карт в банке своих командных карт, даже не разыгрывая их.
- Король выберет костюм как костюм правителя и скажет другим, что
- Кинг начинает игру, положив карту со своей руки на стол. Каждый другой игрок должен играть в таком порядке
- если у них в руке одинаковая масть этой карты, они должны сыграть одну из этих карт
- если у них его нет, они могут сыграть любой другой костюм
- После того, как все остальные игроки сыграли свои руки, победителем раунда будет:
- Тот, у кого самая высокая карта, если все карты одинаковые
- Тот, кто имеет наивысшую карту «правителя», если она есть
- Победитель раунда соберет карты и положит их в свой банк
- Игрок, выигравший предыдущий раунд, начнет следующий раунд
- Это будет продолжаться до тех пор, пока все руки не опустеют
Подсчет очков
- Победа в каждом раунде имеет 5 очков. Это означает, что каждые 4 карты имеют как минимум 5 очков.
- Имея туз, 10 или 5 в банке каждый добавляет 5 очков
Мой дизайн
Классы
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(){}
}
Моя проблема
Теперь, когда я определил все эти классы, я не знаю, как привязать эти определения к базе данных (например, Mongo) и контролировать ход игры.
- Куда должна идти вся эта логика?
- Как сохранить состояние в сценарии сервер / клиент?
Замечания:
Я использую Dart для программирования, но мне не нужно, чтобы ответы были написаны на Dart.