Java 2d Oyunu bulma Yolu?

oy
6

Üzerinde çalıştığım Esasen onun bir pacman klonu oyun. Bir Düşman sınıfını ve tüm oyunun 4 hayaletler temsil oluşturulan bu sınıfın 4 örneği var.

Bütün hayaletler ekranın rastgele alanlarda başlatmak ve sonra pacman karakteri doğru ilerleyen çalışmak zorunda. oyuncu pacman sahip olması nedeniyle, çevresinde hareket, onu takip edip ona doğru yakın olası bir yol almalıdır.

Hiçbir labirent / engeller (henüz) bu yüzden tüm harita (400x400 piksel) kendilerine açık zemindir yoktur.

oyuncu ve her Hayalet için, ben X, Y, görüntü genişliği alabilir ve yükseklik bağlıyor. Ayrıca, ben zaten sadece pacman kendi yolunu bulma hayaletler hakkında, bundan o kadar endişeli, bir çarpışma algılama algoritması var.

Oluştur 08/03/2009 saat 06:14
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
0

Sen başlayabileceğini A * (bir yıldız) bakarak

Ve burada bir sayfadır diğer yolu bulma algoritmaları bağlantıları vardır.

[değiştir] gah ... beyin (hangi unutmak) ++ o C veya C, bu kitap hakkında unuttu ... çok yavaş olmakla birlikte, yine de Java için kavramları alabilirsiniz. Bu okumanız için en kolay olmayabilir, ama genel kötü değil olabilir. David M. Bourg, Glenn Seemann Oyun Geliştiriciler için AI .

Cevap 08/03/2009 saat 06:17
kaynak kullanıcı

oy
12

İyi bir yol bulma algoritması için kullanan A * muhtemelen basitçe yönünü bularak karakterler bir hedefe doğru hareket sahip, sofistike verimli, ne de etkili yol arama gerektirmeyen basit bir oyun için, ancak, iyi bir fikir olacağını hedef yeterli olmalıdır.

Örneğin, karar pseudocode karakter hareket yapmak için:

if (target is to the left of me):
    move(left);
else
    move(right);

if (target is above me):
    move(up);
else
    move(down);

Evet, karakter en verimli hareketini yapmak için gitmiyor, ama bu oyun döngünün her tekrarında hedefe yaklaştıkça alacak.

Aynı zamanda, muhtemelen erken 80 dan atari oyunu sofistike pathfinding algoritmaları kullanarak değil ki benim tahminim.

Cevap 08/03/2009 saat 06:25
kaynak kullanıcı

oy
6

serbestçe hareket edebileceği pacman ve hayalet bir "büyük alan" - - Sadece bir piksel ızgarası varsa o zaman en kısa yol kolaydır - hayalet pacman arasında düz bir çizgi.

Ama "en kısa yol" kaçınılmaz bir grafik-teorisi sorunu çözmek için çalışıyoruz anlamına gelir. (Ben grafiklerin bilgi, bazı grafik teorisi, adj tahmin ediyorum. Matrisleri vs!)

Yukarıdaki durumda, bir grafik üzerinde bir düğüm için, her piksel düşünün. Her bir düğüm bir kenar komşularına bağlanmıştır ve her bir kenar ( "yukarı" düğüm hareket "altında" düğüme hareket daha yavaştır) eşit "ağırlık" yer alır.

Yani bu var: ( "*" = Düğüm, "-, /, \, |" = kenar)

*-*-*
|\|/|
*-*-*  ... (etc)
|/|\|
*-*-* 

Pacman merkezinde ise, çok kolay başka düğüme hareket edebilir.

gerçeğe daha yakın bir şey bu olabilir:

*-*-*
| | |
*-*-*  ... (etc)
| | |
*-*-* 

Şimdi, pacman çapraz hareket edemez. sağ alt merkezden gitmek için 2 "şerbetçiotu" yerine birini gerektirir.

ilerlemesini devam etmek için:

*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*

Şimdi, üst kısmında bir düğüme ortasında bir düğümden gitmek, sen 3 şerbetçiotu gerekir. alt sadece 1 hop alır doğru Bununla birlikte, hareket etmek.

Bir grafiğin içine herhangi bir oyun pansiyon kurulum çevirmek kolay olurdu. Her bir "kavşak" bir düğümdür. İki kesişimleri arasındaki yol bir kenar ve bu yol uzunluğu bu kenarı ağırlığıdır.

Gir*. bir grafik (bir adjency matrisi ya da bir düğüm listesi kullanın) oluşturulmasıyla, en kısa yolu bulmak için A * algoritma kullanabilir. Diğer algoritmalar Dijkstra en sayılabilir. Ve bircok digerleri! Ama önce sen B (hayalet) Düğüm düğüm A (pacman) dan gitmek istiyorum nasıl bir grafik ve ardından oyuncak açısından sorununuzu çerçeve gerekir.

Umarım yardımcı olur!

Cevap 08/03/2009 saat 06:55
kaynak kullanıcı

oy
0

Ben pacman tarafından yapılan her hareket en kısa yol algoritması için gitmek düşünüyorum. Çok iyi bir uygulamasıdır Dijkstra'nın algoritması .

Sadece özetlemek için: köşeler ve kenarlar içeren bir grafik olarak labirent görselleştirme. Her kenar bekleme (sizin durumunuzda tüm kenarları aynı ağırlığa sahip) sahiptir. Algoritma aşağı bir adım her hemen ulaşılabilir kenar taşıyarak VERTICE hedef kaynak Vertice bir kısa yol bulur. Daha sonra bir sonraki Vertice üzerinde aynı şeyi ve hedefe ulaşmak için kadar yapmaya devam. ulaşılan ilk yol, en kısa yoldur. pacman önceki konumdaydı ve hangi yönde size algoritmada bazı heiristics alabilmeleri taşındı dikkate alarak gibi şeyler hızlandırmak için bu algoritmaya yapılan birçok optimizasyon mevcut olabilir. Her hareketi pacman her hayaletten kısa yolu bulmak önermek ve bu yönde hayalet hareket edecek. Sonunda mesafesi azalınca size pacman yakalamak mümkün olacaktır.

bunu kullanılabilecek diğer bir sezgisel pacman erişilebilir tüm acil kenarları bulup hayaletler tarafından mümkün olduğunca bu köşe gibi birçok kapsayacak şekilde çalışmak. Bunun yerine biz hedef olarak pacman immediatetly ulaşılabilir köşe belirlediği hedef Vertice olarak pacman ayarlama, sonuç mevcut hayaletler pacman themajor kaçış yollarını örtmek ve onu yakalamaya çalışacağını olacaktır.

Cevap 08/03/2009 saat 08:26
kaynak kullanıcı

oy
3

Bu çok uzun zaman oldu, ama bellekten Pac-Man hayaletler yol bulma yolunda çok yapmadım. onlar size doğru bir koridor ekseni boyunca engelsiz bir yol bulma dahil, hangi size "lekeli" dek oldukça standart randomize labirent geçişi yapacağını ve onların görüş hattı kayboldu kadar sonra da onlar bunun üzerine, size doğru yönlenmek istiyorum rasgele bir desen artacaktır. Daha yüksek seviyelerde On Pac-Man hayaletler "koku" ve bazen de takip edeceğini bir süre arkasında görünmeyen yollar bırakacaktı.

Pac-Man, kadar bir güç var, algoritmada tek fark onlar lekeli zaman, hayaletler senin yerine doğru hareket sizi kaçacaktı olmasıdır.

Yani, gerçek bir deneyim için, muhtemelen hiç bir çok sofistike yol bulma algoritması gerekmez. Eğer fantezi olmasını istiyorsanız, tabii ki, A * uygulayabilir.

Cevap 10/03/2009 saat 09:11
kaynak kullanıcı

oy
2

düşmanlarına karşı doğrudan Walking bir başlangıçtır ama bir labirent eklerken size hayaletler virajlarda veya çıkmaz sıkışmış alamadım bu yüzden biraz daha akıllı yol bulmanın eklemek isteyeceksiniz.

Aşağıdaki öğretici indirilebilir örneklerle A * ile başlamak için mükemmel bir hafif bir kılavuzdur.

Tile bulma Yolu dayalı Haritalar

Cevap 12/03/2009 saat 13:42
kaynak kullanıcı

oy
1

Pacman içinde hayalet tüm farklı kovalayan algoritması vardı

  • Blinky -> Kovalamacaları. Genellikle size en kısa yoldan ve takip etme eğilimi olacaktır.
  • Pinky -> Pusular. pac-man için daha dolambaçlı bir yol almaya meyilli. Ölümcül. (Genellikle bir köşede oyuncu caging, bir yön seçerken serçe ve diğer donanımları satın farklı seçim yapmak eğilimindedir)
  • Mürekkep -> Ucube. Bu ahbap garip davranır. O oldukça rastgele yönetim kurulu hakkında hamle, ama yakındır aldığında bazen kovalar.
  • Clyde -> Budala. rasgele hareket ettirir. Bir tehdit fazla değil.

hayaletler hareketlerinin programlı ilginç bir model vardır: bazen, aynı anda durdurma ve Pac-Man arayışlarını vazgeçmek ve "dağılım modu" girerek, labirentin kendi köşelerine dönecektir.

En algo tam açıklaması yoktur pacman dosyasının

Saygılarımızla

Guillaume

Cevap 10/04/2009 saat 15:59
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more