Game Service için Oyun geliştirmek II, Huawei Sign-in
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.
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).
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.
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 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.
updatePointsText metotumuz sadece ekrandaki skor tablosunu göstermeye yarıyor. Oyun içerisinde değişiklikleri ekrana çizmemisi sağlıyor.
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 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.
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.)