Квази-интеллект2
Слегка погонял ботов и понял, что чего-то не хватает.
Подправим алгоритм поведения:
Если бот получил урон от выстрела он начинает двигаться в строну выстрела. Причём игрок, если выстрел
был совершён с дальнего расстояния, может успеть смениь локацию.
|
Function update_shot()
v#=0.1
max_dist#=1000
For a.shot=Each shot
;=
If a\time=0 a\time=MilliSecs()
new_time=MilliSecs()
delta_t=new_time-a\time
a\time=new_time
vs#=v*delta_t
;=
MoveEntity a\entity,0,0,vs#
a\dist#=a\dist#+vs#
bot_h=EntityCollided(a\entity,BOTT)
If a\dist#>max_dist#
FreeEntity a\entity
Delete a
ElseIf EntityCollided(a\entity,TERRT)<>0
FreeEntity a\entity
Delete a
ElseIf bot_h<>0
FreeEntity a\entity
Delete a
bhandle=EntityName(bot_h)
bc.bot=Object.bot(bhandle)
bc\Survivability=bc\Survivability-16
;=
PositionEntity bc\point,EntityX(user,1),EntityY(bc\point,1),EntityZ(user,1)
;=
If bc\Survivability<=0
Delete bc
FreeEntity bot_h
create_bot(EntityX(user)+Rnd(-100,100),2,EntityZ(user)+Rnd(-100,100))
EndIf
EndIf
Next
End Function
Как видите - дописали ВСЕГО одну строчку,
PositionEntity bc\point,EntityX(user,1),EntityY(bc\point,1),Entit yZ(user,1)
|
но какой эффект =)
И ещё кое-что: пусть бот становится красным, если он "навёлся" на игрока.
Function update_bot()
Rdist#=15
v#=0.01
For a.bot=Each bot
;=
If a\time=0 a\time=MilliSecs()
new_time=MilliSecs()
delta_t=new_time-a\time
a\time=new_time
;=
If EntityDistance(user,a\entity)<Rdist#
PointEntity a\entity,user
EntityColor a\entity,255,0,0
Else
EntityColor a\entity,255,255,255
If EntityDistance(a\entity,a\point)<2
PositionEntity
a\point,EntityX(a\point)+Rnd(-40,40),EntityY(a\point),EntityZ(a\point)+Rnd(-40,40)
EndIf
PointEntity a\entity,a\point
EndIf
;===========
MoveEntity a\entity,0,0,v#*delta_t
TranslateEntity user,0,-G#*delta_t,0
Next
End Function