読者です 読者をやめる 読者になる 読者になる

算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

Pankiaによる簡単ソーシャルゲーム開発

Android

Android Advent Calendar

この記事はAndroid Advent Calendarのエントリのひとつです。
待ち遠しいクリスマスまで、毎日公開されていくエントリを読みながら過ごすのはいかがでしょうか。

Pankiaというソーシャルゲーム・フレームワーク

タイトルにもあるように、今回はPankiaというスマートフォン向けソーシャルゲームのフレームワークについてお話しさせていただきます。
Pankia(パンキア)とは、パンカクという日本の会社が開発/公開しているソーシャルSDKです。
今までは限定的な提供でしたが、先月14日に一般公開されました。
ユーザ数(おそらくPankiaを使用したソフトウェアのユーザ数)は1000万人を超えたらしいです(大半は海外のユーザ)。
SDKはiOS版、Android版共に提供されています。

Pankiaは簡単に導入でき、以下の機能を提供します。

  • リアルタイムな対戦
  • (ゲーム内のスコアなどの)目標設定や管理など
  • (ゲーム内のスコアなどの)ランキング
  • アイテム管理やその課金
  • TwitterFacebookとの連携

特にリアルタイム対戦はすごく面白い機能で、簡単に導入できます。
かなりサクサクです!4人まで対戦可能です!

アイテムなどの設定は開発者用Webサイトにログインして行えて、非常に簡単です。

要はPankiaをアプリに組み込むとソーシャルなゲーム、つまり、人と人との繋がりのあるゲームを簡単に作ることができるようになります。

Pankiaの使い方

Pankia導入の詳細は、用意されているGettingStartedに丁寧に説明されています。
日本語版もあります。
なので、ここではざっくりとした説明とさせていただきます。

PankiaはEclipseのプロジェクトとして提供されています。
EclipseにPankiaをインポートした後は、他のAndroidプロジェクトからライブラリとしてアクセスが可能になります。

Pankiaにはダッシュボードという画面(Activity)があります。
ダッシュボードは、リアルタイム対戦を開始したり、リーダーボード(ランキング)を閲覧したりする際に最初にユーザが訪れる画面です。
ダッシュボードからネットワーク対戦画面へと進んで行き、(インターネット対戦なら)世界中のプレイヤとのマッチングが行われます。
マッチングが完了すると、ダッシュボードは閉じ、ダッシュボードを起動したときのActivityに戻り、通信対戦が可能になります。

実際の通信対戦では、セッションリスナでセッションの開始や接続状況を監視したり、対戦相手が送信した情報を受け取ったりできます。
対戦相手と授受する情報はbyte配列とシンプルです。
僕はよくSerializableなオブジェクトをbyte配列化して情報を送信しています(受け取るデータはbyte配列なので、それを元のオブジェクトに逆変換します)。

アイテム情報へのアクセスや、スコアやランキングへのアクセスも非常に簡単にできます。
例えば次のコードは、アイテムIDが123であるアイテムの残り個数を調べ、それが0個より多いなら、そのアイテムを使用し、その後消費するということを表しています。

final int itemId = 123;
if(Pankia.quantityOfItem(itemId) > 0) {
    effect(); //アイテムを使用したときの効果とか
    Pankia.consumeItem(itemId, 1, null);
}

まとめ

以上、Pankiaの紹介でしたが、いかがでしたか?
Pankiaの最大の魅力はネットワークによるリアルタイム対戦だと僕は思っています。
アクションゲームだと(アプリ開発者側が)いろいろ工夫しないといけない部分はありますが、オセロなどのテーブルゲームやボードゲームなどは比較的簡単に作れます。
ご興味ご関心をお持ちいただけましたら、ぜひPankiaを試してみてください♪

最後に自己紹介

本エントリをご覧いただきまして、ありがとうございます。
@ngsw_taroっていいます。「たろう」って呼んでください。
大学生です。来年の春に卒業します。
Android好きです。Java好きです。プログラミング大好きです。
デ部と横浜デ部と横浜支部とよちよちAndroidの勉強会には参加するようにしているので、僕を見かけたら声でも石でも投げてください。
どうも、ありがとうございました〜(*´▽`*)