Gamemakerda en önemli yanlarından biri düşman yapay zekasıdır.Düşman yapay zekası ne kadar iyi olursa oyunuz o kadar iyi olur.Gamemaker a yeni başlayanlar genelde düşmanı sabit tutar biz yakınlaşırsak üzerimize gelir.Buda çok bait oluyo.
Bende bu yüzden oyunda kendi başına gezen,arkasına geçince bizi görmeyen ve belirli görüş mesafesi olan bir düşman yaptım.Bunu inceleyerek oyunlarızda gelişmiş düşman yapay zekası yapmayla ilgili bir şeyler öğrenebilirsiniz.
İndir : http://ustaderslik.com/dosya/dusman%20yapay%20zeka.rar
Görüntüleri :
Düşman create event :
alarm[0]=30*3//oyunun en ba��nda biraz bekledikten sonra harekete ge�mesi i�in bir alarm yaratt�m.
rasgele=0//d��man�n rasgele spritelere d�n��mesi i�in ba�ta variable olu�turdum.
speed=0//ba�lang�� h�z�n� s�f�r yapt�n.
ac=false//kod aralarda kontrol sa�lamak i�in bir veriable olu�turdum.
dur=0//buda ayn� �ekilde kontrol i�in.
ates=false//burda ise ate� ettirmek i�in bir variable olu�turdum.
depth=-50
git=0
Düşman alarm 0 event :
rasgele=choose(1,2,3,4,5,6)//alarm s�f�r olu�tu�unda yaratt���m�z rasgele variablesine verdi�imiz de�erlerden birini verecek.
ac=true//bu veriableyi karekterin durup alar�m�n tekrar devreye girmesi i�in kulland�m b�ylelik karekterin spritesi belirli aral�klarla de�i�ecek.
Düşman alarm 1 event :
alarm[0]=30*4//bu alarm devreye girdi�inde 4 saniye sonra alarm 0 �al��t�rmak i�in neden b�yle yapt�m karekter biraz yerinde dursun diye.
speed=0//h�z�n� s�f�r yapt�m du�man biraz oldu�u yerde beklesin.
dur=0//bu veriable ile karekteri belirli bir mesafe y�r�t�p durmas�n� sa�lad�m.s�rekli alarm 1 devreye girecek bunun i�in burda tekrar s�f�rlad�m d�ng�n�n devam etmesi i�in.
Düşman step event :
if rasgele=1//burda alarm 0 da rasgele variablemize bir de�er atad�k e�er o say� istedi�im say� yani 1 ise iste�im spriteye d�n��t�rd�m .a�a��da 6 t�ya kadar olanlar ayn� �eyler.
{
sprite_index=sag
}
if rasgele=2
{
sprite_index=sag_as_cap
}
if rasgele=3
{
sprite_index=sag_yukari_cap
}
if rasgele=4
{
sprite_index=sol
}
if rasgele=5
{
sprite_index=sol_as_cap
}
if rasgele=6
{
sprite_index=sol_yukari_cap
}
if sprite_index=sag and ac=true//burda e�er istedi�im sprite olna sa�a tarafa bakan sprite ise ve kontrol� sa�lamak i�in yapt���m variable a��k ise istedi�im i�lemleri yapt�rd�m.
{
rasgele=0//burda objelerimizi rasgele spriteler d�n��t�ren variablemizi s�f�rlad�m d�ng�n�n devam� i�in.
dur+=1//belili bir mesafe gittikten sonra durmas� i�in yaratt���m variable yi art�rmaya ba�lad�m.
if dur>60//bir �stte art�rmaya ba�lad���m aiable 60 tan b�y�k oldu�unda
{
speed=2//h�z� 2
motion_set(0,3)//y�n� 0 yani sa� taraf oacak
}
if ac=true and dur>60 //burda ac variablemiz a��k ve dur veribalemiz 60 tan b�y�kse alarm 1 �al��t�rcam ama s�rekli �al��mamas� i�in kontrol veriablemizi kapatacam.
{
alarm[1]=30*3
ac=false
}
}
//altta 126 sat�ra kadar di�er y�nler i�in benzerini yapt�m.
if sprite_index=sag_as_cap and ac=true
{
rasgele=0
dur+=1
if dur>60 and dur>60
{
speed=2
motion_set(315,3)
}
if ac=true
{
alarm[1]=30*3
ac=false
}
}
if sprite_index=sag_yukari_cap and ac=true
{
rasgele=0
dur+=1
if dur>60
{
speed=2
motion_set(45,3)
}
if ac=true and dur>60
{
alarm[1]=30*3
ac=false
}
}
if sprite_index=sol and ac=true
{
rasgele=0
dur+=1
if dur>60
{
speed=2
motion_set(180,3)
}
if ac=true and dur>60
{
alarm[1]=30*3
ac=false
}
}
if sprite_index=sol_as_cap and ac=true
{
rasgele=0
dur+=1
if dur>60
{
speed=2
motion_set(225,3)
}
if ac=true and dur>60
{
alarm[1]=30*3
ac=false
}
}
if sprite_index=sol_yukari_cap and ac=true
{
rasgele=0
dur+=1
if dur>60
{
speed=2
motion_set(135,3)
}
if ac=true and dur>60
{
alarm[1]=30*3
ac=false
}
}
if place_meeting(x,y,sagg)//karekterimiz y�r�yo rasgele ama odadan ��kma ihtimali var bunun i�in blok objesi koydum dedimki e�er sa� tarafta bulunan blok objesiyle �arp���yosa.
{
rasgele=choose(4,5,6)//sol tarafa giden spritelerden birine d�n��s�n.
x-=30//ama dibinde d�n��memesi i�in karekteri biraz sola ald�m.
speed=0
}
//a�a��da 154 sat�ra kadar benzeri �eyler.
if place_meeting(x,y,asagii)
{
rasgele=choose(3,6)
y-=30
speed=0
}
if place_meeting(x,y,soll)
{
rasgele=choose(1,2,3)
x+=30
speed=0
}
if place_meeting(x,y,yukarii)
{
rasgele=choose(2,5)
y+=30
speed=0
}
if sprite_index=sag and karekter.x>dusman.x and distance_to_object(karekter)<160//�imdi d��man�n karekteri g�r�nce ate� etmesine geldik.dedimki e�er sa�a bakan sprite varsa ve e�er karekterin x benimkinden b�y�kse yani benim �n�mdeyse ve mesafemiz 250 pixselden azsa ate� etme �al��s�n.
{
ates=true
ac=false
}
//a�a��da 190 sat�ra kadar benzer �eyler.
if sprite_index=sag_as_cap and karekter.y>dusman.y and distance_to_object(karekter)<160
{
ates=true
ac=false
}
if sprite_index=sol_as_cap and karekter.y>dusman.y and distance_to_object(karekter)<160
{
ates=true
ac=false
}
if sprite_index=sag_yukari_cap and karekter.y<dusman.y and distance_to_object(karekter)<160
{
ates=true
ac=false
}
if sprite_index=sol_yukari_cap and karekter.y<dusman.y and distance_to_object(karekter)<160
{
ates=true
ac=false
}
if sprite_index=sol and karekter.x<dusman.x and distance_to_object(karekter)<160
{
ates=true
ac=false
}
if distance_to_object(karekter)>160//mesafemiz 250den b�y�k oldu�undan pe�imizden ay�r�lmas� i�in.
{
ates=false
ac=true
}
if ates=true//ate� etme variablesi aktif oldu�unda mermi objesini olu�turmas� i�in.
{
git+=1
if git>=15
{
instance_create(x,y,mermi)
git=0
}
}