Görünüşe göre kendi sorunuzu cevapladınız. A * muhtemelen en iyi yaklaşımdır. Evet elbette dağlardan kaçınmak için yükseklik bilgilerinin kullanılması da dahil olmak üzere tarif ettiğiniz şekilde kullanılabilir. Dünyanızın yüzeyindeki herhangi bir ızgara hakkındaki bilgilere erişebildiğiniz sürece, A * buluşsal yönteminde kullanamamanız için hiçbir neden yoktur.
Son olarak, yol bulmayı sorunuzun sonunda izlenen yolla karıştırıyorsunuz. Yol bulma, sezgisel olarak eklemediğiniz sürece ve bir gezegenin yüzeyinde olduğunuzdan, yerçekimi ile ilgilenmez, yerçekimi esasen tüm yüzey üzerinde aynı olacaktır. Birçok oyunun hareketle birlikte yerçekimi var, yapamamanın hiçbir nedeni yok.
Temelde kırmızıdan maviye giden, bir küpte olduğu gibi bir kürede aynı olacak şekilde eşlemek istiyoruz.
A * sık sık mevcut düğümüne komşu olduğundan, bitişik düğümleri almak için kolayca bir dizi işlev oluşturabilirsiniz. Örneğin, getXPlus()
, getXMinus()
, getZPlus()
ve bu kadar. Bu işlevler geçerli düğümü alır ve düğümü işlev adıyla belirtilen yönde döndürür.
Çoğu zaman bu fonksiyonlar bir değeri arttırabilir ve ancak kenarlarda bu değişecektir.
Küpünüzün yüzeyini bir 2D koordinat sistemine eşlemek isteyeceksiniz. Ancak bunu yapmak size kalmış, sıraya girmek zorunda değiller, her ızgara alanına benzersiz bir X, Y koordinatı verin.
Şimdi bir kenardayken ve bitişik ızgara alanını elde etmek, sadece koordinatları arttırmak zorunda değildir. Hangi yüze geçtiğimizi bulmalı ve o yüzün koordinatlarına geçmeliyiz.
Örneğin, XPlus koordinatının buraya getirilmesi hem X hem de Y koordinatlarını değiştirecektir, çünkü yeni bir yüzdeki yeni bir ızgara alanına geçiyoruz. Yeşil çizgi iki yüz arasındaki bir kenarı temsil eder.
Şimdi bunlar sadece küresel koordinatlar, şu anda üzerinde bulunduğunuz küp yüzünü temsil eden 3. boyutla dahili bir yerel koordinat sistemi kullanmak daha kolay olabilir.
Her iki durumda da, küpün önündeki her ızgara alanı için benzersiz bir koordinatınızın olması gerekir. Aralarında geçiş yapmak, koordinat sistemini nasıl uyguladığınıza bağlı olacaktır. Bu koordinatın kürenin yüzeyiyle de nerede eşleştiğini bilmeniz gerekir.
Tüm bunlar eninde sonunda soyutlanmalı, böylece onu bile bilmiyorsunuz.