Mercurial > rinkhals
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 |