ゲームの状態を保存するのに複雑さがあるため、ボードゲームはMongoDBのような非リレーショナルデータベースを使いやすくすることができます。
これはオプションではない(完全なMicrosoftスタックを使用していると仮定します)、データストレージへのリレーショナルアプローチは避けています。あなたのゲームの詳細を知らなければ、私は推測することしかできません。そのため、例としてスクラブルを使用します。理事会のダンプ
あなたは、boardState
表に文字通りボード全体の状態を保存することができるすべての処理は、その後に扱うことができ
* * * o *
* w o r d
* * v * *
* * e * *
* * r * *
この(5x5の非規制引っかくボード:))のようなアプリケーションロジックによって実行されます。この情報をリレーショナルに格納しようとすると、データベースのオーバーヘッドを想像してみてください!
移動検証
引っかくを話すための「移動」を持っていませんが、これはとにかくデータベースを避けるべきものです。ワードチェック、ボード制限、ゲームロジックなどのすべてのプロセスは、アプリケーション層ですべて処理する必要があります。
アプリケーション実装
私があなただったら、私はあなたがそれぞれがBoard
オブジェクトを含む、Game
クラスの多くのインスタンスを持つつもりだったパスを続けると思います。すべてをメモリに保存し、何かを持続させる必要があるまでアプリケーション層で必要なすべての計算を行います(後でゲームを保存する場合はボードの状態、ゲームのスコア)。この時点で、データベースにダンプします。
あなたのゲームロジックについて詳しく知ることなく、私はそれをどのように扱うのか推測できません。したがって、20,000フィートのトップダウンビューがあります。
更新:
新しい情報に基づいて、私はちょうどメモリにGUID識別子とGameCollectionクラスをロードすると思います。あなたはcolGames[GUID]
とcolGames[GUID].Board
のボードのようなものを通して個々のゲームにアクセスできます。ゲーム終了後/保存されたすべての関連情報をデータベースに格納し、メモリから削除します。
これはチェスゲームです。よく、私は、FENの文字列にゲームの状態を格納するなどの基本的なもののためだけにSQL Serverを使用したい、ユーザーの評価を格納する。 私はシングルプレイヤーのゲームを行うことに問題はありません、それはかなり簡単です。複数のユーザーが単一のサーバーで再生できるようにする。 私は、作成された各ゲームがボードクラスを所有している必要があることを知っています。私が知らないことは、ボードクラスのインスタンスを複数独立して作成する方法です。 –
あなたの新しい情報のために私の答えを更新しました。 –
ハハ。真剣に。 "複雑さのために"?複雑ではないので、あなたは人間です。 – TomTom