2014-05-25 55 views
5

我正在實施Turn Base Multiplayer game using Google Play Services。它似乎還有一個主要特徵,即追蹤勝利和失敗!似乎是任何類型的競爭遊戲的一個非常重要的功能。在Google Play遊戲服務中跟蹤勝利和失敗

我錯過了什麼嗎? Google是以某種方式處理的?

如果沒有,我想知道是否有人已經實施了自己的w/l跟蹤系統,以及他們如何接近它。我擔心只是將它保存在本地,因爲它可能會與現實不同步。我想我可以使用Google雲端存儲,但是我也擔心跟蹤哪些匹配已經被佔據可能有點容易出錯(例如,多次在同一匹配中計算贏/輸)。也許使用Google Play排行榜系統會很好,因爲你可以和朋友等比較。

回答

0

這取決於您的實施。我創建了一個國際象棋應用程序,我只用SharedPreferences來跟蹤我的勝利和損失。如果你使用得當,它不會出錯。

例如,

SharedPreferences prefs = this.getSharedPreferences(
     "com.example.app", Context.MODE_PRIVATE); 
if (gameOver(Side.White)) { 
    prefs.edit().putLong(dateTimeKey, prefs.getLong(losses, 0) + 1).commit(); 
} else if (gameOver(Side.Black)){ 
    prefs.edit().putLong(dateTimeKey, prefs.getLong(wins, 0) + 1).commit(); 
} 
+0

我也是這樣,它遠非完美,並且在我的情況下需要大量的字符串處理,並且對於篡改很有幫助。谷歌真的應該解決這個需求。 – John

2

您可能想嘗試使用Google Play遊戲服務提供的Events。下面是步驟使用它:

  1. 轉到Android開發者控制檯
  2. 在對遊戲服務側邊欄中點擊,選擇您的應用程序,然後活動
  3. 然後創建兩個新的活動,一個叫「發球得分'然後點擊發布您的更改
  4. 單擊獲取資源鏈接可查看新事件的資源ID並將它們添加到您的應用程序的res/values目錄中
  5. 當遊戲中止或失敗,請致電以下代碼,其中eventRef是您的fr iendly資源名稱,你在最後一步加入,無論是「events_games_won」或「events_games_lost」:

    int eventInt = activity.getApplicationContext().getResources().getIdentifier(eventRef, "string", "com.yourpackage.android"); 
    String eventID = activity.getString(eventInt); 
    Games.Events.increment(apiClient, eventID, 1); 
    

    如果您使用basegameutils,您apiClient實例可以用aHelper.getApiClient()來獲得,否則遵循these instructions到設置它。

  6. 要讀取你保存的數據,你可以使用這樣的回調:

    PendingResult<Events.LoadEventsResult> results = Games.Events.load(apiClient, true); 
    results.setResultCallback(new ResultCallback<Events.LoadEventsResult>() { 
         @Override 
         public void onResult(Events.LoadEventsResult result) 
         { 
          Events.LoadEventsResult r = (Events.LoadEventsResult)result; 
          EventBuffer eb = r.getEvents(); 
          for (int i=0; i < eb.getCount(); i++) { 
           Event event = eb.get(i); 
           // do something, like cache the results for later 
           YourGameState.eventStats.put(event.getName(), (int)event.getValue()); 
          } 
          eb.close(); 
          listener.onResult(); 
         } 
        }); 
    

這種方法在維護和管理本地計數的好處是:

  • 勝利和損失存儲在Google Play的雲中,它們將存儲在所有用戶的設備上
  • 您可以使用事件創建Quests(在Google Play上也有描述),例如「本週贏得10場比賽」或「本週不敗」
  • Google Play會爲您提供所有參與比賽的玩家的統計數據,這對於您的遊戲非常有用分析玩家的活動和性能

而且,當然,您可以使用相同的方法爲您想要的任何事物創建事件。

+0

這是否意味着玩家需要在遊戲結束時上網,才能跟蹤結果?我的遊戲是基於回合/異步的,因此用戶在遊戲結束時可能並不在遊戲中。 – Goose

+0

有幫助的是,您的用戶不需要在線,如https://developer.android.com/reference/com/google/android/gms/games/event/Events.html(這裏所述),事件緩存在本地並分批刷新到服務器。因此,即使他們處於離線狀態,下次與Google Play的關聯重新建立時,活動也會更新。對於您的應用程序,您可以將增加贏/輸事件的代碼放到通知玩家遊戲結果的地方。 – Jaron

+0

對不起,我不清楚我的意思是關於他們在線。我的意思是,用戶不會收到有關Match匹配結果的信息,除非他們打開匹配(從Google服務器請求更新的遊戲狀態)。如果用戶永遠不會返回匹配以查看結果(例如,他們認爲沒有辦法贏得勝利),他們永遠不會收到更新說他們丟失了,並且事件永遠不會被記錄。最常見的技術就是在輸球之前保留一場比賽,並且永不退換,以保持完美的勝率。 – Goose

相關問題