単一の.NETゲームの進化の例としてのクロスプラットフォームマルチプレイヤーの最も単純な実装

みなさんこんにちは!

私は執筆スタイルとロシア語の知識不足についてすぐに謝罪します-残念ながら私は決してブロガーではありませんが、ハブにコメントを残したいという願望は強力な動機です。 私は作家ではないという事実に加えて、私はプログラマーでもありませんが、時には数行のコードを書くことに夢中になる土木技師でもあります。これはとりわけ趣味です。 しかし、私は論文の準備と防衛の間に建設について十分に書いたので、これに戻りたいという欲求はありません。

この記事では、さまざまなプラットフォームをサポートできるマルチプレイヤーゲームの実装で1つのおもちゃを作成した個人的な経験について説明したいと思います(.NETで記述しているため、私の経験は主にWindows / WPに関連していますが、この同じ方法は他のプラットフォームにも最適です、説明したAndroid / iOS用のゲームのプロトタイプを作成していますが、これまでのところ、商用Xamarinパッケージに1k USDを支払う必要はありません)。 そして、はい-この入門記事(もともとはサンドボックスでのみ計画されていました)では、技術的な詳細を明らかにしません。 誰が知っているか、多分私はまだ時間とより詳細な継続を書く機会があるでしょう。



まず、少し歴史。 すべては2005年(4?、6?)に始まりました。妻の友人の会社で「ナイフ」をプレイしました。これは私が大好きなサイコロゲームで、コンピューターを実装したかったのです。 当時、私はVB.NETをよく知っていて、C#で最初の一歩を踏み出したので、最初のバージョンは翌日準備ができていました。



画像

Kniffel-最初のバージョン



もちろん、私はこれが「静かな恐怖」であることを理解していたため、改善を続け、スマートな本を読みに行きました。 そのうちの1つで、私はサイコロをプレイするためのコントロールのアイデアを得ました。それは、その後のすべての「本」の基礎となりました。 ゲームの2番目のバージョンは、私の仕事でしばらくの間非常に成功したことを覚えています-コンピューターの骨を投げるのも遅れました。 そのWindows Formsゲームは長い間放棄されており、ソースがどこにあるのかさえ知りませんが、いくつかのサイトでダウンロードできます。



画像

Kniffel-2番目のバージョン



この話は2010年に続き、Silverlightをマスターしたので、「Kniffel」からVKontakteのアプリケーションを作成することにしました。 しかし、もちろん、1台のコンピューターでオンラインでプレイすることは選択肢ではないため、最初にネットワークゲームを実装する必要性に出会いました。 主な問題は、サーバーが複数のクライアントにゲームの状態を通知する必要があるため、標準のhttp要求/応答スキームがここでは適用できないことです。 さいわい、Silverlightには、この問題を解決するためのほとんどすぐに使用できるオプションがあり、これはDuplex WCFサービスと呼ばれます。 デュプレックスサービスを介してクライアント/サーバー通信を実装すると、かなり安定したゲームになりましたが、しばらくの間...



画像

「Kniffel」-3番目のバージョン、オンラインゲームvkontakte



システムの弱点はサーバー側で、共有ホスティングに投稿しました。このサイトでは、それほど強力ではないプロセッサーの約5%のプロセッサー時間にアクセスできました。 このゲームは多くの人に好まれ、人気を博し、同時にオンラインユーザーの数が増加しました。 サーバーは単にセッションをドロップし始め、ゲームは中断し始め、ハングしました。 プレイすることが不可能になりました。 その後、私はこの問題を解決する方法を知らなかったので、単に「スコア」することにしました...

さて、昨年、私はついに「雲の中に飛びました」。 AWSとWindows Azureを使用していくつかのプロジェクトを行っている間、私はこれが本棚を蘇らせるための素晴らしいソリューションだと思いました。

同じ頃、私の妻がWindows Phoneの携帯電話の所有者になり、私は「喜んで」います。 私はシステムのコンセプト全体が本当に好きだったので、Windowsのバックグラウンドと自分自身を購入し、その上で本を移植し始めました。同時にWindows 8でも-WPの利点は同じSilverlightであり、WinRTでもXAML / C#です。 したがって、MVVMパターンと比較的低い人件費を使用して、Windows Phone、Windows 8、および(書き換えられた)Silverlightの3つのアプリケーションを入手しました。 アプリケーションでは、コードの95%が特定のifを持つ共通のcsファイルにあります。 単体テストとサポートに非常に便利です。たった1つのプロジェクトで何かを変更し、全員が機能することを確認するだけです。 問題はネットワークゲームにのみ残っていました。すべてのプラットフォームでデュプレックスサービスを使用することはできませんでした。特にiOSおよびAndroidへの潜在的な拡張を考慮すると。 「すべてのプラットフォームに共通のコード」という概念に適合するように、ユニバーサルソリューションが必要でした。

そのような解決策が見つかりました-WebSockets。 Webソケットは.NET 4.5によってネイティブにサポートされているため、サーバー側およびWindows 8の実装に問題はありませんでした。 また、SilverlightとWindows Phoneの場合、オープンライブラリWebSocket4Netの形式の実装が見つかりました。 同じライブラリはMonotouchとAndroidのMono用です。 C Html / JSも同様に単純です。単純なWebページからサーバーとの通信を正常にテストしました。

サーバーはWindows Azureにあります。 それはすべてうまく機能します-サポートされているすべてのプラットフォームから同時に完璧にプレイすることができます、もちろん学校がありますが、それらがないとどうなりますか...



画像

「Kniffel」(より正確には「Magic Yatzy」)-現在のバージョン、Windows 8、Windows RT、WP7、WP8間のマルチプレイヤーゲーム



ここにそのような「サンドボックス」記事があります-主に自伝的で、いくつかの場所で、おそらく愚かな...まあ、私はそうすることができます。



PS。 国際舞台でのゲームの公開とドイツの著作権所有者からの申し立ての後、名前「kniffel」を放棄し、より中立的な「国際的な非専有名「Yatzy」」に切り替える必要がありましたが、これは事件とは関係ありませんが、それでも...




All Articles