Biyo Mahjong Geliştirici Günlüğü: Unity'de Taş Eşleştirme Algoritması ve Katman Mantığı

26.03.2026
Burak Erol
65 Görüntülenme
Biyo Mahjong Geliştirici Günlüğü: Unity'de Taş Eşleştirme Algoritması ve Katman Mantığı

Biyo Mahjong Geliştirici Günlüğü: Unity'de Taş Eşleştirme Algoritması ve Katman Mantığı

Biyo Mahjong oyunumuzun görsel kimliğini biyoloji laboratuvarı konseptiyle oluşturduktan sonra, işin en zorlu teknik kısmına, yani katmanlı (layered) eşleştirme algoritmasına geçtik. Mahjong, Candy Crush gibi düz bir 2D grid (ızgara) üzerinde oynanmaz; taşlar birbirinin üzerine biner. Bu durum, arka planda iyi bir veri yapısı kurmayı zorunlu kılar.

Taşların (Tiles) 3 Boyutlu Dizilimi

Unity'de taş dizilimini yönetmek için 3 boyutlu bir dizi (3D Array) mantığı kullandık. Tahta (Board) yapımız X, Y, Z koordinatlarından oluşur. Burada Z ekseni, taşın kaçıncı katmanda (yükseklikte) olduğunu temsil eder.

Her taşın bir veri modeli vardır:

  • ID: Taşın türü (Miyokondri, DNA, Hücre Zarı vb.)
  • GridX, GridY, LayerZ: Dizilimdeki konumu.
  • IsBlocked: Tıklanabilir durumda mı?

En Kritik Kural: Bir Taş Ne Zaman Tıklanabilir (Free) Olur?

Klasik Mahjong kuralına göre bir taşın seçilebilmesi için iki şartın aynı anda sağlanması gerekir:

  1. Taşın tam üzerinde (bir üst katmanında) başka bir taş olmamalıdır.
  2. Taşın sağında VEYA solunda boşluk olmalıdır. (Eğer hem sağı hem solu başka taşlarla kapalıysa, üstü boş olsa bile o taşı çekemezsiniz.)

Bu durumu Unity (C#) tarafında kontrol etmek için tahtayı yöneten ana sınıfımızda aşağıdaki gibi bir algoritma kurguladık:

// MahjongBoard.cs - Tıklanabilirlik Kontrolü
public bool IsTileFree(MahjongTile tile)
{
    // Kural 1: Üzerinde taş var mı?
    if (HasTileAbove(tile.GridX, tile.GridY, tile.LayerZ))
        return false;

    // Kural 2: Sağında veya Solunda boşluk var mı?
    bool leftBlocked = HasTileAt(tile.GridX - 1, tile.GridY, tile.LayerZ);
    bool rightBlocked = HasTileAt(tile.GridX + 1, tile.GridY, tile.LayerZ);

    // İkisi birden blokluysa taş sıkışmıştır (Free DEĞİLDİR)
    if (leftBlocked && rightBlocked)
        return false;

    // Yukarıdaki şartlara takılmadıysa taş özgürdür!
    return true;
}

Çözülebilirlik (Solvability) Garantisi

Mahjong oyunlarındaki en büyük hüsran, oyuncunun oyunun yarısında "Hamle Kalmadı" ekranıyla karşılaşmasıdır. Taşları tamamen rastgele dağıtmak (Random Shuffle) bu riski inanılmaz artırır.

Biyo Mahjong'da Tersine Dağıtım (Reverse Shuffle) algoritması kullandık. Algoritma, önce tahtanın bitmiş (tamamen çözülmüş) halini hayal eder. Ardından çiftleri (eşleşen iki biyoloji taşını) alır ve tahtanın üzerindeki serbest (Free) noktalara yerleştirerek oyunu geriye doğru inşa eder. Böylece üretilen her bölümün %100 çözülebilir olduğu matematiksel olarak garanti altına alınmış olur.

Sonuç

Görsel olarak ne kadar tatmin edici olursa olsun, bir bulmaca oyununun arkasındaki matematiksel temel sağlam değilse oyuncu bunu hisseder. Biyo Mahjong'un arka planında çalışan bu pürüzsüz algoritma sayesinde, oyuncular tamamen biyolojinin o büyüleyici dünyasına ve lo-fi atmosferin rahatlatıcı etkisine odaklanabiliyorlar.