Я не можу придумати гарну архітектуру для своєї карткової гри. Мені потрібна допомога, щоб зрозуміти, як зазвичай розроблені ігри.
Спочатку опишу правила гри.
Правила гри
Налаштування- Є чотири гравці, кожен з двох гравців формує команду.
- Кожен гравець отримує 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(){}
}
Моя проблема
Тепер, коли я визначив усі ці класи, я не знаю, як пов’язати це визначення з базою даних (наприклад, Монго) та контролювати потік гри.
- Куди має піти вся ця логіка?
- Як слід зберігати стан у сценарії сервер / клієнт?
Примітка:
Я використовую Dart для програмування цього, але мені не потрібно, щоб відповіді були записані в Dart.