Bu yüzden, Greenfoot adlı çerçevede bu yukarıdan aşağı 2D java oyununu yapıyorum ve savaşacağınız çocuklar için AI üzerinde çalışıyorum. Onların dünya çapında gerçekçi bir şekilde hareket edebilmelerini istiyorum, bu yüzden kısa süre sonra fark ettim, birkaç şey arasında bir çeşit yol bulmaya ihtiyacım olacaktı.
İki A * prototipi yaptım. Biri ızgara tabanlı ve daha sonra ara noktalarla çalışan bir tane yaptım, bu yüzden şimdi engellerin / binaların 2d "haritasından" bir yol yapabileceğim bir düğüm grafiğine ulaşmanın bir yolunu bulmalıyım. Gerçek yol bulma iyi görünüyor, sadece açık ve kapalı listelerim daha verimli bir veri yapısı kullanabilir, ancak ihtiyaç duyduğumda ve gerektiğinde buna ulaşacağım.
Ben ai-blog.net bu yazıda sıralanan tüm nedenleri için bir gezinme kafes kullanmak niyetinde . Bununla birlikte, karşılaştığım sorun, A * 'nın düşündüğü şey, düğümün herhangi bir bölümünden geçtiğinizde çokgen merkezlerinden / kenarlarından en kısa yolun mutlaka en kısa yol olmamasıdır. Daha iyi bir fikir edinmek için stackoverflow ile ilgili sorduğum soruyu görebilirsiniz .
Görünürlük grafiğiyle ilgili iyi bir yanıt aldım. O zamandan beri kitabı satın aldım ( Hesaplamalı Geometri: Algoritmalar ve Uygulamalar ) ve konuyu daha fazla okudum, ancak yine de bir gezinme ağından yanayım ( Amit'in Yol Bulma ile İlgili Notlarından " Karmaşıklığı Yönetme " konusuna bakın ). (Bir yan not olarak, belki de ilk ve son gizlenmemişse birden fazla ara noktayı tek bir düz çizgiye dönüştürmek için Theta * 'yı kullanabilirim. Veya her hareket ettiğimde, sondan önce ara noktaya kontrol edin. buna)
Yani temelde istediğim, bir huni algoritmasıyla (örneğin, Digesting Duck'tan bu) koyduğum bir gezinme ağdır , sadece düğümü takip eden en kısa yol olan düğümü almak yerine, en kısa yolu alacağım, ancak bazı çokgenlerden geçip düğümleri / kenarları atlayabildiğiniz göz önüne alındığında gerçek olan en kısa değil.
Oh ve ben de çokgenlerle ilgili bilgileri nasıl saklamayı önerdiğini bilmek istiyorum. Yaptığım yol noktası prototip örneği için, her bir düğümü bir nesne olarak aldım ve o düğümden seyahat edebileceğiniz diğer tüm düğümlerin bir listesini sakladım, sanırım çokgenlerle çalışmayacak mı? ve bir poligonun açık / sürülebilir olup olmadığını veya katı bir nesne olup olmadığını nasıl anlarım? Çokgeni oluşturan hangi düğümleri nasıl saklarım?
Son olarak, kayıt için: Mevcut başka çözümler olmasına rağmen bunu kendim sıfırdan programlamak istiyorum ve bu oyunu başka bir şeyde (yeniden) kullanmak istemiyorum, bu yüzden önemli değil kaçınılmaz olarak kalitesiz olacaktır.