def move(self, direction): nearpos = self.player.pos + direction farpos = nearpos + direction near = self.tm.at(nearpos) far = self.tm.at(farpos) if near == '#': return if near in 'xX' and far in '#xX': return else: # move possible moves = MoveGroup() self.player.add_move(direction) moves.add(self.player) if near in 'xX': # crate moved floor = near=='x' and '.' or '*' insert = far=='*' and 'X' or 'x' moves.add(MapMove(self.tm, nearpos, direction, 1, floor_tile=floor, insert_tile=insert)) wait_for_move(moves, self.screen, self.draw, 0.01) self.tm.cache_map() self.draw() self.check_complete()
def get_explosions(self, multiplets): explosions = MoveGroup() for pos in multiplets.get_positions(): self.tmap.set_tile(pos, '.') explosions.add(AnimatedTile(EXPLOSION, self.tmap.tile_factory, self.tmap.frame, pos)) self.tmap.cache_map() if len(explosions.moves) == 0: return None return explosions
def get_dropped_bricks(self): drop_moves = MoveGroup() for x in range(self.tmap.size.x): pos = Vector(x, self.tmap.size.y - 1) while pos.y > 0: pos_above = pos + UP if self.tmap.at(pos) == '.' and self.tmap.at(pos_above) != '.': drop_moves.add(MapMove(self.tmap, pos_above, DOWN, speed=4)) pos = pos_above return drop_moves