Bir küpün yüzeyinde oynayan bir snake game yapıyorum. Şu anda Dijkstra'nın yol bulma için algoritmasını kullanıyor. Set ve öncelik sıra veri yapıları ile optimizasyonlara rağmen, hala biraz yavaş. Yılan bir yiyecek maddesi yediğinde ve yeni bir tane aramaya başladığında gecikmeyi farkediyorsunuz.Küp Yüzeyinde Bir Yıldız Yol Bulma Algoritması Sezgisel
Bunun yerine A * kullanmaya çalışıyorum ama iyi bir buluşsal bulamıyorum. 4 yön hareketi olan düz bir ızgarada, Manhattan mesafesini kullanırdım. İyi bir nedenden ötürü işe yaramayan 3D Manhattan mesafesini abs(dx) + abs(dy) + abs(dz)
kullanmayı denedim: yılana, oyun dünyası olağandışı bir sarmalayıcı özellikleri olan 6 grids (corresponding to the faces of the cube).
Kodda, her kare bir grid[15][15]
2D dizisinde saklanır. Her yüzü saklamak için 6 dizi vardır. Dolayısıyla, her bir karenin 2B dizisindeki ofseti tanımlamak ve hangi diziyi belirtmek için (arrayX, arrayY, d)
üçlüsü vardır. Ayrıca, her bir kare, uzamsal konumunu açıklayan bir (x, y, z)
üçlüsüne sahiptir. İşte
https://github.com/mhluska/Snakeception/blob/master/src/js/game.coffee#L105
A * için kütüphane kod:: İşte pathfinding olur oyun kodunun alandırhttps://github.com/mhluska/Stimpack/blob/master/src/js/graph.coffee#L60 uygun, kısa ve öz sezgisel bunun için ne
oyun Dünyası?
Grafiğinizi, etrafı saran 2D + şekilli bir ızgara olarak düşünebilirsiniz, böylece A * için sezgiselistiniz az bir kaç değeri alacaktır * (1D'de nasıl yapacağınızı hayal etmeye çalışın) ilk önce saran ızgara) *. Ancak, sadece 1000 düğüm ile, bu gerçekten Javascript'te bile gerekli olmamalı. Kodunuzun bir kısmı (veya kullandığınız veri yapıları) çalıştırmak için çok uzun ** yol alıyor. Hangi çizgilerin yavaşlamaya neden olduğunu belirlemek için bazı profiller yapmanız gerekir - 1000'den fazla noktayı fark edilebilir bir gecikme olmadan kolayca arayabilmeniz gerekir. –