『トランプ・ナポレオン』に通信対戦機能を入れようとしています。
元々トランプゲームなので、人が集まらないとできないゲームです。しかもナポレオンは5人で遊ぶのが一番バランスが良く面白いので、5人専用といっても良いです。ナポレオンのルール自体が複雑で分かっている人は少ないでしょうから、同じくらいの力量の人を5人集めるというのはかなり難しいです。
トランプ自体は人と遊ぶのが当然楽しいですが、実際に人を集めて遊ぶというのは簡単なことではありません。
そんなわけでインターネットを介して通信対戦するというのが手軽になります。通信の遅延とか切断などの問題も起こってしまいますが、自分がどこかへ行く必要はないので手軽です。(現在の通信の問題はどうしようもないです。)
この通信対戦機能というのは作るのが難しいものになります。離れた場所で実行されているアプリケーション同士が通信して整合性を保ちながら、実行されていかなければならないからです。うまく作らないと、あるプレイヤーだけが進行しすぎてしまいおかしくなるようなことは簡単に起こります。
トランプゲームの場合は誰が何のカードを持っていて、今誰が番なのか、何を出したのかということが重要になります。このタイミングがずれてしまうと全員が進行できなくなってしまったりするバグが生まれます。
ナポレオンではプレイヤーが操作するタイミングが4つあります。
宣言、副官指定、カード交換、トリックでの手札決定です。これらを全て行えるようになると一応ゲームができるようになります。
少し前に宣言部分の動作をツイッター上にあげたので以下に載せておきます。
宣言部分だけ作ってみました。Unityを2つ立ち上げて試しています。2人で通信対戦したときの状況ですね。重要な所で同期を行い、非同期に進行しています。
アニメの始めでは右のクライアントがカードが配り終わるのを待っているのです。 pic.twitter.com/KmEHagC5rU— FreelyApps (@FreelyApps) 2015年10月3日
現在は全ての操作ができるところまできていますが、ゲームに参加するという部分がありません。これはオンライゲームでいうルームを作る、ルームに参加するといったものになります。当然、これがないとオンラインでのゲームが始まらないので作る必要があります。
アプリのバージョンが違えば、一緒に遊ぶとおかしくなることが普通なので、バージョン違いで接続ができないようにした方が良いです。
UnityのNetworkMatch.CreateMatchでルームを作る時にCreateMatchRequestのmatchAttributesにバージョンの情報を入れておき、NetworkMatch.ListMatchesでルームを取得するときにListMatchRequestのmatchAttributeFilterEqualToにバージョン情報をいれ比較するようにすれば実現できそうです。
人が集まらないと対戦できないので、人が集まってくれることを期待したいです。できれば記事の拡散やアプリ『トランプ・ナポレオン』の拡散をお願いしたいです。
コメント