class Berlin::Fake::State
Attributes
state[RW]
Public Class Methods
new(from_json)
click to toggle source
# File lib/ai/fake.rb, line 263 def initialize(from_json) @state = from_json.inject({}) do |h, node| h[node['node_id']] = NodeState.new(node['node_id'], node['player_id'], node['number_of_soldiers']) h end end
Public Instance Methods
apply_moves(moves)
click to toggle source
# File lib/ai/fake.rb, line 270 def apply_moves(moves) conflicts = {} errors = [] puts "[Moves]" moves.each do |move| conflict = (conflicts[move.to] ||= ConflictState.new(move.to)) remove_soldiers(move) conflict.add_soldiers(move.player_id, move.number_of_soldiers) end conflicts.each { |node_id, conflict| conflict.process(@state[node_id]) } end
as_json()
click to toggle source
# File lib/ai/fake.rb, line 299 def as_json @state.map do |node_id, node_state| { 'node_id' => node_state.node_id, 'player_id' => node_state.player_id, 'number_of_soldiers' => node_state.number_of_soldiers } end end
inspect()
click to toggle source
# File lib/ai/fake.rb, line 309 def inspect as_json end
remove_soldiers(move)
click to toggle source
# File lib/ai/fake.rb, line 283 def remove_soldiers(move) origin = @state[move.from] if origin.player_id != move.player_id puts "Trying to move #{move.number_of_soldiers} soldiers from ##{move.from}. Node ##{move.from} belongs to #{origin.player_id}" elsif origin.number_of_soldiers < move.number_of_soldiers puts "Trying to move #{move.number_of_soldiers} soldiers from ##{move.from}. Only #{origin.number_of_soldiers} soldiers available" else origin.number_of_soldiers -= move.number_of_soldiers puts "\t[#{move.player_id}] Moves #{move.number_of_soldiers} soldiers from ##{move.from} to ##{move.to}" end end
spawn(node_ids)
click to toggle source
# File lib/ai/fake.rb, line 295 def spawn(node_ids) node_ids.each { |id| @state[id].number_of_soldiers += 1 if @state[id].player_id } end
winner?()
click to toggle source
# File lib/ai/fake.rb, line 313 def winner? @state.map{ |node_id, node_state| node_state.player_id }.compact.length == 1 end