2

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;

  1. DolaÅŸan AI (Roaming AI)
  2. Davranışsal AI (Behavioral AI)
  3. 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.

if (iXAlien && iXShip)
    iXAlien--;
else if (iXAlien && iXShip)
    iXAlien++;
if (iYAlien && iYShip)
    iYAlien--;
else if (iYAlien && iYShip)
    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.

if ((rand() % 3) == 0) {
    if (iXAlien && iXShip)
        iXAlien--;
    else if (iXAlien && iXShip)
        iXAlien++;
}

if ((rand() % 3) == 0) {
    if (iYAlien && iYShip)
       iYAlien--;
    else if (iYAlien && iYShip)
       iXAlien++;
}

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;

if (iXAlien && iXShip)
    iXAlien++;
else if (iXAlien && iXShip)
    iXAlien--;
if (iYAlien && iYShip)
    iYAlien++;
else if (iYAlien && iYShip)
    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:

int iZigZag[2][2] = { { 3, 2 }, { -3, 2 } };
iXAlien +=  iZigZag[iPatternStep][0];
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.

Bu yazı istenilen yerde istenilen şekilde yayınlanabilir (değişikliklerden yazının orjinalini yazan yazar kesinlikle sorumlu değildir). Sadece yazdığınız yazının altında veya üstünde orjinal yazıya link verirseniz sevinirim. Vermezsenizde sorun değil. İlginiz için teşekkürler.

Eğer girdiyi beğendiyseniz, başkalarıyla da paylaşın!
Tusul | Habberci | Haber.gen.tr | Oyyla | Bağcık | 100 Puan | Linkibol | Teknikim

2 Yorum

  1. Stays diyor ki:

    Güzel yazı, http://staysonline.blogcu.com/ adresine alıntılanmıştır. Teşekkürler

  2. Ahmet Sali diyor ki:

    yapay zeka her zaman ilgimi çeken bir konu olmuştur, anlatım için teşekürler.

Yorum Bırakın