AI yaratmada yeni - nereden başlamalı? [kapalı]


58

Oyun programlamaya yeni başladım ve birbirleriyle savaşan 2 uzay gemisi ile basit bir 2d yukarıdan aşağıya uzay oyunu yapmaya çalışıyorum. Kullanıcı kontrollü uzay gemisi ile iyi yapıyorum, ancak bir AI programlamaya nasıl başlayacağımı bile bilmiyordum. Bu durum için belirli yöntemler / modeller daha iyi midir? Nereden başlasam bile?


1
İşte yaptığım dersten AI üzerinde slaytlarım: sol.gfxile.net/gpc/05ai.pdf
Jari Komppa

4
eğer ifadeler. çoğu.
yavaşladı

Yanıtlar:



27

Bu, AI'yı ilk kez geliştiriyorsanız, devlet düzeni, davranışsal matematik gibi şeyler hakkında endişelenmenize gerek yoktur, hatta konuyla ilgili bir kitap bile almanıza gerek yoktur.

Kelimenin tam anlamıyla böyle bir şey ile kaçabilirsiniz:

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

AI'nın doğru olmasının ana yönü, karakterin hangi davranışlara sahip olmasını istediğinizi ve bunun gerçekçi olarak nasıl başarılabileceğini düşünmektir. Dolayısıyla, temel bir uzay gemisi düşmanı için, gerçekleştirebileceği olası eylemlerin aşağıdakileri yapabileceğini hayal ediyorum:

  • Etrafında yürü
  • Ateş
  • Kaçmak

Ve bu eylemler ne zaman olabilir?

  • Dolaşın - Yapacak başka bir şey yok
  • Ateş - Bir düşmanı tespit ettiğimde
  • Kaçıp - Sağlığım düşük olduğunda / Ateş yakarken / etc

Bunu yaptıktan sonra, karakterinizin içinde olabileceği az sayıdaki "durum" nedeniyle, yukarıdaki gibi bir if ifadesi kullanabilirsiniz. Uygulanacak çok basit davranışlar olduğundan ve gerçekten iyi görünümlü bir hareketle sonuçlanabileceğinden, Yönlendirme Davranışlarına bakmanızı tavsiye ederim.

Daha fazlasını burada bulabilirsiniz: http://www.red3d.com/cwr/steer/
Ve kesinlikle, kesinlikle başladığınızda, Mat Buckland'ın " Programlama Oyunu AI " kitabını kesinlikle tavsiye ederim .

Bunlarla ilgili gerçekten rahat olduğunuzda, Devlet ve Strateji Modellerine bakmanızı öneririm.

Mesele küçük ve basit başlamaktır. Tüm bu terimler hakkında endişelenmeyin, herkesin FSM'ler ve tasarım desenleri hakkında ne olursa olsun etrafta dolaşmaya devam etmesi. Öncelikle tasarlayın ve oluşturun, ardından mevcut yöntemleri veya standartları kullanarak onu nasıl geliştirebileceğinizi merak edin.

Umarım yardımcı olur!


@Fuu Düzenleme arkadaşı için Şerefe :)
Ray Dey

9

OpenSteer ve beraberinde gelen Direksiyon Davranışları belgelerine bakmak isteyebilirsiniz . Kaynak kodu başlangıç ​​seviyesi değildir, ancak arkasındaki kavramlar size iyi fikirler vermelidir.


İnsanlar oyunlarda opensteer kullanıyor mu yoksa simülasyonlar için daha mı fazla?
jle

En azından geliştirilmekte olan bir oyunda kullanmaya çalışıyorum. Şimdiye kadar benim için iyi çalışıyor. Yazarın Sony'deki Playstation grubu için çalışırken çoğunu geliştirdiğine inanıyorum - Büyük olasılıkla bazı oyunlarda kullandı. MobyGames, onu JohnMadden Football'un ve Leisure Suit Larry oyunlarından birinin kredilerinde listeler.
AShelly

FreeOrion, taktiksel savaş motorunda OpenSteer kullanıyor.
Mike Strobel,

1
+1 Opensteer'den bahsetmek için. Çok basit davranışların bir araya gelmesiyle ilgili çok güzel örnekler görmek istiyorsanız, çok karmaşık ve karmaşık görünen bir şey oluşturun. Çıkış direksiyon davranışları! Google, "Boids" ve hoş kullanımlara bakın. İstediğiniz şey sessiz değil, ama size basitlik dışında karmaşıklığın ortaya çıktığını gösterecek
birgündüzey yapacak

9

Strateji tasarım modeline bakmak isteyebilirsiniz . Temel olarak, gemilerin nasıl davranacağına ilişkin temel stratejileri yazın:

  • Hedefe yaklaşın
  • Saldırı hedefi
  • Hedeften kaçmak
  • Güç artışlarına doğru ilerleyin
  • Güç ups kullanın

Daha sonra bu stratejiler arasında seçim yapmak için mantığı (durum makineleri) kullanacaksınız. Örneğin: Eğer gemi kalkanları% 50'nin altına düşmüşse, hedeften uzaklaşın ve güç arttırma / iyileştirme maddelerine doğru ilerleyin.


1
Bu yüzden oyun döngüsünde her seferinde, bu "stratejilerden" hangisinin öncelikli olduğuna karar verir ve sonra bunu uygular?
jle

@jle Çok fazla. Böylece, stratejilerinizin her biri kodunuzu düzenli tutarak, kendi sınıflarına bölünecektir.
Bryan Denny,

7

Ian Millington tarafından Oyunlar için Yapay Zeka kitabını almanı önerebilir miyim? :) http://www.ai4g.com/

Kaynak kodu Github - MIT lisansındadır.

Elbette, eğer C / C ++ kullanmıyorsanız, bu daha az alakalı olabilir.

Ama Yapay aptallık / zeka dünyasına gerçekten harika bir giriş.

Bundan ihtiyaç duyacağınız şeyler direksiyon ve durum makineleridir. Yeni başlayanlar için.


2

Devlet makinelerine giderseniz bazı pratik öneriler: megastata dikkat edin.

Kaçacak bir pozisyon ayarlayarak, yüksek bir hedef hız ayarlayarak, tüm hedefleri temizleyerek, vb. İşleyen bir "kaçma" durumunun cazip gelmesi caziptir. hedef pozisyonu seçen, makineli tüfek kullanan vb. durum makinesi.

Her bir makineye kaçış durumları eklemek zorunda kalacağınız için bu aptalca görünebilir, ancak yalnızca bir veya iki çıktıyla sınırlandırıldığınız için durumlarınız çok küçük olur, bu yüzden bu bir sorun olmamalıdır.

Ayrıca, her kontrol şimdi bireysel kontrol altında olduğundan, saldırı durumunun hala silahlarınızı kontrol etmesini sağlarken bir kaçış hedefi seçerek sona erebilir. Soğutucu sızıntısı nedeniyle motor gücünü korurken bir düşmanı patlatabilirsiniz. Hala önlem atarken çarpışmayı önlemek için yönlendirebilirsiniz. Bütün bunlar, her şeyi kapsayan tek bir durum makinesiyle mümkün olmazdı.


2

AI Oyununda Davranışsal Matematik

AI programlama öğrenmek için bu kitabı başlangıç ​​noktaları listesine eklemek. Sınırlı uygulama algoritmalarından ziyade gözlem ve davranış uygulamalarına odaklanmasıyla, bunun göreve uygun olduğuna inanıyorum.


1

AI nasıl yaratılır zor bir sorudur, çünkü birçok bölümden oluşur:

  • AI'nız için genel bir mimari / paradigma seçtiniz. Senaryoya mı dayanıyor? Planlama kullanır mı? Basit bir FSM mi yoksa BT'leri mi tercih ediyorsunuz?
  • Ardından, bu paradigmaları belirli bir uygulama / araç seti ile uygularsınız.
  • Artık, oyun tasarım seçenekleri ile kalacaksınız, çünkü mimarinizin kullanacağı davranışları düşünmek zorundasınız.

Diğer posterler harika kitaplar önerdi ve bölümlerinde oldukça genel olmasına rağmen (elbette anlaşılabilir birçok kitap gibi) jacmoe tarafından önerilen AI4Games'e düşkünüm.

Tabii ki, her oyun türünün kendine has ihtiyaçları vardır ve arcade / atıcı oyunların ilginç oyunları desteklemek için karmaşık mimarilere ihtiyacı yoktur. Basit direksiyon libleri bu davranışın temeli olarak işi yapacak ve daha sonra çeşitli düşman tipleri için detaylar ekleyeceksiniz (bazıları periyodik olarak ateş eder, bazıları oyuncunun hareketini tahmin ederek ateş eder, bazıları düşmanla yüzleşmek için sırayla döner, diğerleri koordine edebilir) saldırıları vb.)

  • Oyun (AI) kodlaması hakkında bilgi edinmek için en iyi yolun kodun iyi çalışmasına bakmak olduğunu düşünüyorum. Öyleyse, ohloh.net ve github'ı keşfedin ve mevcut FOSS projelerini arayın!
  • Tabii ki, seçebilir zor kısmı ve varolan (ama basit) oyunu oynamak. Davranışı tersine çevirmeye çalışın ve "Bunu nasıl tasarlarım?" Diye düşünün. Tabii ki, ipuçları her zaman yardımcı olur ve bu yüzden muhtemelen burada gamedev'de sordun.
  • Arada bir şey, GameMaker forumlarındaki mevcut atıcı oyunlara da bakmak! Hile yapacak bir sürü basit senaryo bulabilirsiniz! ;)

1

Oyunu oynarken ne yaptığınızı düşünün. Kendine birkaç soru sor.

  • Bir karar verebilmek için hangi bilgilere ihtiyacım var ?
  • Değişikliklere ne zaman tepki göstereceğim?
  • Bu özel oyun oturumunda "uzun vadeli" hedeflerim nelerdir?

O zaman yaptığım şey AI'nın oyun alanına bakması ve AI'nın bu sorulara dayanarak yapabileceği olası eylem veya hareketlerin bir listesini yapmasıdır. Bu hareketleri bir "akıllılık faktörü" ile sıralıyorum ve sıralıyorum. Sonra, oyunun başında oyuncunun seçtiği herhangi bir zorluk seviyesine ve rastgelelik kombinasyonuna dayanarak bir hareket / eylem seçmek ve uygulamak kadar basittir.

Sonra, 500 milisaniyeden sonra tekrar yaparım.

Öğrenme kabiliyetleri ya da hiçbir şeyleri yoktur, ancak yeterince ince ayarlarla, gerçekten önemli olan ikna edici olabilir.

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.