Class: Berlin::Fake::ConflictState

Inherits:
Struct
  • Object
show all
Defined in:
lib/ai/fake.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node_id) ⇒ ConflictState

Returns a new instance of ConflictState.



116
117
118
119
# File 'lib/ai/fake.rb', line 116

def initialize(node_id)
  super(node_id)
  self.soldiers_per_player = Hash.new(0)
end

Instance Attribute Details

#node_idObject

Returns the value of attribute node_id

Returns:

  • (Object)

    the current value of node_id



115
116
117
# File 'lib/ai/fake.rb', line 115

def node_id
  @node_id
end

#soldiers_per_playerObject

Returns the value of attribute soldiers_per_player

Returns:

  • (Object)

    the current value of soldiers_per_player



115
116
117
# File 'lib/ai/fake.rb', line 115

def soldiers_per_player
  @soldiers_per_player
end

Instance Method Details

#add_soldiers(player_id, number_of_soldiers) ⇒ Object



121
122
123
# File 'lib/ai/fake.rb', line 121

def add_soldiers(player_id, number_of_soldiers)
  self.soldiers_per_player[player_id] += number_of_soldiers
end

#process(node) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/ai/fake.rb', line 125

def process(node)
  add_soldiers(node.player_id, node.number_of_soldiers) if node.player_id

  puts "[Conflict] Resolving conflicts for ##{node.node_id}"

  losses = soldiers_per_player.values.sort.reverse[1] || 0

  soldiers_per_player.each do |player_id, number_of_soldiers|
    if number_of_soldiers < losses || number_of_soldiers == losses && node.player_id != player_id
      puts "\t[#{player_id}] loses #{number_of_soldiers} soldiers"
    else
      node.number_of_soldiers = number_of_soldiers - losses
      puts "\t[#{player_id}] wins the combat with #{number_of_soldiers - losses} soldiers left"
      node.player_id = player_id
    end
  end
end