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