Yılan AI Tasarlamak


9

Bu gamedev yığın mekanizmasında yeniyim ama daha önce matematik ve cs sitelerini kullanmıştım.

Yani, kuralların geleneksel Nokia yılan oyununa çok benzediği 5 dakikalık turda diğer dört yılanla rekabet edecek bir yılan için AI oluşturmak için bir yarışmaya katılıyorum, ancak beş yılan olması, tahta 30x30 ve sahada küçük engeller var.

Nokia oyunu gibi, meyveye ulaştığınızda yılanınız büyür ve kendinize, başka bir yılana veya öldüğünüz duvara çarparsanız. Oyun hamleler arasında 30ms gecikme ile çalışır ve sunucu yeni oyun durumunu her 50ms'de kodun analiz etmesi gereken ve sonraki hamleyi vermeyecekleri ve gönderemeyen gönderir.

Kazanan, oyunun herhangi bir noktasında en uzun uzunluğa sahip olan yılan. Kravat kırıcılara öldürme kararı verilir.

Şimdiye kadar yaptığım şey, yılanımın elmaya en yakın olup olmadığını belirlemek için her yılandan bir A * grafik araması yapıldı ve eğer elma için gidiyor. Aksi takdirde, bir sonraki elmayı tahmin etmek için yılanımın gittiği tahtadaki en boş alanı belirlemek için düzgün bir algoritma yaptım.

Bunun dışında, yılanımın dışarı çıkamayacağı bir tuzağa girmediğinden emin olmak için bazı küçük hayatta kalma kontrollerim var ve eğer sıkışırsa, dışarı çıkma şansı verecek bir şeyim var.

...

Her neyse, yılanımı bir test sunucusunda test ettim ve oldukça iyi. Genel olarak, sadece emin bir şey olduğunda elma için gitme stratejisi ve diğer yılanlardan daha hızlı büyümesini sağladığında yer bulma stratejim (bazı yılanlar benzer bir şey yapar, ancak genellikle sadece orta veya bir köşeye gider) bazen kazanır Bu deneme oyunları ama daha çok hayatta kalma konusunda bir kenara sahip gibi görünen aynı yılan tarafından dövülmüyor (yılanım daha hızlı büyüyor ama sonra bir şekilde ölüyor ve bu diğer yılan sadece yavaşça ilerliyor ve tutarlılık kazanıyor.

Bu yüzden herkesin yılanımı iyileştirmeye çalışması gereken fikirleri merak ediyordum. Ya da belki yeni bir yaklaşımın fikirlerini almak. İşlevlerim ve sınıflarım iyi, bu yüzden sert görünebilecek değişiklikler çok kötü olmamalı. Tüm fikirleri teşvik ediyorum.

Düşüncesi olan var mı?

Yanıtlar:


5

İyi bir savunma stratejisi mükemmel bir şekil yapmak olabilir (böylece kafanız ve arka tarafınız her zaman birbirinden 1 boşluk uzaktadır ve tam bir kare veya verilen uzunlukta oluşturmak mümkün olan her şeyi yaparsınız), bu sizi oldukça ölümsüzdür çünkü hiçbir yılan kapalı bölgenize giremez ve asla kendinize girmezsiniz (bir elma ağzınızda bir şekilde ortaya çıkmadıkça, ancak boşluk yoksa bunun imkansız olduğunu düşünürüm).

Bu, elmanın aslında kapalı alanınızda görünmesi için bunu yapmamanız için programlanabilir ve diğer yılanlar muhtemelen onu almaya çalışırken ölecektir, o zaman bir süre geçtikten sonra geçişi bu şekilde elde edebilirsiniz. mümkün olan en iyi şekle geri dönün (biraz zor bir algoritma olabilir ama yapılabilir görünüyor)

Elma için ne zaman gittikleri sadece ne kadar uzakta olduklarına bağlıdır, belki de iyi bir marjla en yakınsanız, bunun için gidebilirsiniz, ancak aksi takdirde muhafazakar kalın, söylemesi zor muhtemelen deneme yanılmalarına göre ayarlamanız gerekir , ama bence bu iyi bir strateji.


1
Yani temelde, "yılanı" "kaplumbağa" olmalıdır. xD +1 iyi fikir.
Cypher

İyi bir. Ancak tahtada engeller var. Bu nedenle, diğer yılan programcılarının bir engel olup olmadığını kontrol etmek için yılanlarını yapmaları gerekir (duvar veya elmayı çevreleyen diğer yılanlar). Gelip sadece ölmeyebilirler. Bu problemden kaçınmak için yapılabilecek bir şey, baş ve kuyruk arasında önemli bir boşluk bırakmaktır.
Shashwat

hmm ilginç bir fikir, sanırım yılanım sadece bir sonraki elma yumurtlamak için bekliyor etrafında böyle bir şey uygulamak olabilir .. haha, biraz ağzımda tho yumurtlama hakkında biraz endişeliyim, ölüm ve bu oyunlar çoğu zaman zamansız bir ölüm tarafından kararlaştırıldı
Rawb

@Ronald Aslında ağzınızda elma yumurtlama tespit ederseniz, sadece içeri ve geri dönüp devam edebilirsiniz, AI mükemmel refleksine sahip olduğundan, onu nasıl uyguladığınıza bağlı olarak kolayca düzeltilmesi (ve hatta kendi kendini düzeltebilir) olması gerekir.
Kevin DiTraglia

0

Yılan, stratejisini mevcut uzunluğuna uyarlamalıdır.

Çok uzun bir yılan vücudunu rakiplerde çit yapmak için kullanabilir. Bu, duvarlı bir mühür yapması gerektiği anlamına gelir.

Eğer yılan doğuya gidiyorsa, onun kuzeydoğusundaki bir elma ile kuzeye dönmeden önce duvara kadar gitmelidir, bu nedenle diğer yılanlar için olası yollar ciddi şekilde sınırlıdır.

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

C kafalı bu yılan, e8'de değil, e8'de kuzeye dönmelidir, böylece altındaki herhangi bir rakip tuzağa düşecek ve 'e' çizgisinin üzerinde ortaya çıkan elma yiyemez.

Kesebileceğiniz alan ne kadar büyükse ve ne kadar uzun süre tutabiliyorsanız, o kadar iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.