【cocos2dx】放置ゲームを作る際の時間の管理-番外編

cocos2dxで、「放置系」のゲームを作るにはどのように実装をすればいいのか、の番外編です。 第三回目のブログの記事で下記のHPを紹介しました。

当初は思っていなかったのですが、ここに記載されていることを利用すれば「ログインボーナス」など、ソーシャルゲームなどでよく見かける実装が簡単にできそうなので勉強をしてみました。

前回

【cocos2dx】放置ゲームを作る際の時間の管理-part1 | albatrus.com 【cocos2dx】放置ゲームを作る際の時間の管理-part2 | albatrus.com 【cocos2dx】放置ゲームを作る際の時間の管理-part3 | albatrus.com 【cocos2dx】放置ゲームを作る際の時間の管理-part4 | albatrus.com

時間関数

このHPに書いてあるコードは、そのままcocos2dxでも利用ができます。 [c]

time_t timeValue;
struct tm *timeObject;

time(&timeValue);
timeObject = localtime(&timeValue);

printf("%d年 %d月 %d日 || %d : %d : %d [%d 曜日]" ,
       timeObject->tm_year + 1900 , timeObject->tm_mon + 1 ,
       timeObject->tm_mday , timeObject->tm_hour ,
       timeObject->tm_min , timeObject->tm_sec,timeObject->tm_wday);

[/c]

これで現在の時間関係の数字が取り出せます。 2014年 3月 13日 || 7 : 54 : 25 [4 曜日] 曜日は数字で取り出されます(0が日曜日)

ログインボーナス

「ログインボーナス」「デイリーボーナス」など、言い方は色々ありますが、ユーザーのアクティブ率をあげるための1日1回の得点です。 先ほどの時間関数を使えば、「今日初めてゲームを起動した」などを計算することができます。

とは言っても実装はとても簡単で、ゲームを起動した時の時間を記録して、それが違っていたら「ログインボーナス」を出すメソッドを呼び出してあげればいいだけです。 利用するのは通算日t m_yday)です。 [c]

time_t timeValue;
struct tm *timeObject;

time(&timeValue);
timeObject = localtime(&timeValue);

//通算日数を取得
int dayNum = timeObject->tm_yday;

   //セーブされた通算日数を取得 CCUserDefault *userDefalt = CCUserDefault::sharedUserDefault(); int saveDay = userDefalt->getIntegerForKey("saveDay");

 if(dayNum == saveDay){

 }else{

   //通算日数を記録
    userDefalt->setIntegerForKey("saveDay", dayNum);
    userDefalt ->flush();

    //「ログインボーナス」メソッドを実行 this -> showLoginWindow();

 }

[/c]

通算日数を計算して、それが記録されたモノと違えば、「ログインボーナス」のメソッドを呼び出す。 このような感じで実装ができると思います。

その他

このようにすれば、以下のようなことができると思います。

  • 連続ログインボーナス
  • 曜日ごとのログインボーナス
  • 期間限定のイベント(例、今から1週間有効のイベント)

余り多いと管理するのが大変ですので、ゲーム性に合わせたモノを実装して下さい。