লিডারবোর্ড

এই নির্দেশিকাটি আপনাকে দেখাবে কীভাবে প্লে গেমস সার্ভিসেস সি++ এসডিকে লিডারবোর্ডস এপিআই ব্যবহার করে ভিজ্যুয়াল লিডারবোর্ড তৈরি করতে, একজন খেলোয়াড়ের স্কোর রেকর্ড করতে এবং পূর্ববর্তী গেম সেশনের স্কোরের সাথে সেই স্কোর তুলনা করতে হয়। এপিআইগুলো LeaderboardsClient এ পাওয়া যাবে।

শুরু করার আগে

যদি আপনি ইতিমধ্যে তা না করে থাকেন, তাহলে লিডারবোর্ড ও গেমের ধারণাগুলো পর্যালোচনা করা আপনার জন্য সহায়ক হতে পারে।

লিডারবোর্ড এপিআই ব্যবহার করে কোডিং শুরু করার আগে:

  • Google Play Games Services ব্যবহার করার জন্য আপনার অ্যাপ ইনস্টল ও সেট আপ করতে 'Set Up Google Play services SDK' গাইডে দেওয়া নির্দেশাবলী অনুসরণ করুন।

  • গুগল প্লে কনসোল গাইডের নির্দেশনা অনুসরণ করে আপনার গেমে যে লিডারবোর্ডগুলো প্রদর্শন বা আপডেট করতে চান, তা নির্ধারণ করুন।

  • গুণমান চেকলিস্টে বর্ণিত সুপারিশগুলো ভালোভাবে জেনে নিন।

লিডারবোর্ড ক্লায়েন্টটি নিন

লিডারবোর্ড এপিআই ব্যবহার শুরু করতে, আপনার গেমকে প্রথমে একটি LeaderboardsClient অবজেক্ট পেতে হবে। আপনি PgsLeaderboardsClient_create() মেথডটি কল করে এবং অ্যাক্টিভিটিটি পাস করে এটি করতে পারেন।

খেলোয়াড়ের স্কোর আপডেট করুন

যখন খেলোয়াড়ের স্কোর পরিবর্তিত হয় (উদাহরণস্বরূপ, যখন খেলোয়াড় খেলাটি শেষ করে), তখন আপনার গেমটি PgsLeaderboardsClient_submitScoreImmediate ফাংশনটি কল করার মাধ্যমে লিডারবোর্ডে তাদের স্কোর আপডেট করতে পারে। আপনাকে লিডারবোর্ড আইডি, মূল স্কোরের মান, একটি ঐচ্ছিক স্কোর ট্যাগ এবং একটি কলব্যাক ফাংশন পাস করতে হবে।

// Callback function to handle the result of submitting the score
void OnScoreSubmitted(PgsStatusCode status_code,
                      PgsScoreSubmissionData* score_submission_data,
                      void* user_data) {
  if (status_code == PGS_STATUS_SUCCESS) {
    // Score submitted successfully
    // You can inspect score_submission_data for details
    // Remember to release the data when done:
    PgsScoreSubmissionData_Release(score_submission_data);
  } else {
    // Handle error
  }
}

// Function to submit the score
void SubmitScore(PgsLeaderboardsClient* client, const char* leaderboard_id, int64_t score) {
  const char* score_tag = NULL; // Optional tag

  PgsLeaderboardsClient_submitScoreImmediate(
      client,
      leaderboard_id,
      score,
      score_tag,
      OnScoreSubmitted,
      NULL // user_data - optional context pointer
  );
}

// Example usage:
// Assuming 'my_leaderboard_id' is defined elsewhere, e.g., fetched from resources
// SubmitScore(leaderboards_client, my_leaderboard_id, 1337);

একটি ভালো অভ্যাস হলো আপনার C++ কোডের মধ্যে লিডারবোর্ড আইডিগুলোকে কনস্ট্যান্ট বা রিসোর্স হিসেবে পরিচালনা করা।

লিডারবোর্ড প্রদর্শন করুন

কোনো নির্দিষ্ট লিডারবোর্ডের জন্য ডিফল্ট ইউজার ইন্টারফেস প্রদর্শন করতে, PgsLeaderboardsClient_showLeaderboardUI ফাংশনটি কল করুন। এই ফাংশনটির জন্য ক্লায়েন্ট হ্যান্ডেল, অ্যাক্টিভিটি, লিডারবোর্ড আইডি, টাইম স্প্যান ও কালেকশন এবং একটি কলব্যাক প্রয়োজন।

// Callback function to handle the result of showing the UI
void OnShowLeaderboardUI(PgsStatusCode status_code, bool success, void* user_data) {
  if (status_code == PGS_STATUS_SUCCESS && success) {
    // UI was shown successfully
  } else {
    // Handle error or failure to show UI
  }
}

// Function to show a specific leaderboard UI
void ShowLeaderboard(PgsLeaderboardsClient* client, jobject activity, const char* leaderboard_id) {
  PgsLeaderboardsClient_showLeaderboardUI(
      client,
      activity,
      leaderboard_id,
      PGS_LEADERBOARD_TIME_SPAN_ALL_TIME, // Or PGS_LEADERBOARD_TIME_SPAN_DAILY, PGS_LEADERBOARD_TIME_SPAN_WEEKLY
      PGS_LEADERBOARD_COLLECTION_PUBLIC,  // Or PGS_LEADERBOARD_COLLECTION_FRIENDS
      OnShowLeaderboardUI,
      NULL // user_data - optional context pointer
  );
}

// Example usage:
// ShowLeaderboard(leaderboards_client, android_activity, my_leaderboard_id);

এই ফাংশনটি UI প্রদর্শন করে। activity অবজেক্টটি UI প্রদর্শনের জন্য প্রেক্ষাপট প্রদান করে।