Dungeon üretimi
- Oyun Geliştirme kursu
- İleri seviye
- Ders 47/71
- 4 dk
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
using UnityEngine;
public class DungeonTester : MonoBehaviour
{
// Start icinde odaSayisi tanimla ve yazdir
}Örnek çözüm
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
Room newRoom = new ____(x, y, w, h);
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ı |