예제 #1
0
    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()
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 def get_explosions(self, multiplets):
     explosions = []
     for pos in multiplets.get_positions():
         self.tmap.set_tile(pos, '.')
         explosions.append(AnimatedTile(EXPLOSION, self.tmap.tile_factory, self.tmap.frame, pos))
     if len(explosions) == 0:
         return None
     explosions = MoveGroup(explosions)
     return explosions
예제 #5
0
 def get_dropped_bricks(self):
     moves = []
     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) != '.':
                 moves.append(MapMove(self.tmap, pos_above, DOWN, speed=4))
             pos = pos_above
     return MoveGroup(moves)
예제 #6
0
 def wait_for_move(self, move=None, draw_func=None, delay=0.01):
     if type(move) is list:
         move = MoveGroup(move)
     while not move.finished:
         move.move()
         if draw_func:
             self.screen.clear()
             draw_func()
         move.draw()
         pygame.display.update()
         time.sleep(delay)