Androidでリアルタイムマルチプレーゲームを開発するにはAndroidで動く携帯Javaアプリ作成入門(48)(1/3 ページ)

Google Play Game Servicesの機能を使ってゲームへの招待・招待の検知・参加・退出、メッセージの送受信を行う方法を紹介します。

» 2014年01月30日 18時00分 公開
[緒方聡株式会社イーフロー]

Google Play Game Servicesのマルチプレー機能

 今回も、連載第45回「アプリにGoogle+のソーシャルグラフを持ち込めるGoogle Play Game Servicesの基礎知識」、第46回「もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能」で既に幾つかの機能について解説した、Google Play Game Servicesの機能について解説します。

 今回はGoogle Play Game Servicesの「マルチプレー」について解説します。なお、今回は「リアルタイムマルチプレー」についてのみの解説ですが、先日リリースされたGoogle Play Service 4.1で「ターンベースマルチプレー」もサポートされました。

 第46回までは「TrivialQuest」というサンプルアプリをベースにGoogle Play Game Servicesの機能解説を行っていましたが、今回は「ButtonClicker」というサンプルアプリでマルチプレーについて解説します。第45回でGoogle Playにゲームを登録する手順を説明しており、今回のButtonClickerも同様の手順で登録することで、実際にスマホ上でマルチプレーの動作が確認できます。

サンプルアプリ「ButtonClicker」でマルチプレーをしている様子(画像をクリックすると、動画が再生します)

 ButtonClickerは以下からダウンロードできます。

 サンプルの構成は第46回のころとは異なり、「eclipse_compat」というディレクトリが用意され、Eclipseに取り込みやすくなっています。その辺りを読み替えて取り込んでみてください。

 また、以下のようにテスターに少なくとも2アカウントを追加することを忘れないようにしてください。

 テスト用のサブアカウントを取得し、Google+で相互フォローしておくと、いろいろとはかどるかと思います。

友達をゲームに招待する

 ここからは、マルチプレーゲーム開発に関する解説を始めていきます。ButtonClickerはシングルプレーもマルチプレーも可能なように設計されています。

 ButtonClickerのボタンの意味を説明しておきます。

 「Single Player」は一人で遊ぶモードです。「Quick game」は、同様にQuick gameでのプレーを望んでいる誰かと一緒に遊ぶモードです。マッチングはクラウド上で行われます。「Invite friends」はGoogle+の友達を招待して一緒に遊ぶモードです。「See invitations」は招待されているかどうかを確認し、招待されている場合は一緒に遊ぶかどうかを決められます。

 上図は友達を招待する画面です。この画面自体はGameClientを通して生成するIntentをブロードキャストすることで表示されるものであり、ソーシャルグラフを解析したり、プロフィール写真を取得したりなどの複雑な実装をする必要はありません。

 では、この何とも便利な、友達をゲームに招待する機能の使い方を解説します。

 まずは、以下の手順でGameClientを取得し、Intentを生成した後、Activityを起動します。

    intent = getGamesClient().getSelectPlayersIntent(1, 3);
    startActivityForResult(intent, RC_SELECT_PLAYERS);

 これだけで、Google+でフォローしているユーザーの選択画面を表示できます。「GameClient#getSelectPlayerIntent(int minPlayers, int maxPlayers)」メソッドの引数で、選択するプレーヤーの最大最小人数を指定します。サンプルでは、1と3を与えているので、自分を含め2~4人でプレーするという意味になります。

 画面から戻った際に、「onActivityResult(int, int, Intent)」メソッドが呼び出されるので、「startActivityForResult(Intent, int)」メソッドの第2引数で渡した値で処理を振り分けます。以下の「handleSelectPlayersResult(int, Intent)」メソッドが選択したプレーヤーの処理を行う実装です。

  1. private void handleSelectPlayersResult(int response, Intent data) {
  2. // キャンセルの場合は何もしない
  3. if (response != Activity.RESULT_OK) {
  4. return;
  5. }
  6. // 選択したプレーヤーリストを取得
  7. final ArrayList<String> invitees =
  8. data.getStringArrayListExtra(GamesClient.EXTRA_PLAYERS);
  9. // 自動選択のプレーヤーを選択した場合の処理
  10. Bundle autoMatchCriteria = null;
  11. int minAutoMatchPlayers =
  12. data.getIntExtra(GamesClient.EXTRA_MIN_AUTOMATCH_PLAYERS, 0);
  13. int maxAutoMatchPlayers =
  14. data.getIntExtra(GamesClient.EXTRA_MAX_AUTOMATCH_PLAYERS, 0);
  15. if (minAutoMatchPlayers > 0 || maxAutoMatchPlayers > 0) {
  16. autoMatchCriteria = RoomConfig.createAutoMatchCriteria(
  17. minAutoMatchPlayers, maxAutoMatchPlayers, 0);
  18. }
  19. // 部屋を作成
  20. RoomConfig.Builder rtmConfigBuilder = RoomConfig.builder(this);
  21. rtmConfigBuilder.addPlayersToInvite(invitees);
  22. rtmConfigBuilder.setMessageReceivedListener(this);
  23. rtmConfigBuilder.setRoomStatusUpdateListener(this);
  24. if (autoMatchCriteria != null) {
  25. rtmConfigBuilder.setAutoMatchCriteria(autoMatchCriteria);
  26. }
  27. getGamesClient().createRoom(rtmConfigBuilder.build());
  28. }

 Google Play Game Servicesのマルチプレーは、「ゲームのセッションごとにホストプレーヤーが部屋を生成しゲストプレーヤーを招く」という考え方です。このメソッドでは、「GameClient#createRoom(RoomConfig)」メソッドを呼び出すまでを行っています。部屋の生成の成否は「RoomUpdateListener#onRoomCreated(int, Room)」メソッドで判別します。

  1. @Override
  2. public void onRoomCreated(int statusCode, Room room) {
  3. // 失敗したら何もしない
  4. if (statusCode != GamesClient.STATUS_OK) {
  5. return;
  6. }
  7. // プレーヤー参加待ち画面を表示
  8. showWaitingRoom(room);
  9. }
  10. void showWaitingRoom(Room room) {
  11. // 最低二人揃わなければゲームを開始しないようにする
  12. final int MIN_PLAYERS = 2;
  13. Intent i =
  14. getGamesClient().getRealTimeWaitingRoomIntent(room, MIN_PLAYERS);
  15. // プレーヤー参加待ち画面を表示
  16. startActivityForResult(i, RC_WAITING_ROOM);
  17. }

 プレーヤー参加待ち画面もプレーヤー選択画面と同様、GameClientを通して生成するIntentをブロードキャストするだけで表示可能です。

 これで、招待したプレーヤーが承諾した場合、若干の接続時間を置いてゲームが開始されます。もし応答がないプレーヤーがいた場合、右上のメニューからさっさとそろったプレーヤーだけでゲームを開始することも可能です。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Smart & Social 鬯ョ�ォ�ス�ェ髯区サゑスソ�ス�ス�ス�ス�コ髣包スオ隴∵コキ�ク�キ�ス�ケ隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ュ鬩幢ス「隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ー

鬮ォ�エ陝キ�「�ス�ス�ス�ャ鬮ォ�エ鬲�シ夲スス�ス�ス�・鬮ォ�エ陝カ�キ�ス�」�ス�ッ髣厄スォ�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。