HTML5 Tabanlı Oyunlar için Yapay Zekâ Kütüphanesi: DignityAI – 4

0
216
dignity
dignity

 

 

GELİŞTİRİLEN KÜTÜPHANE: DignityAI Genel Sınıf Yapısı

Geliştirilen kütüphaneye ait sınıf diyagramı Figür 1’de verilmiştir. DignityAI genel sınıf yapısına bakıldığında en üstte DignityObject yer almaktadır. Tüm diğer sınıflar temelde bu sınıftan türetilmiştir. Sınıflar hakkında kısaca bilgi verilecek olursa, genel anlamda tüm sınıfların nasıl bir işlevsellikleri olduğu ve ne için kullanıldıkları da görülmüş olacaktır.

DignityPath

DignityPath sınıfı temel yo n bulma fonksiyonlarını ele alan bir sınıftır. O zellikle tasarlanırken hem 2 boyutlu hem de 3 boyutlu oyunlar için yön bulma fonksiyonlarını kapsayacak şekilde tasarlanmıştır.

Her bir DignityAIBase tipinden tu retilmiş nesnede bir paths isminde DignityPath dizisi bulunur. Bu, yapay zekalı karakterin go revleri ile bag lantılı olarak izleyeceg i yolları belirlemektedir. Go revler içerisinde birden fazla yol tanımlanabilmektedir. DignityPath sınıfının DignityAIBase içerisinde tanımlanması ise, DignityMission u zerinde herhangi bir go rev u zerinden o nceki yollara ulaşılabilmesini sag lamaktadır. Bu sayede herhangi bir go rev, tu m yol listesine ulaşarak daha esnek bir yapıya do nu şmektedir.

Yapı bu şekilde esnek tasarlanarak geliştirilmiştir. DignityPath sınıfı içerisinde verilen yol için başlangıç ve bitiş konumları ile birlikte o başlangıç ve bitiş konumlarına ilerlerken gidilecek olan dig er alt yollar da tanımlanabilmektedir. Ayrıca, verilen yolun sondan başa tekrar edip etmeyeceg ini ve rastgele bir konum u zerinde ilerleyip ilerlemeyeceg i yine aynı sınıf u zerinden belirlenebilmektedir.

Bu sınıf ile tanımlanan ifadeler aslında DignityAIBase sınıfı ve bu sınıftan tu retilmiş sınıflar için bir move() metodu tarafından kullanılmaktadır. Bu metot yapay zekalı nesnenin u zerindeki yolları okuyarak go rev tanımlamasında belirtilen go revdeki yolu izlemek için nesnenin harekete geçmesini sag lamaktadır. Temelde bitiş noktasının belirlenmesi ve doldurulması zorunludur, sonuçta bitiş noktasına dog ru nesne hareket ettirilmektedir. Ancak, nesnenin gideceg i yolu hesaplaması ve yoldaki engellere go re kendine bir rota çizmesi işleminde bazı temel algoritmalar kullanılmaktadır. Bu algoritmalar içerisinde, A*, IDA*, MA*, Breadth-First-Search, Best-First-Search, Dijkstra, Jump Point Search gibi daha bir çok farklı arama algoritmaları bulunmaktadır. DignityAI, bu arama algoritmaları içerisinde en çok kullanılan ve en yaygın olan A* algoritması kullanmaktadır. Ancak dig er tu m algoritmalar ya da bu tu m algoritmaları içeren bir HTML5 ku tu phanesi olan Pathfinding.js gibi bir ku tu phane de kolaylıkla DignityAI içerisine entegre edilebilmektedir.

Figure 1: DignityAI Class Diagram 

DignityAction

DignityAction sınıfı aslında DignityAI ku tu phanesinin işlem ayag ıdır. Tu m aksiyonlar DignityAction içerisinde tanımlanır. DignityAction sınıfı içerisinde move(), sense(), destroy(), create(),upgrade() ve custom() ana fonksiyonları bulunmaktadır.

move() fonksiyonu sayesinde, DignityAIBase içerisinde tanımlanan pathList listesinin elemanının DignityPath sınıfının nesnesinde tanımlı olan yolu izlemesi sag lanmaktadır. Bu işlem için en kısa yolu bularak bir hareket oluşturulur. Burada temel durum, DignityAction sınıfında tanımlı moveObj o zellig ine verilen hareket ettirilecek olan nesnenin DignityAIBase içerisinde tanımlı move metodunu tetiklemesini sağlamaktır.

sense() fonksiyonu sayesinde, DignityAIBase içerisinde tanımlı düşman (enemyList) ve dost (friendList) listelerine go re algılama ve bu algılamalara göre yapılması gereken ana işlemler gerçekleştirilmektedir. Bu metot ayrıca, senseObj özelliğine verilen algılama yapılacak nesnenin DignityAIBase içerisinde tanımlı sense metodunu tetiklemesini sag lamaktadır.

destroy() fonksiyonu sayesinde, destroyObj özelliği ile tanımlanan DignityAIBase sınıfından ya da ondan tu retilmiş başka bir sınıftan hedef olarak go sterilen nesneye zarar verdirilmektedir. Bu zarar, DignityAIBase sınıfından tu retilmiş nesneler için life o zellig ini destroyLevel deg eri kadar du şu rmektedir.

create() fonksiyonu sayesinde, createObj o zellig i ile tanımlanan herhangi bir nesne sahnede oluşturulmaktadır. Ayrıca, yine DignityAction içerisinde tanımlanan createObjPos isimli o zellik ile nesnenin oluşturulacag ı pozisyon verilmiş olmaktadır.

upgrade() fonksiyonu, upgradeObj o zellig i ile tanımlanan nesnenin tu m deg erlerini yu kseltmek için kullanılmaktadır. Herhangi bir şekilde seviye yu kseltme, can artırma gibi işlemler bu fonksiyon sayesinde yapılmaktadır. Bunun için, upgradeObjPropName o zellig inde gu ncellenecek olan deg erin ismi String olarak verilmektedir. upgradeObjIncVal o zellig i ile nesnenin upgradeObjPropName ile belirtilen o zellig inin ne kadar artırılacag ı bilgisi verilir. Bu sayede, o deg erin u zerine verilen artırma deg eri eklenmektedir. Burada negatif bir deg er verilirse de o parametre deg eri du şu ru lmu ş olmaktadır. Ancak, herhangi bir şekilde deg işkene deg er artırma/azaltma şeklinde deg il de direk deg er ataması yapılmak istendig inde  upgradeObjIncVal o zellig i 0 (sıfır) verilerek upgradeObjNewVal o zellig ine deg işkenin yeni deg eri verilir. Bu sayede de direk bir nesnenin bir deg erine deg er ataması yapılabilmektedir.

custom() fonksiyonu temelde DignityAction sınıfı içerisinde tanımlı olmayan tu m nesnelerin istenilen fonksiyonlarını aksiyon olarak çalıştırmayı sag lamaktadır. Yani, o n tanımlı olarak verilen move, sense, destroy, create ve upgrade aksiyonlarının dışında bir aksiyon çalıştırmak istendig inde custom() fonksiyonu kullanılır. Bu fonksiyon customActionObj ile verilen nesnenin customActionObjName ile verilen metodunu aksiyon olarak çag ırmaktadır. 

DignityMission

DignityMission sınıfı, DignityAI u zerindeki go rev yo netimini sag layan ve her bir yapay zekalı karaktere go rev ataması yapılabilen bir sınıftır. Basit olarak listeler halinde go revlerin tanımlanabildig i, go revler için aksiyonların DignityAction tarafından tanımlanabildig i ve tanımlanan bu aksiyonları senkron ya da asenkron olarak çalıştırılabildig i bir yapı içermektedir.

DignityMission temelde bir description ve action tanımlamalarından oluşur. Description, go revin kullanıcılara go sterileceg i durumlar için tanımlanmıştır. Action tanımlaması ise, DignityAction sınıfı tu ru nden bir nesne ataması ile yapılmaktadır. Bunun için DignityMission sınıfı içerisinde actionStart, actionEnd ve actionTime o zellikleri tanımlanmıştır. Bu o zellikler sayesinde go rev tanımlaması içerisinde bir başlangıç aksiyonu, bitiş aksiyonu ve herhangi bir zamanda çalıştırılacak bir zamanlama aksiyonu tanımlanabilmektedir. Aksiyonların hangi metotlarının kullanılacag ına ise actionStartName, actionEndName ve actionTimeName isimli o zelliklerde belirtilen, DignityAction sınıfı metot isimleri (move, sense, create, destroy, upgrade ve custom) ile karar verilir. Ayrıca, async isimli o zellik sayesinde go revin asenkron mu yoksa senkron mu çalıştırılacag ı belirtilebilir. 

DignityMission içerisinde go revin bitmesinin kontrolu  finishTime deg işkeni ile sag lanır. finishTime deg işkeni 0 (sıfır) verildig inde go rev geçişi aksiyonlar tarafından sag lanacak anlamına gelmektedir. Eg er bu deg işkene herhangi bir deg er girilirse saniye cinsinden go revin bir yaşama su reci olmaktadır. Bu su re sonunda actionEnd aksiyonu işletilir ve bir sonraki go reve geçilir. Go rev geçişlerinin bir dig er parametresi ise async deg işkenidir. Bu boolean deg işken sayesinde, go revin asenkron veya senkron olması durumu belirlenir. Asenkron olan tu m go revler aynı anda çalıştırılır. Ancak, ilk go rev senkron ve ikinci, u çu ncu  go revler asenkron ise ilk go rev çalıştırılır, bu go rev bittikten sonra ikinci ve u çu ncu  go revler aynı anda çalıştırılır.

DignityAIBase 

DignityAIBase sınıfı yapay zekalı nesnelerin temel sınıfıdır. Tüm yapay zekalı karakterler bu sınıftan türetilmiş karakterlerdir. DignityStructure, DigntiyHuman, DignityVehicle ve DignityAnimal gibi sınıflar DignityAIBase üzerine özelleştirilmiş ve bu sınıftan türetilmiş yapay zekalı karakterler için kullanılacak sınıflardır. Ayrıca, istenildiği kadar DignityAIBase sınıfından türetilmiş nesne eklenerek özelleştirmeler yapılabilmektedir.

Bundan önceki tüm sınıflar DignityAI temel mekaniklerini ilerletmek ve DignityAIBase sınıfı içerisinde kullanılacak temel özellikleri geliştirmek için kullanılmış olan sınıflardır. Bu sınıfların temel kullanım alanı DignityAIBase ve ondan türetilmiş sınıflardır.

DignityAIBase sınıfı içerisinde, speed, life, value ve level isminde özellikler tanımlanmıştır. Bu özellikler tüm yapay zekalı nesnelerde olan ortak özelliklerdendir. Bunların yanında yapay zekalı nesnelerde mutlaka bir görev listesi (missionList) olmalıdır. Bu görev listesi sırayla (asenkron olanlar aynı anda) çalışmaya başlayarak tanımlanan görev listesini çalıştırmaktadır. Herhangi bir şekilde senkron bir göreve gelindiğinde ise, diğer asenkron görevler çalıştırılmadan senkron görevin bitmesi beklenir.

Ayrıca friendList, enemyList, obstacleList ve collectableList isminde özellikler de bulunmaktadır. Bu özellikler sayesinde DignityAction sınıfının ana metotlarından olan sense() metodu içerisindeki algılama işlemlerinin yapılması sağlanmaktadır. sense() fonksiyonu bu listelere bakarak kullanıcının belirlenen algılama işlemlerini gerçekleştirmekte ve sonuç olarak algılama işlemi sonucunda detectedFriend(), detectedEnemy(), detectedCollectable() ve detectedObstacle() metotlarını çağırılmaktadır. Bunun yanında,  ignoreList özelliği ile algılanması istenmeyen nesneler belirlenebilir. Herhangi bir şekilde ignoreList içerisinde olan nesne algılama işlemine tabi tutulmaz.

Yine DignityAIBase sınıfında bulunan pathList dizisi, DignityPath türünde nesneleri tutarak görevler içerisinde bu yolların kullanılmasını sağlamaktadır. Bu yapay zekalı karaktere eklenmiş herhangi bir yol listesi yoksa, sistem üzerinden yeni eklenen bir konuma hareket ettirilmemesini sağlamaktadır. Bu sayede, tüm diğer sınıflar üzerinden tek bir kaynağa erişim sağlanır.

DignityAIBase içerisinde mevcut görevi herhangi bir anda çalıştırmak için executeMission() metodu tanımlanmıştır. Ayrıca görevler arasında gezinme işlemi için nextMission() ve prevMission() metotları tanımlanmıştır. Aynı şekilde move() metodu içerisinde kullanılmak üzere, pathList özelliğinde gezinme işlemleri için ise nextPath() ve prevPath() metotları bulunmaktadır.

Yapay zekalı nesnelerin hareket ettirilmesi konusunda DignityPath sınıfını kullanan ve nesnenin mevcut gideceği yol içerisindeki koordinat noktalarına hareketinin düzenlenmesini sağlamak için DignityAIBase içerisinde move() metodu bulunmaktadır. Bu metot hesaplanan en kısa yol verisinin içerisindeki tüm noktalarda sırasıyla nesnenin hareket ettirilmesini ve hareket işlemi sona erdiğinde (en son noktaya ulaştığında) aksiyonun sona erdirilmesini veya varsa bir sonraki noktaya ilerlenmesini sağlamaktadır.

Yapay zekalı nesnelerin algılama işlemleri için ise sense() metodu tanımlanmıştır. Bu metot içerisinde klasik Ray Cast metodu kullanılarak temelde nesnenin bulunduğu pozisyondan tarama alanındaki pozisyonlara ışınlar gönderilmektedir. Işın gönderme işlemi için cast() metodu tanımlanmıştır. Bu ışına çarpan (bu çarpma işlemini nesnenin algılayabilmesi için nesnenin collision component’ine ihtiyacı vardır) nesneler sonuç olarak findHit() metodu içerisine düşmektedirler. Bu metot içerisinde ise, bulunan nesnenin ignoreList içerisinde olmayıp friendList, enemyList, obstacleList, collectableList listelerinin hangisinin içerisinde olduğuna bakılarak o listenin algılama metodu tetiklenir. Eğer bulunan metot ignoreList içerisinde ise diğer listelere bakılmaz.

Ayrıca DignityAIBase sınıfından türetilmiş diğer nesnelerin algılama durumlarını farklı şekilde yorumlayabilmeleri için, yukarıdaki listelerin herhangi birine girmeyen bir nesne algılandığında, bu nesnelere de ulaşılabilmesini ve algılama noktasında esnek bir yapı kurulabilmesi açısından detectedOther() metodu tanımlanmıştır. Bu metot, algılanan nesne ignoreList içerisinde değilse ve diğer listeler içerisine de girmiyorsa çağırılmaktadır. Bu metodu kendi içerisinde override eden DignityAIBase sınıfından türetilmiş nesneler için istenilen özelleştirme yapılabilir. 

Son olarak tanımlanan metot ise shoot() metodudur. Algılama sonucuna göre istenilen nesnelere ateş edilebilir. Burada ateş edilecek nesne (kurşun, top, bomba, ok vb.) bullets.js isimli dosyada saklanmaktadır. Her nesneye göre farklı silahlar belirlenebilmektedir.  

DignityStructure

DignityAIBase sınıfından tu retilmiş ve bina, yapı gibi sabit nesnelere yapay zeka o zellikleri katmak için tasarlanmıştır. Bu sınıf sayesinde bir yapıya yine go rev ve aksiyon verilebilmektedir. Normalde bir bina, yapı gibi sabit nesneler hareket etmezler, ancak burada yine de move() aksiyonu kullanılarak bu yapılar harekete ettirilme o zellig i eklenebilmektedir.

DignityStructure içerisinde bazı o zelleştirilmiş o zellikler bulunmaktadır. Bu o zelliklerin ilki, yapının yıkılabilir, yok edilebilir olduğunu belirlemektedir. I kinci bir o zellik ise, yapının kapasitesidir. Bu kapasite içerisinde barındırabileceg i, saklayabileceg i nesne kapasitesini belirtir. Bu kapasite istenirse DignityAIBase sınıfındaki level o zellig i ile çarpılarak artırılabilir. Yapılar için en o nemli o zellik ise belirli bir su re içerisinde bir çıktı u retebilen mekanizmaya sahip olmalarıdır. Bu sayede belli su relerde belirlenen nesneleri u reterek, istendig inde çıktıları da saklayabilirler.

DignityVehicle

Yapay zekalı bir araç modeli oluşturmak için geliştirilmiştir. Bu sınıf içerisinde DignityAction sınıfının move aksiyonunu kullanan ancak sınıfa özgü hareket durumlarını yöneten bir drive() fonksiyonu bulunmaktadır. Bu metot sayesinde, aracın motor durumu ile sürüş hızı verileri hesaplanarak hızı bulunmaktadır. Aracın motor durumu kötüye gittiğinde hızı da otomatik düşürülür. Araç herhangi bir şekilde başka araçla çarpıştığında engineLife özelliği çarpışma şiddeti kadar düşürülür ve buna göre hız tekrar hesaplanır. Bu çarpışma durumunu crashVehicle() metodu kontrol etmektedir. Herhangi bir onarım kiti gibi bir nesne aldığında engineLife değerinin iyileştirilmesi için repairEngine() metodu bulunmaktadır. Son olarak ise istenildiğinde aracı durdurmak için bir stopEngine()metodu bulunmaktadır.

DignityHuman

Yapay zekalı bir insan modeli oluşturmak için tanımlanmıştır. Ek olarak düşmanı algılama hızı, savaşçı karakterler için saklanma yeri arama ve bu yere doğru ilerleme özelliği, düşmanlardan korkma seviyesi gibi özellikler barındırmaktadır

DignityAnimal

Tıpkı DignityHuman gibi tasarlanmış ve hayvansal özelliklere göre özelleştirilmiş olan ve yapay zekalı hayvan nesneleri oluşturulabilen bir sınıftır. DignityAnimal sınıfında ekstra olarak hayvan türleri, insanları avlayıp avlamayacağı, kendi türlerini avlayıp avlamayacağı ve topluluk halinde yaşayıp yaşamadıkları bilgileri de sınıf içerisinde bulunmaktadır. Bu bilgiler ışığında insanları algılaması ve avlaması, kendi türlerini algılaması ve avlaması ve yine kendi türlerini algılayarak yanlarına gitmesi durumları kurgulanmıştır.

DignityAI Sınıfını Kullanarak Geliştirilmiş Örnek Bir Oyun

DignityAI kullanan o rnek bir oyun programlanırken go rsel olarak çok hazır ve produ ksiyona yo nelik bir sunumdan ziyade, DignityAI’ın temel mekaniklerini, DignityAIBase ve bundan tu retilmiş ve o zelleştirilmiş DignityHuman, DignityAnimal, DignityStructure ve DignityVehicle sınıfları kullanılarak basit bir harita u zerinde girilen go revleri yerine getiren ve gerekli aksiyonları istenilen şekilde işleten bir yapı ortaya çıkarılmıştır. Ayrıca, o rnek oyun geliştirilmesi sırasında DignityAI yapay zeka ku tu phanesinin sınırları ve geliştirilebilecek olan ekstra o zellikleri ele alınarak bir sonraki çalışmalarda eklenmek u zere belirlenmiştir.

Geliştirilecek olan oyun temel olarak her açılışta rastgele oluşturulan 48×48 bir grid harita u zerinde yol ve engelleri tanımlamalıdır. Daha sonra basit bir tank modeli DignityVehicle sınıfı ile yo netilmekte ve yol bulma, algılama, go rev yo netimi, aksiyon yo netimi gibi tu m o zellikler ele alınmaktadır. Bunun yanında harita u zerine rastgele konumlara toplanabilen nesneler yerleştiren RandomModelCreator isminde bir DignityStructure nesnesi bulunmaktadır. Son olarak ise Kırmızı ve Mavi takım u reticisi olmak u zere yine DignityStructure nesnesi olan  RedCreator ve BlueCreator nesneleri bulunmaktadır. Bu nesneler belirli periyotlarla sahnede tank oluşturmakta ve bunlara rastgele harita u zerinde koordinatlar atayarak tankların belirlenen yolu izlemelerini ve bu esnada algıladıkları düşman ve toplanabilir nesnelere karşı farklı aksiyonlar sergilemelerini sağlamaktadır.

Figure 2. Created random map
Figür 2. Created random map

Figür 2’de görüldüğü  gibi harita sayfa her yenilendiğinde rastgele bir şekilde oluşturulacaktır. Harita oluşturulduktan sonra haritanın rastgele konumlarına toplanabilen nesneler oluşturmak için RandomModelCreator ismindeki nesneyi oluşturup ilk aksiyon ve görev tanımları yapılır. Bunun için aşağıdaki metotlar kullanılmaktadır.

Figür 3. Models randomly created on the map
Figür 3. Models randomly created on the map

addRandomModelCreator() metodu sayesinde ilk olarak bir DignityAction nesnesi tanımlanmıştır. Bu nesnenin customActionObj ve customActionName o zelliklerine yine aynı script içerisinde yer alan createRandomModel() metodu tanımlanmıştır. Aksiyon tanımlamasından sonra, bu aksiyonun nasıl çalıştırılacag ını yo neten bir DignityMission nesnesi oluşturulur. Bu nesne asenkron çalışan, su rekli devam eden zamanlı bir go rev içerir. Her 10 saniyede bir DignityAction nesnesinin custom() metodunu çag ırır. Bu metot da yukarıda verilen DignityAction tanımlamasındaki ilgili metodu çag ırır ve model rastgele bir noktada oluşturulmuş olur. Figür 3’de harita üzerinde rastgele oluşturulan modeller bulunmaktadır.

Bununla birlikte harita üzerine her 10 saniyede bir rastgele 4 modelden birisi eklenecektir. Harita üzerinde bu rastgele oluşumları da bitirdikten sonra kırmızı ve mavi takım için birer tank oluşturmaya ve yapay zekalı nesnelerle işlevlerini tanımlamaya devam edilir. Kırmızı takım için bir tank oluşturma işlemi aşağıdaki gibidir.

Figür 4. Read and blue tank models
Figür 4. Read and blue tank models

Yukarıdaki işlem bloğuna bakıldığında, öncelikli olarak yine bir DignityAction, DignityMission tanımlamasının yapıldığı addRedTankCreator() ve addBlueTankCreator() metodları görülmektedir. Burada, yine bir customAction tanımlaması yapılmış, DignityMission nesnesi ile de 10 sn. sonra çalıştırılacak ancak tekrar etmeyecek bir görev tanımlaması yapılmıştır. Açılışta 10 sn. bekledikten sonra createRedTankModel() metodu çağırılır ve yapay zekalı tank karakteri Figür 4’deki gibi sahneye eklenir.

createRedTankModel() metoduna bakıldığında öncelikle tank modeli klonlama işlemi yapılır. Tank modeli için de collision bileşeni tanımlanmıştır. Daha sonra, tankın izleyeceği yol için DignityPath nesnesi oluşturulur. Bu nesne, oluşturulan harita ile ilişkilendirilerek movementPath özelliği findPath() metodu yardımıyla oluşturulur.

Tank modeline yapay zeka özellikleri verebilmek için, DignityVehicle sınıfı kullanılmıştır. Bu sınıf yardımıyla Tank’ın düşman (enemyList) ve dost (friendList) listeleri tanımlanır. Burada, bir de duvarları algılamaması için ignoreList içerisine duvar modeli eklenmiştir. Daha sonra pathList değerine de daha önce oluşturulan DignityPath nesnesi verilir. Burada, parentObject ve appContext özellikleri oyun motorunun kaynaklarına erişmek için kullanılan özelliklerdir.

Oyun motoru içerisinde oluşturulan ve yapay zeka özelliği olmayan tank modeli klonlandıktan sonra, bu nesne içerisindeki ai özelliği sayesinde, oluşturulan DignityVehicle nesnesi oyun motoru fonksiyonlarını kullanabilmektedir.

Tank için iki aksiyon ve iki görev tanımlaması yapılmıştır. Bunlardan ilki move aksiyonudur. Bu aksiyon başlangıçta, asenkron olarak çalışacak şekilde ayarlanmıştır. İkinci aksiyon ise, algılama aksiyonudur. Burada, bir de senseRadius verilerek 10 birimlik bir alanda tankın tarama yapması sağlanmıştır. Tüm bu görevler DignityVehicle nesnesinin missionList özelliğine eklenerek, DignityVehicle nesnesinin start() metodu çağırılmıştır. Bu metot görevleri çalıştırarak yapay zekanın devreye girmesini sağlar.

Figür 5. Tank detects and shoot
Figür 5. Tank detects and shoot

Tüm bu işlemlerin ardından, iki farklı takımdan iki tank modeli rastgele olarak verilen yollarda ilerlerken tanımlanan düşmanları algılayıp, Şekil 5’deki gibi shoot() metodu ile bu hedeflere ateş etmektedirler.

SONUÇ VE ÖNERİLER

Geliştirilen yapay zeka kütüphanesi, temelde HTML5 oyun motorlarında kullanılabilecek bir nesne yönelimli yapıya sahip olmakla birlikte, görev yönetimi, aksiyon yönetimi ve yol bulma işlevleriyle birlikte HTML5 tabanlı bir yapay zeka kütüphanesinde gerekli öğeleri içerisinde barındırmaktadır.

DignityMission sınıfı, esnek bir yapıyla birlikte görev yönetimi, görevler arasındaki geçiler ve görevlerin işletilmesini sorunsuz bir şekilde gerçekleştirmektedir.

DignityAction sınıfı, move(), sense(), create(), destroy() ve upgrade() metotlarıyla temel aksiyonları yönetebilirken custom() metodu sayesinde özelleştirilebilir ve bu 5 temel aksiyonunun dışında tanımlanabilecek aksiyonlara destek vererek sistemin esnek çalışmasını sağlamaktadır. 

DignityPath sınıfı,  A* algoritması ve üç temel uzaklık hesaplama yöntemi olan Manhattan, Diagonal ve Euclidean metotları ile özellikle küçük ve orta ölçekli haritalarda mevcut yöntemler içerisinde en basit ve en tutarlı çalışanıdır. Ancak DignityPath sınıfı hem diğer algoritmaların hem de farklı hesaplama metotlarının eklenmesiyle daha da güçlü hale gelebilecektir.

DignityAIBase sınıfı, temel yapay zeka fonksiyonları yönettiği gibi özelleştirilmiş sınıfların da temel sınıfı olma özelliği taşımaktadır. Bu yönüyle sistemin omurgasında yer alır. DignityAIBase’den türetilen DignityVehicle, DignityHuman, DignityAnimal ve DignityStructure sınıfları ise kendi içlerinde özelleştirildikçe daha da güçlü ve kapsayıcı bir hal alacaktır.

Ayrıca DignityAI’ın açık kaynak kodlu olması ve diğer popüler oyun motorlarına da uyarlanmasıyla birlikte gelişimi daha da hızlı devam edecektir. HTML5 tabanlı oyunlar içerisinde durum yönetiminden, yol bulmaya, görev yönetiminden aksiyon yönetimine tüm işlevleri yerine getirebilen tam bir yapay zeka kütüphanesi olarak literatürdeki yerini alacaktır.

Bu bağlamda öncelikli olarak PlayCanvas oyun motoru üzerinde geliştirme yapılmıştır. PlayCanvas oyun motorunun seçilmesindeki en önemli sebep ise oyun geliştirmeye başlama sürecinin çok kısa olması ve oyun motorunun altyapısını gerçekten çok güçlü yapısıdır. Ayrıca PlayCanvas’ın online editörü yardımıyla 3 boyutlu bir oyun tasarımı ve sahne tasarımı kolaylıkla gerçekleştirilebilmektedir. Tüm bunların da yanında PlayCanvas içerisinde hazır oyun modelleri ve açık kaynaklı oyunlar bulunmaktadır. Bu açık kaynaklı oyunlar istenildiği gibi ana projeden çatallanarak (fork) geliştirilmeye kendi tarafında devam edilebilmektedir. Bu sayede oyun motorunun ve oyunun bileşenleri ile uğraşmak yerine DignityAI’ın kendi iç dinamiklerine ve güçlü yapısına vakit ayırılmıştır.

DignityAI’ın bundan sonraki sürecinde hedeflenen tüm yapay zeka dinamiklerine ve HTML5 oyun motorlarına uyarlanmış, HTML5’in de sınırlarını aşarak hatta HTML5’in de gelişimine katkıda bulunarak farklı dillerde daha global oyun motorları olan Unity, Unreal Engine ve CryEngine gibi oyun motorlarına uyarlanarak sistemin geliştirilmesidir. Bunun için DignityAI tamamen açık kaynak kodlu olarak Github sosyal kod paylaşım sitesi üzerinden yayınlanmıştır. Ayrıca DignityAI ile hazırlanan örnek uygulama da yine Github üzerinden paylaşılmıştır.

DignityAI’ın bir üst modeli ise kendi kendine düşünebilen, kendi görevlerini kendi ekleyerek kendi aksiyonlarını seçebilen ve öğrenebilen bir model olması öngörülmektedir.

Orjinal Türkçe: HTML5 Tabanlı Oyunlar için Yapay Zekâ Kütüphanesi – DignityAI TR
Orjinal İngilizce: HTML5 Tabanlı Oyunlar için Yapay Zekâ Kütüphanesi – DignityAI EN

@berkanuslu

Facebook Yorumları