Oyun Hazırlıyorum – 4
Yapay Zeka
Yapay zeka hafife alınmaması
gereken bir konudur. Yapay zeka kodunuz ne kadar karmaşık olursa, oyununuzdaki
karakterler o kadar gerçekçi, oyununuz da o kadar iyi olur. Diğer taraftan
daha basit bir kod oyununuzu daha basit ama daha az ilgi çekici yapar. Yapay
zeka genel anlamda çok karışık bir konudur, üniversitelerde master dersi
olarak okutulmaktadır.
Yapay zeka hemen hemen tüm oyunlar için önemlidir; pek azı
bunsuz da işini görebilmektedir. Bilgisayar oyunları anlatan dergilerindeki
yorumlarda oyunun yapay zekası üzerine de puanlamalar görürsünüz.
Peki Yapay Zeka nedir?
AI kısaca oyununuzdaki düşman
karakterlerini , Quake oyunlarında olduğu gibi gerçek bir insanla oynuyormuşçasına
daha akıllı, gerçekçi yapmaya yarayan program komutlarıdır. Bunun pek de
zor bir iş olmadığını düşünüyorsanız yanılıyorsunuz demektir. Bir kaç
dakika ayırın ve normal hayatta kendi yaptığınız hareketlere karar
verirken nasıl bir mantık izlediğinizi düşünün; sandığınızdan çok
daha fazla etken var.
Başlayalım
Önce bir büyükçe bir kağıtla
kalem alın, korkunç planlar yapacaksınız. Her karakter tipi için bir mantık
ağacı tasarlayın ve değişik durumlarda nasıl davranacağını belirleyin.
Örneğin bir first person shooter oyununu ele alalım:
Kötü adamımız oyuncunun arkasından
kovalıyor. Oyuncunun bir odada girdiğini görüyor.
– Adamımız içeri giriyor mu,
bekliyor mu?
İçeri giriyor, oda tamamen
karanlık.
– Adamımız endişeleniyor mu?
Savunmaya mı geçiyor, yoksa afallıyor mu? Arkadaşlarını çağırmaya
gidiyor mu? Işıkları bulabiliyor mu?
İçeri giriyor.
– Hangi silahı seçiyor? Geniş
alana etkili olanı mı (örn. el bombası) yoksa bir tabanca mı?
Aniden oyuncu saldırıyor.
– Adamımız kaçıyor mu, saldırıyor
mu?
Saldırıyor.
– Oyuncuyu görebiliyor mu?
Hayır, o zaman yer değiştiriyor.
Oyuncu adamımızın enerjisinin %90’ını götürüyor.
– Adamımız kaçıyor mu, saldırıyor
mu?
Kaçıyor.
Bu aşırı derecede kolay örnekte
6 seçim yaptık. 10’larca, ya da oyununuza göre 100’lerce, seçimi gözden geçirmeniz
gerekebilir. Kağıdınıza adamlarınızın hangi durumda nasıl davranacağını
yazın.
Biraz Matematik
En basit seviyede, olasılık
kullanacağız (daha sonra). Bir olasılık tablosu oluşturarak hangi ihtimal
daha fazla ona karar vereceğiz. Eğer her olasılık eşit olsaydı ve her şey
tek bir tabloda olsaydı, adamımızın başı dertteydi.
Saldır
= % 25
Kaç
= % 50
Yardım Çağır
= % 15
Afalla
= % 10
Bu basit tabloyu kullanarak adamımıza
rasgele hareketler yaptırabiliriz. Bu tablodan anlaşılacağı gibi adamımız
kaçmaya meyilli.
Diğer bir soru “yeni güncelleme
ne zaman yapılacak?”. Adamımız ne zaman içinde bulunduğu durumu
yeniden gözden geçirecek? Eğer oyuncuyu kovalıyorsa yer değiştirdiği her
an bunu yapmalıdır.
Örneğin ne zaman ateş açacağına
karar verme işini çok sık yapmamalıdır. Adamınız ne kadar çok karar
verirse o kadar değişken ve tutarsız davranışlar gösterir. Örneğin
saniyede 20 kere bir seçim yapıyorsa, bir saniyede adamınız bir adım atar
bir ateş eder, oraya buraya koşturur, gerçek dışı, çılgınca hareketler
yapar. Bunun için kurallar koymanız gereklidir. “Adam ne zaman kımıldayacak”,
“ne zaman ateş açacak” vb.
Daha İyisini Yapalım
Karakterimizin daha iyi olması için
varyasyonlara ihtiyacımız var. Bu, 4 şekilde karşımıza çıkıyor:
1) Konum
Bu kısaca, adamımızın bulunduğu
yere (oda, bölüm, konum) göre yapacağı hareketi belirlemesidir. Örneğin
vurulunması kolay bir yerden uzaklaşmak..
2) Kişilik
Örneğin Unreal Tournament
oyununda düşmanların karakterlerini ayarlayabilirsiniz. Basitçe, onları
saldırgan, dikkatli ya da mantıklı yapabilirsiniz. Siz de kendi oyununuzda
bunu uygulayabilirsiniz. Her kötü adam için özellikler içeren dosyalar açarsınız
ve oyundaki karakterlerin özellikleri buradan okunur. Eğer programınız güzel
yazılmışsa oyuncular bu dosyaların içeriğini değiştirerek oyunda karşılaşacakları
düşmanları yaratabilir. Bunu yapmanın kolay bir yolu “+” ve
“-” leri kullanarak dosya içeriğini değiştiren bir sistem
kullanmaktır.
Örneğin normalde %50 ihtimalle
adamınız kaçıyorsa, dosyadaki kaçma ihtimali bilgisini “-40” yapıldığında
adamınızın toplam kaçma olasılığı %10 düşer ve aşırı saldırgan bir
adamınız olur. Bunlar gerçi sonraki işler ama oyuncu için oyundaki
karakterlerin ayarlanması gibi detaylar önemli olabilir.
3) Zeka
Farklı zeka seviyeleri tespit
edebilirsiniz. Bunun için en altta en düşük zeka seviyeli, bol bol ateş açıp
oyuncunun peşinden koşan bir karakterin olduğu bir hiyerarşi ağacı
kullanabilirsiniz. Daha üstlerde daha zeki, saklanabilen; daha da üstte diğerleriyle
işbirliği yapabilen karakterler gibi.
4) Rasgelecilik
Belli bir rasgelecilik seviyesi
belirlemelisiniz. Aksi halde oyuncu karakterlerimizin nerde nasıl davrandığını
anlayabilir ve oyunu ona göre oynamaya başlayabilir. Örneğin karakterimiz ölmek
üzereyken, kaçmak yerine son bir saldırı yapabilir. Böyle bir sürpriz,
oyuncuyu hep tetikte olmaya sevk eder.
Bitirelim
Yapay zeka ayrıca NPC’ler (oyunda
bilgisayarın yönettiği fakat düşman olmayan karakter) için de önemlidir.
Bazı zamanlarda bu karakterler veya araçlar vb. için de yapay zeka kullanmak
isteyebilirsiniz.
Bu yalnızca başlangıç. Benim
burada yapmaya çalıştığım sizi doğru çizgide düşünmenizi sağlamak.
Yapay zeka burada okuduklarınızdan çok daha geniş bir konu. Bazıları
(bunlardan biri de bendim) yapay zeka programlamaktan çok korkarlar; belki bu
size biraz umut verir.
Yapay zeka programlamada kolay bir
yol izlemek istiyorsanız tarafımdan denenmiş kağıt kalem metodunu kullanın.
Her bir olay ve ona yanıt olabilecek hareketler için bir diagram çizin. En
temel ihtimaller için burada çalışmak isteyebilirsiniz. Bana güvenin, bütün
bunları önce kağıt üstünde yapmak, programlarken düşünmekten çok daha
kolaydır.
Jack Hoxley’in makalesinden çeviri.