Skip to content

Developed an Android app using Kotlin and Firebase for database operations, including Firestore, Storage, and Authentication services.

Notifications You must be signed in to change notification settings

zeynepaslierhan/CardMemoryGame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation


SoftwareDeveloperArchive
Hafıza Oynu

Bu proje ile Android uygulama ve bulut bilişim teknolojilerinin kullanılması amaçlanmaktadır. Projede belirtilen süre içinde zorluk seviyesine göre kartları doğru eşleştirmek gerekmektedir.

Programlama Dili: Kotlin

Geliştme Ortamı (IDE): Android Studio

Bulut Bilişim (Cloud): Firebase

Uygulamanın Arayüzleri

  • 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

Müzikler

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.

  1. Kartın eşi bulunduğunda farklı bir müzik ile uyarı verilir.
  2. Oyun süresi bittiği zaman arka fon müziği olumsuz bir uyarı verilir.
  3. 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.

ArkaYüz

Firebase

  • 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üzik işlemleri

  • 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()
    

Sayac

fun timer(){

  object : CountDownTimer(45000,1000) {
    override fun onTick(time: Long) {
    }

    override fun onFinish() {
    }
  }.start()
}

Aktivite

  • 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()
    

Oyun Yapısı

  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
          }
      }
  }

Projenin APK'sının Oluşturulması


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.


Kaynakça

  1. Kotlin İle Android Mobil Uygulama Geliştirme Eğitimi Temel Seviye , Atıl Samancıoğlu, BTK Akademi
  2. Kotlin Tutorial
  3. Android Tutorial
  4. Nedir bu Android Service ve Broadcast Receiver
  5. Developer Guides | Android Developers
  6. Kotlin İle Android Mobil Uygulama Geliştirme İleri Seviye, Atıl Samancıoğlu, BTK Akademi
  7. Firebase Docs
  8. İstenilen aktivitenin çalıştırılması veya ana erkana çağrılması
  9. How to Support ALL Screen Sizes on Android
  10. How to Retrieve Image from Firebase in Realtime in Android?
  11. Play Audio Song firebase Storage in Android Studio Tutorial
  12. Build a Tic Tac Toe Game in Android Studio - Online Mode | GeeksforGeeks

About

Developed an Android app using Kotlin and Firebase for database operations, including Firestore, Storage, and Authentication services.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages