1
Oyunlar İçin Yapay Zeka Teknikleri 1 : Dolaşan AI
29.Ağustos.2009 Kategori: Oyun geliştirme Yapay Zeka
Michael Morrison’un Game Programming kitabında dikkatimi çeken bir kısmı burada birkaç parça halinde paylaşmak istiyorum. Her ne kadar çok kapsamlı değilse bile, basit oyunlara nasıl yapay zeka ekleyeceğinizi anlayabilirsiniz. Bu da en azından bir başlangıç olur.
Oyun AI Türleri
Çok farklı türlerde AI sistemleri ve bu sistemleri tamamlayan özel algoritmalar vardır. Yapay zekayı sadece oyun dünyasıyla sınırlandırsanız bile, çok sayıda seçenek ve bilgi kümesiyle karşılaşacaksınız. Bazı yapay zeka çözümleri, belirli oyun türleri üzerinde daha sık kullanılır. Farklı durumlara uygulanabilen çok sayıda farklı seçenek vardır. Oyunlarla ilgili yapay zeka algoritmaları 3 temel türe ayrılabilir;
Dolaşan AI (Roaming AI)
Davranışsal AI (Behavioral AI)
Satratejik AI (Strategic AI)
Bu 3 yapay zeka algoritması türünün, oyunlarda kullanılan yaklaşımları tümüyle kapsadığını düşünmeyin. Sadece anlaşılması ve kullanımı kolay, genel üç türü temsil ediyorlar.
Dolaşan AI
Dolaşan AI, oyun nesnelerinin hareketini modeller. Bu da oyun nesnelerinin sanal bir oyun dünyasında nasıl dolaşacaklarına karar vermesi anlamına gelir. Klasik arcade oyunu Galaga gibi sjoot-em-up uzay oyunları dolaşan AI’ye bir örnektir. Bu tür oyunlarda uzaylılar genelede oyuncunun peşinden giderler.
Temel olarak, bilgisayar kontrolündeki bir nesnenin, yolunu değiştirmek için bir karak vermesi gerektiğinde dolaşan AI kullanılır. Nesne, oyun içinde istenilen bir sonuca ulaşmak veya belirli bir hareket şeklini izlemek için yolunu değiştirebilir. Galaga örneğinde istenilen sonuç, oyuncunun gemisine çarpışmak ve ona zarar vermek için izlenecek yoldur.
Dolaşan AI’nin uygulanması oldukça kolaydır; başka bir nesnenin (oyuncunun gemisi) konumuna göre bir nesnenin (uzaylı) hızı veya konumu değiştirilir. Nesnenin gezinim hareketi, rastgele veya önceden belirkenmiş modellerden etkilenebilir. Üç farklı dolaşan AI türü vardır : Kovalama (chasing), kaçma (evading) ve şablonlu (patterned). Şimdi bu dolaşam AI türlerini daha detaylı inceleyelim.
Kovalama
Kovalama, bir oyun nesnesinin başka bir oyun nesnesi veya nesnelerini izleyip, onların arkasından gittiği türdür. Kovalama, bir uzaylının oyuncunun gemisini takip ettiği shoot-em-up oyunlarının çoğunda kullanılan bir yaklaşımdır. Oyuncunun gemisinin geçerli konumuna göre, uzaylının hızı veya konumu değiştirilerek uygulanır. Aşağıdaki örnek br uzaylı ve bir gemi içeren basit bir algoritmadır.
1
if (iXAlien && iXShip)
2
iXAlien--;
3
else if (iXAlien && iXShip)
4
iXAlien++;
5
if (iYAlien && iYShip)
6
iYAlien--;
7
else if (iYAlien && iYShip)
8
iXAlien++;
Gördüğünüz gibi uzaylının XY konumu (iXAlien ve iYAlien), geminin konumuna göre (iXShip ve iYShip) değiştiriliyor. Bu kodun tek potansiyel sorunu fazla iyi çalışıyor oluşudur. Uzaylı büyük bir azimle oyuncuya saldıracak ve ona kurtuluş şansı vermeyecektir. Bu kovalama algoritmasını düzeltmenin bir yolu eşitliğe biraz rastgelelik eklemek olabilir.
01
if ((rand() % 3) == 0) {
02
if (iXAlien && iXShip)
03
iXAlien--;
04
else if (iXAlien && iXShip)
05
iXAlien++;
06
}
07
08
if ((rand() % 3) == 0) {
09
if (iYAlien && iYShip)
10
iYAlien--;
11
else if (iYAlien && iYShip)
12
iXAlien++;
13
}
Bu kodda uzaylı 3′te 1 şansla oyuncuyu her yönde kovalar. Üçte bir şans fazla verimli görünmeyebilir ama unutmayın, uzaylı sadece oyuncuyu kovalamak için yolunu değiştirecektir. Akıllı bir oyuncu bunu farkedecek ve sıkça yönünü değiştirecektir.
Kaçma
Kaçma kovalamanın mantıksal tersidir. Bu türde, bir oyun nesnesi diğer nesne veya nesnelerden kaçmaya çalışır. Örnek;
1
if (iXAlien && iXShip)
2
iXAlien++;
3
else if (iXAlien && iXShip)
4
iXAlien--;
5
if (iYAlien && iYShip)
6
iYAlien++;
7
else if (iYAlien && iYShip)
8
iXAlien--;
Bu kodda temel olarak kovalama algoritmasının tersi kullanılır. Kovalamada olduğu gibi kaçmada da rastgelelik ile etki yumuşatılabilir. Bu klasik arcade oyunu Pac-Man’deki hayaletler için kullanılan koda benzer. Oyuncu güç hapı yuttuğu anda hayaletler ondan kaçmaya başlarlar.
Kaçma algoritmasının başka bir kullanımı da demolardır. Örneğin bir uzay oyununun demo kipini çalıştırdığınızda, bilgisayar kendi başına oynamaya başlar ve diğer nesnelerden kaçmaya başlar. Aslında normal bir oyuncuda uzaylılardan kaçmak için klavye tuşlarıyla kaçma algoritması kullanır.
Şablonlu Dolaşım
Şablonlu hareket, bir oyun nesnesi için önceden tanımlı bir hareketler kümesi kullanan dolaşan AI türüdür. Şablonlu harekete örnek olarak klasik Galaga oyunundaki uzaylılar verilebilir. Uzaylılar ekranda aşağı doğru inerlerken çeşitli akrobatik hareketler sergilerler. Şablonlar daireler, zigzaklar veya daha karmaşık hareketlerden meydana gelebilirler. Space Invaders oyunu şablonlu hareketlere daha basit bir örnektir; bir uzaylı sürüsü yavaşça ve düzenli olarak aşağı doğru iner.
Şablonlar genellikle şablonlu harekete ihtiyaç duyulduğunda bir nesneye uygulanan bir hız veya konum ötelemeleri (çarpanları) dizisinde depolanırlar:
1
int iZigZag[2][2] = { { 3, 2 }, { -3, 2 } };
2
iXAlien += iZigZag[iPatternStep][0];
3
iYAlien += iZigZag[iPatternStep][1];
Bu kod, oldukça basit dikey bir zikzak şablonunun nasıl uygulandığını gösteriyor. Tamsayı dizisi iZigZag, uzaylıya uygulanacak XY öteleme çiftlerini içeriyor. iPatternStep değişkeni, şablondaki geçerli adımı temsil eden bir tamsayıdır. Bu şablon uygulandığında uzaylı, oyun döngüsü başına 2 piksel hızında dikey yönde hareket ediyor ve oyun döngüsü başına 3 piksel hızla yatay zikzaklar çiziyor.
Bir sonraki yazıda Davranışsal AI’yi masaya yatıracağız.