Class: Berlin::Fake::State
- Inherits:
-
Object
- Object
- Berlin::Fake::State
- Defined in:
- lib/ai/fake.rb
Instance Method Summary collapse
- #apply_moves(moves) ⇒ Object
- #as_json ⇒ Object
-
#initialize(from_json) ⇒ State
constructor
A new instance of State.
- #inspect ⇒ Object
- #remove_soldiers(move) ⇒ Object
- #spawn(node_ids) ⇒ Object
- #winner? ⇒ Boolean
Constructor Details
Instance Method Details
#apply_moves(moves) ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/ai/fake.rb', line 168 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 ⇒ Object
197 198 199 200 201 202 203 204 205 |
# File 'lib/ai/fake.rb', line 197 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 ⇒ Object
207 208 209 |
# File 'lib/ai/fake.rb', line 207 def inspect as_json end |
#remove_soldiers(move) ⇒ Object
181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/ai/fake.rb', line 181 def remove_soldiers(move) origin = @state[move.from] if origin.player_id != move.player_id errors << "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 errors << "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) ⇒ Object
193 194 195 |
# File 'lib/ai/fake.rb', line 193 def spawn(node_ids) node_ids.each { |id| @state[id].number_of_soldiers += 1 if @state[id].player_id } end |
#winner? ⇒ Boolean
211 212 213 |
# File 'lib/ai/fake.rb', line 211 def winner? @state.map{ |node_id, node_state| node_state.player_id }.compact.length == 1 end |