+ self.reset_pos()
+ self.deadends = []
+ self.been = []
+
+ def move(self, level, player_pos):
+ if not self.on_board():
+ # Advance towards the map a step at a time
+ self.pos = (self.pos[0] + 1, self.pos[1])
+ if self.on_board():
+ self.pos = level.enter_pos
+ return False
+ # AI goes here
+ # First, if we're standing next to a gate, we attack it
+ neighbours = [(self.pos[0] + 1, self.pos[1]),
+ (self.pos[0] - 1, self.pos[1]),
+ (self.pos[0], self.pos[1] + 1),
+ (self.pos[0], self.pos[1] - 1)]
+ for cand in neighbours:
+ if level.is_gate(cand) and level.blocked(cand):
+ level.damage_gate(cand)
+ return True
+ steps = 0
+ self.been.append(self.pos)
+ for direction in [(1, 0), (-1, 0), (0, -1), (0, 1)]:
+ new_pos = (self.pos[0] + direction[0], self.pos[1] + direction[1])
+ if self.can_move(direction, level) and new_pos not in self.been:
+ self.pos = new_pos
+ self.been.append(new_pos)
+ steps += 1
+ break
+ if steps == 0:
+ self.been = []
+ return True
+
+ def reset_pos(self):
+ self.pos = (-10, 0)
+
+ def on_board(self):
+ return self.pos[0] >= 0