Mercurial > mhrok
changeset 28:68098f165f4b
Make all mobs move randomly
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 10 Mar 2012 10:15:03 +0100 |
| parents | d0ca7aad951c |
| children | 1dbbcefea978 |
| files | mhrok.py |
| diffstat | 1 files changed, 36 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/mhrok.py Sat Mar 10 10:02:00 2012 +0100 +++ b/mhrok.py Sat Mar 10 10:15:03 2012 +0100 @@ -75,20 +75,20 @@ self.frame = 0 self.rect.move_ip(4 + 20 * x, 12 * y) self.depth = self.rect.bottom + self.direction = None def update(self): self.frame = (self.frame + 1) % len(self.animation) self.image = self.frames[self.animation[self.frame]] - #if self.direction is not None: - # self.rect.move_ip((DX[self.direction]*5, DY[self.direction]*3)) - # self.depth = self.rect.bottom + if self.direction is not None: + self.rect.move_ip((DX[self.direction]*5, DY[self.direction]*3)) + self.depth = self.rect.bottom class Mob(object): Sprite = MobSprite def __init__(self, (x, y)): self.pos = x, y - self.direction = None def make_sprite(self, tiles): self.sprite = self.Sprite(tiles, self.pos, self.animation) @@ -96,7 +96,19 @@ return self.sprite, shadow, None def control(self, level): - self.direction = random.choice([None, 0, 1, 2, 3]) + direction = random.choice([None, 0, 1, 2, 3]) + if direction is not None: + x, y = self.pos + target = x + DX[direction], y + DY[direction] + for mob in level.mobs: + if mob.pos == target: + self.sprite.direction = None + return + if not level[target]: + direction = None + else: + self.pos = target + self.sprite.direction = direction class Bat(Mob): @@ -175,26 +187,28 @@ x, y = self.pos target = x + DX[direction], y + DY[direction] if not level[target]: - return + return False for mob in level.mobs: if mob.pos == target: - return + return False self.sprite.set_animation(self.sprite.walk_animation(direction)) self.pos = target + return True def control(self, level): keys = pygame.key.get_pressed() if keys[pg.K_UP]: - self.walk(level, 1) + return self.walk(level, 1) elif keys[pg.K_LEFT]: - self.walk(level, 0) + return self.walk(level, 0) elif keys[pg.K_DOWN]: - self.walk(level, 3) + return self.walk(level, 3) elif keys[pg.K_RIGHT]: - self.walk(level, 2) + return self.walk(level, 2) else: self.sprite.set_animation( self.sprite.stand_animation(self.direction)) + return False room = level.find_room(*self.pos) if room: @@ -204,6 +218,7 @@ self.vision.rooms.append(room) else: self.vision.radius = 40 + return True class SortedUpdates(pygame.sprite.RenderUpdates): @@ -436,8 +451,16 @@ event.key == pg.K_ESCAPE): self.game_over = True if self.pc.sprite.animation is None: - for mob in self.level.mobs: - mob.control(self.level) + if self.pc.control(self.level): + for mob in self.level.mobs: + if mob == self.pc: + continue + mob.control(self.level) + else: + for mob in self.level.mobs: + if mob == self.pc: + continue + mob.sprite.direction = None def load_tiles(filename, width, height):
