comparison gamelib/animal.py @ 396:19e583e5cdc0

Refactor for further move work
author Neil Muller <drnlmuller@gmail.com>
date Thu, 12 Nov 2009 21:31:52 +0000
parents 2d0ff46118e2
children 532f1ea476ff
comparison
equal deleted inserted replaced
395:2d0ff46118e2 396:19e583e5cdc0
53 pass 53 pass
54 54
55 def move(self, state): 55 def move(self, state):
56 """Given the game state, return a new position for the object""" 56 """Given the game state, return a new position for the object"""
57 # Default is not to move 57 # Default is not to move
58 pass
59
60 def attack(self, gameboard):
61 """Given the game state, attack a suitable target"""
62 # Default is not to attack
58 pass 63 pass
59 64
60 def set_pos(self, tile_pos): 65 def set_pos(self, tile_pos):
61 """Move an animal to the given tile_pos.""" 66 """Move an animal to the given tile_pos."""
62 new_pos = Position(*tile_pos) 67 new_pos = Position(*tile_pos)
362 if not self.closest: 367 if not self.closest:
363 # No more chickens, so leave 368 # No more chickens, so leave
364 self.hunting = False 369 self.hunting = False
365 return self.pos 370 return self.pos
366 if self.closest.pos == self.pos: 371 if self.closest.pos == self.pos:
367 # Caught a chicken 372 # No need to move
368 self._catch_chicken(self.closest, gameboard)
369 return self.pos 373 return self.pos
370 if self.closest.pos.to_tile_tuple() == self.pos.to_tile_tuple(): 374 if self.closest.pos.to_tile_tuple() == self.pos.to_tile_tuple():
371 # Only differ in z, so next step is in z 375 # Only differ in z, so next step is in z
372 if self.closest.pos.z < self.pos.z: 376 if self.closest.pos.z < self.pos.z:
373 new_z = self.pos.z - 1 377 new_z = self.pos.z - 1
374 else: 378 else:
375 new_z = self.pos.z + 1 379 new_z = self.pos.z + 1
376 return Position(self.pos.x, self.pos.y, new_z) 380 return Position(self.pos.x, self.pos.y, new_z)
377 return self._find_best_path_step(self.closest.pos, gameboard) 381 return self._find_best_path_step(self.closest.pos, gameboard)
382
383 def attack(self, gameboard):
384 """Attack a chicken"""
385 if self.closest and self.closest.pos == self.pos:
386 self._catch_chicken(self.closest, gameboard)
378 387
379 def _catch_chicken(self, chicken, gameboard): 388 def _catch_chicken(self, chicken, gameboard):
380 """Catch a chicken""" 389 """Catch a chicken"""
381 chicken.damage(gameboard) 390 chicken.damage(gameboard)
382 self.closest = None 391 self.closest = None