Bir yol bulma algoritması tarafından aranan alan için kare veya altıgen bir ızgara kullanmak arasında önemli bir fark var mıdır. Başka bir deyişle, kare veya altıgen daha iyidir ve eğer öyleyse neden.
Bir yol bulma algoritması tarafından aranan alan için kare veya altıgen bir ızgara kullanmak arasında önemli bir fark var mıdır. Başka bir deyişle, kare veya altıgen daha iyidir ve eğer öyleyse neden.
Yanıtlar:
Kare vs altıgen ızgaraları kullanıp kullanmayacağınıza karar vermek için ana düşünce AI uygulamasının kolaylığı olmamalıdır - genişlik ilk ve derinlik ilk arama algoritmaları, ne tür bir grafiğiniz olursa olsun hemen hemen aynıdır.
Aksine, bu oyun tasarımcıları tarafından düşünülmesi gereken bir oyun sorunudur. Kare ızgaralar kitle pazarı için daha erişilebilir (altıgen tahtalar "inek" görünme eğilimindedir) ve yukarı / aşağı / sol / sağ kontroller dünyasında, bir UI açısından altıgenlerden daha kareler arasında gezinmek çok daha sezgiseldir. Kare ızgaralar da hareketi biraz daha kısıtlama eğilimindedir; dikey hareket varsayarsak (köşegen değil), altıgen bir ızgaradaki 3 hareketle karşılaştırıldığında, bir kare engelin etrafında yürümek 4 hareket gerektirir. Bir programlama açısından, altıgenlerin uygulanması da biraz daha kolaydır, ancak bir kare ızgara iki boyutlu bir diziye eşit olduğu kadar arama algoritmaları ile ilgili değildir, ancak bir altıgen ızgara gerçekten standart bir veri yapısıyla eşleşmez.
Kare ızgaraların aşağı tarafı, hareketin asla doğru hissetmemesidir. Çapraz olarak hareket etmek, sqrt (2) hareket noktalarını almalıdır, ancak pratikte ya 1 harekettir (bu, diyagonallerde yürümek gibi hissettirir hızlıdır ve nadiren ortogonal olarak yürümenin bir nedeni vardır) veya 2 hareketidir (bu, çapraz hareketi çok yavaş hissettirir) ). Onaltılık ızgaralarda hareket mesafesi çok daha sezgiseldir, çünkü hangi yolu seçerseniz seçin her zaman bir altıgenden diğerine aynı mesafe.
Hiçbir şekilde bir AI uzmanı değilim, ancak fark göz ardı edilebilir olmalıdır. Kare ızgaralar biraz daha hızlıdır (6 yerine düğüm başına 4 bağlantı), ancak bu gerçekten algoritmik çalışma süresinde sınırlayıcı faktör değildir. Hangi algoritmayı kullanmayı planladığınıza bağlı olarak, kod bir onaltılık ızgara için biraz daha karmaşık olabilir, çünkü koordinatları hesaplamak biraz daha karmaşıktır ve inandığım dörtlü / oktree kısayollarını kullanmak daha zordur genellikle yol bulmada kullanılır.
Ancak sıra tabanlı strateji oyun seviyesi gibi basit bir dünya için iki düzen arasındaki farkın çok önemli olmaması gerekir; bir kare ızgara biraz daha basit ve daha hızlı olacaktır.
Altıgenler hakkındaki bu rehber harika. Yol bulma ile ilgili bölüm etkileşimli bir örneğe ve kare yol bulmanın nasıl uyarlanacağına dair bazı bilgiler içerir.
A * veya Dijkstra algoritması veya Floyd-Warshall gibi grafik tabanlı yol bulma kullanıyorsanız, onaltılık ızgaralarda yol bulma, kare ızgaralardaki yol bulmadan farklı değildir.
- Komşular. Ben yol bulma öğretici sağlamak örnek kod bir konumun komşuları almak için graph.neighbors çağırır. Bunun için komşular bölümündeki işlevi kullanın. Geçilemez olan komşuları filtreleyin.
- Sezgisel. A * için örnek kod, iki konum arasında mesafe veren sezgisel bir işlev kullanır. Hareket maliyetlerine uyacak şekilde ölçeklendirilmiş mesafe formülünü kullanın. Örneğin, hareket maliyetiniz altıgen başına 5 ise, mesafeyi 5 ile çarpın.