MVVM ile Game Service Kullanımı / Part 4— Leaderboards

Berk Özyurt
Huawei Developers - Türkiye
5 min readFeb 23, 2021

Herkese merhaba,

Bu makale, Huawei Game Service blog serisinin dördüncü bölümüdür . Dördüncü bölümde Game Service hakkında biraz detay verdim ve leaderboards hakkında bilgi verip MVVM yapısı ile mobil oyun uygulamanızda nasıl kullanılacağını anlattım .

Game Service blog serisinin üçüncü bölümünü aşağıda bulabilirsiniz.

Leaderboards Nedir?

Leaderboards, oyuncuların sıralamalarını görüntüleyerek oyuncular arasında rekabeti artırmanın etkili bir yoludur. AppGallery Connect’te 70 adede kadar Leaderboards oluşturabilirsiniz. Oyununuz, bir oyuncunun puanını, belirli anlarda oluşturduğunuz bir veya daha fazla skor tablosuna bildirebilir (örneğin, bir oyuncu bir seviyeye ulaştığında veya bir tur bittiğinde). Huawei oyun sunucusu, oyuncuların puanlarını otomatik olarak işler ve derecelendirir. Ardından, Leaderboardsu oyuncularınıza göstermek için gerekli API’leri çağırabilirsiniz.

Bir Leaderboards temel işlevleri aşağıdaki gibidir:

  1. Huawei oyun sunucusu, bir oyuncunun bildirilen bir skorunun bu oyuncu için kaydedilen en iyi puandan daha iyi olup olmadığını otomatik olarak kontrol eder. Huawei Game Service ilgili tüm liderlik tablolarını yeni skorla güncelleyecektir.
  2. Bir oyunda en fazla 70 Leaderboard olabilir ve bir skor tablosunda 5000 adede kadar kayıt olabilir.
  3. Huawei oyun sunucusu, bir Leaderboard için günlük, haftalık ve tüm zamanların sürümlerini otomatik olarak oluşturur. Örneğin, sunucu bir yarış oyununun bitiş zamanı liderlik tablosu için günlük, haftalık ve tüm zamanların sürümlerini oluşturabilir. Her zaman çerçevesi için bir Leaderboard oluşturmanıza gerek yoktur.
  4. Leaderboards, ilgili oyun sunucusunun yerel saatine göre verileri sıfırlar. Örneğin, Çin sitesi UTC + 08: 00'ı benimser. Günlük Leaderboard her gün 00: 00'da sıfırlanır ve haftalık liderlik panosu, Avrupa sitesi için Cumartesi günü 24: 00'da ve diğer regionlar için Pazar günü 24: 00'da sıfırlanır. Bir Leaderboard, yalnızca aynı regiondaki oyuncuların sıralamasını gösterir.

Lider Tablosu Nasıl Oluşturulur?

Leaderboards tabloları konsolda oluşturulur. Bunun için öncelikle Huawei AGC Konsolunda oturum açın.

Panele erişmek için aşağıdaki yolu takip edin.

“My Apps” -> Your App Name -> “Operate” -> “Leaderboards”

Bu sayfada, skor tablolarınızı görebilir ve “Create” butonuna tıklayarak yeni bir skor tablosu oluşturabilirsiniz.

“Create” butonuna tıkladıktan sonra, yeni bir leaderboard oluşturma sayfasını göreceksiniz. Bu sayfada leaderboard için bazı bilgiler vermelisiniz. Bir leaderboard aşağıdaki temel özellikleri içermelidir:

  1. Leaderboard ID: Bir leaderboard tanımlamak için AppGallery Connect tarafından oluşturulan benzersiz bir ID değeri.
  2. Leaderboard Name: Leaderboard tablosunun adı.
  3. Score: Bir leaderboard için bir oyuncunun puanı. Puanlar, leaderboard oluşturulurken doğrudan tanımlanamaz.
  4. Custom Unit: Sayısal bir leaderboard için birim. Örneğin metre veya kilometre gibi sayılar için özelleştirebilirsiniz.
  5. Icon: Bir leaderboard ile ilişkili simge. Simge, 512 x 512 piksel çözünürlükte ve PNG veya JPG biçiminde olmalıdır. Simgede yerelleştirilmesi gereken metinleri kullanmaktan kaçının.
  6. Ordering Mode: Leaderboard sıralama modu. Daha büyük veya daha küçük bir puanın daha iyi olup olmadığını tanımlayabilirsiniz. Bir leaderboard yayınlandıktan sonra mod değiştirilemez.
  7. Limits: Bir leaderboard için izin verilen alt ve üst puan sınırları. Bu ayar, açıkça hileli olan puanların atılmasına yardımcı olabilir. Leaderboard yayınlandıktan sonra sınırlar değiştirilemez.
  8. List Order: Tüm leaderboards arasında bir liderlik sıralaması. Bir leaderboard oluştururken bu özelliği ayarlamanız gerekir.
  9. Multi-Language: Bir leaderboardsun çok dilli bilgileri. Bir leaderboard oluştururken oyununuzun hangi dilleri desteklediğini tanımlayabilirsiniz. Desteklenen her dilde leaderboard adını ve özel birimi (tanımlanmışsa) tanımlamanız gerekir.
  10. Score Format: Puan biçimini, bir leaderboard oluştururken aşağıdakilerden herhangi biri olarak tanımlayabilirsiniz:
  • Currency : Puanları bir para birimi biçiminde görüntüler. Puan değeri, para birimi tutarını temsil eder.
  • Time : Puanları bir saat biçiminde görüntüler.
  • Numeric: Puanları sayı olarak görüntüler.

Gerekli tüm bilgileri yazdıktan sonra, “Save” butonuna tıklayın ve kaydedin. Kaydettikten sonra tekrar leaderboard listesi göreceksiniz. Ve leaderboardu yayınlamak için “Release” butonuna tıklamanız gerekmektedir. Ayrıca, bu sayfada leaderboards ayrıntılarını düzenleyebilir ve görebilirsiniz. Leaderboards onaylanması için 1–2 gün beklemelisiniz. Oyuna developer hesabınızla giriş yapabilir ve leaderboards onaylanana kadar test edebilirsiniz. Ancak diğer kullanıcıların leaderboardu görüntüleyebilmesi için onay beklemesi gerekir.

Puanların Görüntülenmesi

  1. Leaderboard Sayfası

İlk olarak, bir Xml dosyası oluşturun ve tüm liderleri listelemek için recyclerView ekleyin. Örnek bir tasarımımı aşağıda bulabilirsiniz.

2. LeaderboardsViewModel Sınıfı

LeaderboardsViewModel sınıfı, View sınıfından veri alır, verileri işler ve View sınıfına tekrar gönderir.

Liderleri listelemek ve View sınıfına göndermek için öncelikle bir LiveData listesi ve ArrayList oluşturun. Daha sonra getLiveData() ve setLiveData() metotlarını oluşturun.

İkinci olarak, liderlik tablosu için bir RankingsClient oluşturun. Ve tüm liderleri listelemek için bir metot oluşturun. Tüm liderleri arrayList’e ekleyin. Daha sonra bu diziyi LiveData listesine set edin.

Son olarak, bir StringBuffer oluşturun ve getRankingTopScores metoduyla bir task oluşturun ve oradaki tüm sıralama parametrelerini ayarlayın. Burada rankId, timeDimension, maxResults, offsetPlayerRank, pageDirection tanımlamanız gerekir.

Liderlik tablosunu listelemek için bir metot oluşturun. OnSuccessListener ve onFailureListener ile taskı başlatın. Ayrıca, sonuçları onSuccessListener’da log olarak yazdırabilirsiniz.

Aşağıda LeaderboardsViewModel sınıfının tamamına ait kodları bulabilirsiniz.

3. LeaderboardssViewModelFactory Sınıfı

Bir ViewModelFactory sınıfı oluşturun ve contexti parametre olarak ayarlayın. Bu sınıf, ViewModel sınıfını döndürmelidir.

4. Adapter Sınıfı

Skor tablosunu listelemek için bir adapter sınıfı ve özel bir LeaderboardItem tasarımı oluşturmanız gerekir. Burada ihtiyaçlarınıza uygun bir tasarım yapabilir ve adapter sınıfı oluşturabilirsiniz.

5. LeaderboardFragment

Öncelikle ViewModel bağımlılıkları Xml dosyasına eklenmelidir. Bunun için, Xml dosyanızı yeniden açın ve variable name alanına“viewmodel” olarak ekleyin. type kısmına ise ViewModel sınıfınızın dizinini ekleyin.

<data>
<variable
name="viewmodel"
type="com.xxx.xxx.viewmodel.LeaderboardViewModel" />
</data>

LeaderboardFragment’a geri döndürün, ViewModelFactory, ViewModel, ve az önce XML dosyasında oluşturudğunuz binding nesnelerini ekleyin.

private lateinit var binding: FragmentLeaderboardBinding
private lateinit var viewModel: LeaderboardViewModel
private lateinit var viewModelFactory: LeaderboardViewModelFactory

Puan listesini almak için ViewModel sınıfını çağırın ve adapter sınıfı yardımıyla recyclerView’e set edin. View sınıfının tamamını aşağıda bulabilirsiniz.

Leaderboard’a Skor Kaydetme

Bir oyuncunun skorunu leaderboarda göndermek için, öncelikle RankingSwitchStatus’u etkinleştirmelisiniz. Bu değer varsayılan olarak 0'dır. 1 olarak ayarlamalısınız.

Bunun için öncelikle bir RankingsClient oluşturun ve parametreyi 1 olarak ayarlayarak setRankingSwitchStatus metodu ile bir task başlatın.

Bu taska addOnSuccessListener ve addOnFailureListener ekleyin. Ve buradan sonuçları kontrol edin. Göreviniz başarılıysa, burada skor gönderme metodunu çağırmalısınız.

Skor kaydetme metodu aşağıdakine benzer yalnızca bir satırdan oluşmaktadır.

rankingsClient!!.submitRankingScore(LEADERBOARD_ID, score.toLong())

Bu satır sayesinde, belirli bir leaderboards bir skor gönderebiliriz.

Önemli Bilgi: Leaderboard skor artışını desteklemiyor. Bir oyuncunun puanını artırmanız gerekirse, tüm puanları event olarak veyasaved games ile kaydetmeniz gerekir. Bu sayede puan değerini alabilir ve yükselterek tekrar kaydedebilirsiniz.

Tüm metotları aşağıda bulabilirsiniz.

Sonuç

Bu makale yardımıyla konsolda bir Leaderboard oluşturabilirsiniz. Ayrıca, bir skor kaydedebilir ve liderlerinizi oyun uygulamanızda listeleyebilirsiniz.

Bir sonraki yazımda Saved Games ile ilgili bilgiler vereceğim ve bir örnek paylaşacağım. Oyun uygulamanızı temiz mimari ile geliştirmek için lütfen beşinci makaleyi takip edin.

--

--