@@ -110,36 +110,27 @@ def score
110110 def step! ( direction )
111111 dir = map_direction ( direction )
112112 player = @entities . find { |e | e . type == :player }
113- move! ( player , dir )
113+ move! ( player , dir ) if can_move? ( player , dir )
114114 end
115115
116- # Move,
117- def move! ( entity , dir )
118- # puts "Moving #{entity.type} #{entity.x},#{entity.y} #{dir.inspect}"
116+ def can_move? ( entity , dir )
117+ move! ( entity , dir , true )
118+ end
119119
120+ def move! ( entity , dir , test = false )
120121 # Get list of target coords to check
121122 targets = entity . targets ( dir )
122-
123- # puts targets.inspect
124-
125123 entities = find_entities_at ( targets )
126124
127- # puts entities.inspect
128-
129125 # Can't move if we're hitting a wall
130- return false if entities . any? { |e | e . type == :wall }
131-
132- # Free space
133- # REMOVE: entities.all? { |e| e.move!(dir)} will return true for an
134- # empty array as well.
135- # if entities.none?
136- # entity.move!(dir)
137- # return true
138- # end
126+ return false if entities . any? { |e | e . type == :wall }
139127
140128 # Now free space, not a wall, so it must be one or two crates
141- if entities . all? { |e | move! ( e , dir ) }
142- entity . move! ( dir )
129+ if entities . all? { |e | can_move? ( e , dir ) }
130+ if !test
131+ entities . each { |e | move! ( e , dir ) }
132+ entity . move! ( dir )
133+ end
143134 return true
144135 end
145136
0 commit comments