Programlama Dili: Kotlin
Geliştme Ortamı (IDE): Android Studio
Bulut Bilişim (Cloud): Firebase
-
Giriş ekranı: Oyun ilk açıldığında ekranda açılacak sayfa giriş ekranı vardır. Kullanıcı bu ekrandan, kullanıcı adı ve şifresi ile giriş yapabilir, şifre değiştirebilir ve kaydolabilir.
-
Oyun ekranı: Kullanıcı giriş yaptıktan sonra karşısına gelecek olan ekran, oyun ekranıdır. Burada Tek Oyuncu ve Çoklu Oyuncu Olarak iki farklı seçenek bulunur. Oyun ekranı ilk açıldığında “BAŞLA” butonu bulunur. Oyuncu BAŞLA butonuna tıkladıktan 3 saniye sonra oyun ve süre başlatılır.
-
Oyun zorluk seviyesi: Oyunda 2x2, 4x4 ve 6x6 olmak üzere 3 farklı zorluk seviyesi vardır. Oyun başlatıldığında kartlar kapalı şekilde dağıtılır. Oyundaki kartların her birinden birer çift bulur. Buradaki amaç açılan kartın diğer çiftini bulabilmektir. Oyunda kartların sırası her seferinde rastgeledir.
Oyuncu Basit Orta Zor Çoklu Oyuncu Tek Kişilik -
Tüm Kartlar:
Evler Karakter 1 Karakter 2 Karakter 3 Karakter 4 Gryffindor Hufflepuf Ravenclaw Slytherin
Arka plan müziği: Oyun esnasında arka planda bir müzik çalınır. Bu müzik oyun oynanırken çalmaya devam eder ve 3 durumda bu müzik değişecektir.
- Kartın eşi bulunduğunda farklı bir müzik ile uyarı verilir.
- Oyun süresi bittiği zaman arka fon müziği olumsuz bir uyarı verilir.
- Süre bitmeden bütün kartların eşi bulununca arka fon müziği kazandınız anlamında olumlu bir uyarı verir.
-
Login işlemi
// global değişken tanımlandı private lateinit var auth:FirebaseAuth // Aktivite'nin onCreate() fonksiyonu içerisinde auth'a değer atandı auth = FirebaseAuth.getInstance() fun login(view:View){ val email = EmailText.text.toString() val password = PasswordText.text.toString() auth.signInWithEmailAndPassword(email,password).addOnCompleteListener { task-> if(task.isSuccessful){ val user = auth.currentUser?.email.toString() Toast.makeText(this,"Welcome: ${user}",Toast.LENGTH_LONG).show() val intent =Intent(this,FeedActivity::class.java) startActivity(intent) finish() } }.addOnFailureListener{exception-> Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_LONG).show() } }
-
Register işlemi:
fun register(view: View){ val email = EmailText.text.toString() val password = PasswordText.text.toString() auth.createUserWithEmailAndPassword(email,password).addOnCompleteListener { task-> if(task.isSuccessful){ val intent = Intent(this,FeedActivity::class.java) startActivity(intent) finish() } }.addOnFailureListener{exception-> Toast.makeText(applicationContext,exception.localizedMessage,Toast.LENGTH_LONG).show() } }
-
Güncel Kullanıcı Bilgileri:
val user = auth.currentUser if(user!=null){ val intent =Intent(this,FeedActivity::class.java) startActivity(intent) finish() }
-
Çıkış:
auth.signOut()
-
Müziklerin Tanımlanması:
private var MPbacground: MediaPlayer? = null private var MPmatch: MediaPlayer? = null private var MPwin: MediaPlayer? = null private var MPlost: MediaPlayer? = null fun musicSetting(){ if (MPbacground == null) { MPbacground = MediaPlayer.create(this, R.raw.background) MPbacground!!.start() } if (MPmatch == null) { MPmatch = MediaPlayer.create(this, R.raw.card_match) } if (MPwin == null) { MPwin = MediaPlayer.create(this, R.raw.win_congrats) } if (MPlost == null) { MPlost = MediaPlayer.create(this, R.raw.time_over) } }
-
Müziklerin Başlatılması, Sonlandırılması:
MPbacground?.start() MPmatch?.start() MPwin?.start() MPlost?.start() MPbacground?.stop() MPmatch?.stop() MPwin?.stop() MPlost?.stop()
fun timer(){
object : CountDownTimer(45000,1000) {
override fun onTick(time: Long) {
}
override fun onFinish() {
}
}.start()
}
-
Aktiviteler arası geçiş:
// Main Activitesine yönlendirilir val intent = Intent(this,MainActivity::class.java) startActivity(intent)
-
Aktiviteler arası Parametre Aktarımı:
// Önceki aktivite val intent = Intent(this, zorluk_secActivity::class.java) intent.putExtra("sample", "single") startActivity(intent) // Şimdiki aktivite val sample = intent.getStringExtra("sample").toString()
import android.os.Bundle
import android.widget.ImageView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_oyun_basit.*
private lateinit var views: List<ImageView>
private lateinit var cards: List<MemoryCard>
private var indexOfSingleSelectedCard: Int? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
cards.forEachIndexed { index, card ->
val view = views[index]
if (card.isMatched) {
view.alpha = 0.3f
}
view.setImageResource(if (card.isFaceUp) card.identifier else R.drawable.kart2x2)
}
}
private fun updateModels(position: Int) {
val card = cards[position]
// hata kontrolü
if(card.isFaceUp) {
Toast.makeText(this, "Geçersiz Hareket!", Toast.LENGTH_SHORT).show();
return
}
// üç durum olacak
// öncesinde 0 kart çevrilmiş -> seçilen kartı çevir
// öncesinde 1 kart çevrilmiş -> seçilen kartı çevir + aynı olup olmamasını kontrol et
// öncesinde 2 kart çevrilmiş -> seçilmiş kartları ters çevir + seçili kartı çevir.
if (indexOfSingleSelectedCard == null) {
// 0 ya da 2 seçili kart varsa
restoreCards()
indexOfSingleSelectedCard = position
} else {
// 1 kart seçiliyse
checkForMatch(indexOfSingleSelectedCard!!, position)
indexOfSingleSelectedCard = null
}
card.isFaceUp = !card.isFaceUp
}
private fun restoreCards() {
for (card in cards) {
if (!card.isMatched) {
card.isFaceUp = false
}
}
}
private fun checkForMatch(position1: Int, position2: Int) {
if (cards[position1].identifier == cards[position2].identifier) {
Toast.makeText(this, "Eşleşme Bulundu!", Toast.LENGTH_SHORT).show();
cards[position1].isMatched = true
cards[position2].isMatched = true
}
}
}
Proje CTRL + F9 tuş kombinasyonunu kullanarak veya ekranın üst kısmında görünen yeşil çekiç simgesine basılarak build edilir.
Daha sonra üst kısımdaki araç çubuğundan aşağıdaki ekran görüntüsünde gözüktüğü üzere Build Bundle(s) / APK(s) seçeneği üzerine gelinerek Build APK(s) seçeneğine basılır.
Oluşturulan APK dosyası default olarak \app\build\outputs\apk\debug dizinine kaydedilir.
- Kotlin İle Android Mobil Uygulama Geliştirme Eğitimi Temel Seviye , Atıl Samancıoğlu, BTK Akademi
- Kotlin Tutorial
- Android Tutorial
- Nedir bu Android Service ve Broadcast Receiver
- Developer Guides | Android Developers
- Kotlin İle Android Mobil Uygulama Geliştirme İleri Seviye, Atıl Samancıoğlu, BTK Akademi
- Firebase Docs
- İstenilen aktivitenin çalıştırılması veya ana erkana çağrılması
- How to Support ALL Screen Sizes on Android
- How to Retrieve Image from Firebase in Realtime in Android?
- Play Audio Song firebase Storage in Android Studio Tutorial
- Build a Tic Tac Toe Game in Android Studio - Online Mode | GeeksforGeeks