Game Service için Oyun geliştirmek II, Huawei Sign-in

Mustafa CAN
Huawei Developers - Türkiye
4 min readJul 16, 2020

Bir önceki yazımda projemizi oluşturmuş ve Android Studio üzerinden gerekli hazırlıkları yapmıştık. Artık oyunumuzun kodlamasına geçebiliriz. Başlangıç için bir oyun ekranına ihtiyacımız var. Size oyunun github linkini veriyorum ve ardından kodların işlevlerini açıklayacağım.

https://github.com/MustafaCQN/XOX-Game-Android

activity_main.xml

Aşağıdaki resimden de anlaşılacağı gibi 4 adet LinearLayout ile activity_main.xml’i oluşturuyoruz.

activity_main.xml

Burada aklımızda kalması gereken yerler:

‘X 0–0 O’ yazan skor tablosunun id’si -> player_points

RESET butonunun id’si -> reset_button

Oyundaki butonların id’leri.

İlk satırdakiler sırayla -> button00, button01, button02

İkinci satırdakiler sırayla -> button10, button11, button12

Üçüncü satırdakiler sırayla -> button20, button21, button22

MainActivity.java

OnCreate üzerinden initGame methodunu çağırıyoruz, ardından initGame içerisinde player_points, reset_button ve oyun butonlarını java dosyasında düzenlemek için alıyoruz ve oyun butonlarının onClickListenerlerini atıyoruz(assign).

initGame

isPlayer1Turn — boolean — Sıranın hangi kullanıcıda olduğunu belirten değişken

roundCount — int — round sayısını tuttuğumuz değer. 9 dan büyük olamaz.

Eğer herhangi bir oyun butonuna tıklarsak, onClick methoduna geliyoruz.

onClick

Buradaki ilk kontrolümüzde, basılan butonun boş olup olmadığı kontrol ediliyor, Eğer boş ise bu sefer hangi oyucunun turundayken basıldığı kontrol ediliyor ve ona göre butonun text değeri değiştiriliyor. Tabiki el oynandığı için, roundCount arttırılıyor ve Eğer oyun bitme durumlarından herhangi birine geldiyse ona göre player1Wins veya player2Wins metotlarına gidiyor, eğer kimse kazanmadıysa ve roundCount 9’a geldiyse draw (berabere) metotuna gidiyor. En alttaki else, eğer hiçbirşey olmadıysa turu değiştiriyor.

checkForWin metotunda butonların text değerleri alınıp, ardından yatay, dikey ve çapraz düzlemlerde aynı sembolden 3 tane var mı diye kontrol ediliyor, eğer var ise true, yok ise false döndürüyor. Direkt okunduğunda biraz kafa karıştırıcı olabilir.

checkForWin

checkForWin metotundan true dönerse, kimin turunda olduğumuza göre, o eli turundaki oyuncu kazanmıştır diyoruz ve buna göre player1Wins veya player2Wins metotlarını çağırıyoruz. draw metotunda ise ekrana berabere olduğunu söyleyip, kim başladıysa diğer oyuncunun başlamasını söyleyerek resetBoard metotunu çağırıyoruz.

draw, player1 and player2Wins

updatePointsText metotumuz sadece ekrandaki skor tablosunu göstermeye yarıyor. Oyun içerisinde değişiklikleri ekrana çizmemisi sağlıyor.

updatePointsText

resetBoard tüm oyun butonlarımızın text değerlerini boş String değere atıyor, roundCount değerini sıfırlıyor ve gelen String whoWillStart değerine göre sonraki turda başlayacak oyuncuyu belirliyor.

resetGame and resetBoard

resetGame ise Skor içerisindeki puanları sıfırlıyor ve ardından resetBoard’ı çağırıyor.

Son olarak init metodumuz kalıyor. Aslında bu metodun oyun ile bir alakası yok. Yaptığı şey Opening.java classından gelen intentin içerisindeki AuthHuaweiId nesnesini almak ve bunu kullanarak Huawei Game Service özelliklerine erişimimizi açmak.

init

Artık oyunumuzu açıkladığımıza göre, Signin için gerekli foksiyonları yazabiliriz.

Sign-in Metodu

Bunun için oyunumuza bir ana menü ekliyoruz. main_menu.xml ve Opening.java adlı 2 dosya oluşturuyoruz.

main_menu.xml

main_menu.xml içerisinde ana menümüzün nasıl olacağını tasarlıyoruz ve Start Game yazan ve basıldığında startGameClickHandler metodunu çalıştıran bir Button atıyoruz.

Opening.java

Opening.java içerisinde initSignin metodunu çağırıyoruz ve orada Huawei Sign-in için gerekli HuaweiIdAuthParamsHelper ve HuaweiIdAuthManager nesnelerini kullanarak HuaweiIdAuthService nesnesini alıyoruz (mAuthManager). startGameClickHandler metodu çağırıldığında ise HuaweiIdAuthService nesnemizi kullanarak bir SignInIntent Intenti ve onu takip edebilmek için SIGN_IN_INTENT adında bir int veriyoruz. Gelen cevabı ise onActivityResult metodu içerisinde kontrol ederek, eğer Successful ise AuthHuaweiId değerini bir intente atayarak startActivity metodu ile MainActivity.java classını çağırıyoruz.

Signin için bize gerkenler:

1. HuaweiIdAuthParams objesi

2. HuaweiIdAuthService objesi

3. Yapılacak Signin metodu (silentSignin veya Intent ile signin — biz intentliyi kullandık — )

4. onActivityResult üzerinden intentin result datası, yani beklediğimiz AuthHuaweiId objesi

Sonuç

Artık Oyunun mantığını ve kodlarını anladığımıza göre bir sonraki bölümümüzde Game Service Achievements, Saved Games ve Leaderboards gibi özelliklerini ekleyebiliriz.

(Bu, serinin 2. yazısıdır. ilk yazıya aşağıdaki linki kullanarak erişebilirsiniz.)

--

--