私のカードゲームには良いアーキテクチャが思いつきません。ゲームの通常の設計方法を理解するのに助けが必要です。
まず、ゲームのルールについて説明します。
ゲームのルール
セットアップ- 4人のプレーヤーがいて、各2人がチームを形成します。
- 各プレイヤーは12枚のシャッフルカードを取得します
- テーブル(川)に4枚の盲目カードがあります
- プレイヤーの注文はこんな感じ
- 各プレーヤーは、100から160までの現在の賭けより大きい数をパスまたは選択できます
- 賭けは最初のプレーヤーから始まり、チームが合格するまでサークルします
- プレイヤーがパスすると、もうベットすることはできません
- ベッティングラウンドに勝ったチームは、ゲームに勝つために、少なくとも自分のベットに等しいポイントを集める必要があります。
ベッティングラウンドに敗れたチームは、チームが目標を達成することを許可してはなりません。
ベッティングラウンドに勝ったチームがすべてのポイントを取得した場合、他のチームは自分のベットに等しいマイナスのポイントを取得します
- ベッティングラウンドに敗れたチームがすべてのポイントを集めた場合、他のチームはダブルのマイナスポイントを獲得します
ゲームの流れとポイントの収集
- ベッティングラウンドに勝ったプレーヤー(キング)は、テーブルに残っているカードを4枚受け取ります。
- その後、4枚のカードのセットを、プレイすることなくチームカードバンクに保存できます。
- 王は定規スーツとしてスーツを選び、他の人にそれを知らせます
- キングは手札のカードをテーブルに置くことからゲームを開始します。他の各プレーヤーはこの順序でプレイする必要があります
- 手札に同じカードのスーツがある場合、それらのカードの1つをプレイする必要があります。
- 彼らが持っていない場合、彼らは他のスーツをプレイすることができます
- 他のすべてのプレーヤーがハンドをプレーした後、ラウンドの勝者は次のようになります。
- すべてのカードが同じ場合に最も高いカードを持っている人
- 「ルーラー」カードがある場合、最も高いカード
- ラウンドの勝者はカードを集めて銀行に置きます
- 前のラウンドに勝ったプレーヤーは次のラウンドを開始します
- これはみんなの手が空になるまで続きます
カウントポイント
- 各ラウンドでの勝利は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で作成する必要はありません。