私は iOS が初めてで (C++ の経験は豊富ですが)、gamecenter を使用してターン制のカード ゲームに取り組んでいます。キャッチはここにあります - ターンが終わったプレイヤーはジャッジであり、ターンが終わる前に他のすべてのプレイヤーがカードをプレイするのを待ちます。Game Center でこれを行う方法はありますか? すべてのプレイヤーが同時に何をするかを選択し、全員がそうすると、ジャッジに通知され、決定を下し、次のプレイヤーに優先権を渡しますか? たとえば、ターン 1 を開始するとします。@「好きな色は何ですか?」という質問をします。質問としてそれを持ち、それに答えていないゲーム状態を渡すすべてのプレーヤーに。次に、@"Green" と応答すると、友人の Steve は @"Blue" と応答します。どちらが優れているかは私が決めます。そして、私がポイントを与えた人は誰でも新しい裁判官になります. 私の質問は、すべてのプレイヤーが順次ではなく同時に応答できるようにするにはどうすればよいかということです。最悪の場合、戻ってくるまでプレーヤーを順番にループしてから判断することもできますが、これではゲームが遅くなり、面白くなくなります。これを同時に行う方法はありますか?
2 に答える
シーケンシャル ターンを必要とするターンベース ゲームの API については、NSSplendid に同意します。真に同時の唯一の方法は、GKMatch のリアルタイム マッチを使用することです。これは、少数のプレーヤーがいるゲームでは実際にはオプションではありません。
ただし、シーケンシャル バージョンは、既定のビュー コントローラーの代わりにゲーム センターへのプログラムによるアプローチを使用することで、わずかに改善される可能性があります。
ターンを終了すると、Game Center を通じてプッシュ通知が送信され、GKTurnBasedEventHandler のメソッド handleTurnEventForMatch:didBecomeActive: を使用して、アプリでそれを受け取ることができます。ジャッジが質問をするとき、ユーザーにそれをゲームの一部として表示させ、その回答を自分の番までローカルに保存します。特定のプレーヤーの番になると、アプリがバックグラウンドであっても通知を受け取ります。
このメソッドでは、ローカルに保存された回答を確認し、回答した場合はすぐにターンを終了できます。そうでない場合は、回答が完了したらターンを送信します。完全に同時というわけではありませんが、全員が回答するとすぐにジャッジが回答を得ることができます。プレーヤーは、1 人のプレーヤーが終了するのを待ってから自分の回答を入力する必要はありません。
プレーヤーは、アプリを開くまでジャッジがターンを終了したという通知を受け取りませんが、それを行わないと問題を見ることはできません。これに対するもう1つのアプローチは、少し無駄ですが、ジャッジが質問でターンを終了した後、「あなたのターン」通知を受け取ったらすぐにすべてのプレイヤーがターンを終了する様子を確認することです。前の 2 つの段落の手順を実行します。
iOS API は、シーケンシャル ターンのモデルを中心に構築されています。あなたが言及した回避策は機能しますが、GC に実際の同時ターンを実行させる方法はありません。ごめん ):