Posts mit dem Label events werden angezeigt. Alle Posts anzeigen
Posts mit dem Label events werden angezeigt. Alle Posts anzeigen

Mittwoch, 18. Januar 2012

Extended Actions in Level Clone War

In my last post I described the new introduced action split. This time I want to continue and show you two other actions, that have been extended for the new level Clone War.

Let's start with the look_around action. In level Greenfields this action gives back a view with radius 1. In level Clone War you can now pass the radius as parameter. The view with radius 2 is shown on right.
As it is a circular view, the corners are missing. For those fields you will get back nil instead of a field.

The action costs are dependent of the view radius. A view with radius 2 will cost 5 action points. The one with radius 1 still costs 2 action points and with radius 0 you will get back your own position for 0.2 action points.

new_population = old_population.split(field)
population.look_around(0) # equal to look_at(0,0)  
population.look_around    # radius 1  
population.look_around(2) # radius 2  

You can also get a single field with look_at and pass the field you want to see as parameter. But you have to make sure this field is within radius 1.

new_population = old_population.split(field)
population.look_at(1,0)  
population.look_at(field)

Also the move_to action has some small changes. The action costs for vertical and horizontal direction remain 6 action points, while moving diagonally now costs 8.5 AP.

For more information see the documentation.

Samstag, 31. Juli 2010

Attacked Events

In Zero X some events are directly reported to the agents. They can read them, during their think method with next_event or iterate over them with each_event. The event will be removed as soon as it has been read.
event = next_event
event.class    # => AttackedEvent
event.attacker # => '003' agent code name
event.damage   # => 132
If an agent is attacked by another agent, the victim receives an attacked event. The event includes the code name of the attacker and the damage suffered.

Here an example with an iterator:
each_event do |event|
  if event.instance_of? AttackedEvent
    puts "attacked by #{event.attacker} and suffered #{event.damage}"
  end
end
In your tests you can fire the attacked event by using has_been_attacked_by. The method takes the codename of the attacker and an optional damage parameter.
it "should behave different if it has been attacked" do
  @agent.has_been_attacked_by '003'
  @agent.think
  ...
end
The new test methods are available with SDK Version 0.9.7.
Download the new SDK V0.9.7

See the documentation.