2011-01-13 6 views
2

これまでのところ、私はかなりの作業をしていますが、これまでのようにすべての機能を追加することはできません。マルチプレイヤーゲームのプレイヤーのサーバー上の個々のボード

私はクラスボードを持っていて、各ボードはそれらの四角形に四角形と小片を持っているとしましょう。 私は多くのプレーヤーがゲームに接続しているので、2人のプレーヤー(そしてオブザーバーなど)ごとに1枚のボードが必要です。私の質問はどこから始めるのですか?

私は最初にクラスボードの複数のインスタンスが必要だと思うし、それらのボードを個々のゲームにバインドする方法が必要です(ゲームはGUIDによって識別されます)。

私の質問はどこから始まるのですか?

これまでのところ、私はそれを稼働させていますが、データベースを頻繁に使用していて、実際には最適ではありませんでした。

答えて

1

ゲームの状態を保存するのに複雑さがあるため、ボードゲームはMongoDBのような非リレーショナルデータベースを使いやすくすることができます。

これはオプションではない(完全なMicrosoftスタックを使用していると仮定します)、データストレージへのリレーショナルアプローチは避けています。あなたのゲームの詳細を知らなければ、私は推測することしかできません。そのため、例としてスクラブルを使用します。理事会のダンプ

あなたは、boardState表に文字通りボード全体の状態を保存することができるすべての処理は、その後に扱うことができ

* * * o * 
* w o r d 
* * v * * 
* * e * * 
* * r * * 

この(5x5の非規制引っかくボード:))のようなアプリケーションロジックによって実行されます。この情報をリレーショナルに格納しようとすると、データベースのオーバーヘッドを想像してみてください!

移動検証

引っかくを話すための「移動」を持っていませんが、これはとにかくデータベースを避けるべきものです。ワードチェック、ボード制限、ゲームロジックなどのすべてのプロセスは、アプリケーション層ですべて処理する必要があります。

アプリケーション実装

私があなただったら、私はあなたがそれぞれがBoardオブジェクトを含む、Gameクラスの多くのインスタンスを持つつもりだったパスを続けると思います。すべてをメモリに保存し、何かを持続させる必要があるまでアプリケーション層で必要なすべての計算を行います(後でゲームを保存する場合はボードの状態、ゲームのスコア)。この時点で、データベースにダンプします。


あなたのゲームロジックについて詳しく知ることなく、私はそれをどのように扱うのか推測できません。したがって、20,000フィートのトップダウンビューがあります。

更新:

新しい情報に基づいて、私はちょうどメモリにGUID識別子とGameCollectionクラスをロードすると思います。あなたはcolGames[GUID]colGames[GUID].Boardのボードのようなものを通して個々のゲームにアクセスできます。ゲーム終了後/保存されたすべての関連情報をデータベースに格納し、メモリから削除します。

+0

これはチェスゲームです。よく、私は、FENの文字列にゲームの状態を格納するなどの基本的なもののためだけにSQL Serverを使用したい、ユーザーの評価を格納する。 私はシングルプレイヤーのゲームを行うことに問題はありません、それはかなり簡単です。複数のユーザーが単一のサーバーで再生できるようにする。 私は、作成された各ゲームがボードクラスを所有している必要があることを知っています。私が知らないことは、ボードクラスのインスタンスを複数独立して作成する方法です。 –

+0

あなたの新しい情報のために私の答えを更新しました。 –

+0

ハハ。真剣に。 "複雑さのために"?複雑ではないので、あなたは人間です。 – TomTom

0

私は約2年前にFacebookのアプリとしてマルチプレイヤーのオンラインカードゲームをしました。残念ながら、ゲームはもう上がっていません。 ゲームはAzureでホストされていました。フロントエンドはSilverlightで行われました。 私がゲームの状態を持続させる方法は、Azure Table Storageのエントリとして行われました。私はProtoBuf(非常に速い)を使ってゲームの状態をシリアライズしました。各ゲームは一意の識別子としてGUIDを持っていました。このGUIDはAzureテーブルストレージのキーとして機能しました。リクエストが入ったときはいつでも、ゲームの状態を逆シリアル化してメッセージを処理し、変更が発生した場合は既存のゲーム状態を上書きします。私は他の目的(統計など)でSQL Serverを使用しましたが、ゲームの状態は維持しませんでした。たぶんSQLを使用する方がAzure Table Storageより高速だったかもしれませんが、パフォーマンスはそれほど問題にはなりませんでした。

関連する問題