CodeBlanks Logo Icon CodeBlanks

Dungeon üretimi

Basit bir dungeon üretim algoritmasını öğrenirsin.

Zindan (Dungeon) Üretim Mantığı

Roguelike oyunların temeli olan zindanlar odalar (rooms) ve onları birbirine bağlayan koridorlardan (corridors) meydana gelir. Algoritma önce haritaya rastgele boyutlarda ve çakışmayan odalar yerleştirir.

public struct Room {
    public int x, y, width, height;
    public bool Intersects(Room other) {
        return !(x + width < other.x || other.x + other.width < x);
    }
}

Çakışma kontrolü (Intersects) sayesinde odaların üst üste binmesi engellenir.

Koridorlar ile Odaları Bağlama

İki odanın merkez noktaları (center) hesaplandıktan sonra L-şeklinde yatay ve dikey koridorlar kazılır. Bir döngüyle iki oda arasındaki duvar hücreleri zemin karosuna dönüştürülür.

void CreateCorridor(Vector2Int from, Vector2Int to) {
    // Once yatay, ardindan dikey koridor hucresi acar
    for (int x = from.x; x != to.x; x += (to.x > from.x ? 1 : -1)) {
        map[x, from.y] = 1;
    }
}

Tüm odalar bu şekilde birbirine bağlandığında kesintisiz bir zindan ağı oluşur.

Uygulama Zindan oda sayısı kontrolü

Bir Start metodu tanımla. İçinde int odaSayisi = 6; tanımla ve konsola "Olusturulan oda: " + odaSayisi yazdır.

Başlangıç kodu

Player.cs
using UnityEngine;

public class DungeonTester : MonoBehaviour
{
    // Start icinde odaSayisi tanimla ve yazdir
}

Örnek çözüm

Player.cs
using UnityEngine;

public class DungeonTester : MonoBehaviour
{
    void Start()
    {
        int odaSayisi = 6;
        Debug.Log("Olusturulan oda: " + odaSayisi);
    }
}

Beklenen çıktı

Olusturulan oda: 6

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Basit bir zindan üretim algoritmasında odalar haritaya yerleştirildikten sonra ikinci temel adım nedir?

  • Shader kodlarını diske kaydetmek
  • Tüm odaları haritadan silmek
  • Odaları birbirine bağlayan koridorlar (corridors) oymak Doğru cevap
  • Oyun motorunun grafik ayarlarını en düşüğe almak

Açıklama: Odalar yerleştirildikten sonra oyuncunun odalar arasında dolaşabilmesi için koridorlar kazılarak yollar açılır.

2 Yeni oda oluştur

Soru
Room newRoom = new ____(x, y, w, h);
Cevap
Room newRoom = new Room(x, y, w, h);

Açıklama: Zindanda yeni bir oda tanımlamak için 'Room' yapısının yapıcısı çağrılır.

3 Zindan üretim terimleri

Kavram Anlamı
Room Zindandaki kapalı geniş oda alanı
Corridor Odaları birbirine bağlayan dar geçit
Intersects Odaların çakışıp çakışmadığı testi
Center Koridorların hedeflediği oda ortası

İleri seviye bölümündeki tüm dersler