Exemple #1
0
 def check_collision_tiles(self, coll_layer):
     tile_rects = util.neighbour_tiles(self.rect.center,
                                             coll_layer)
     collision = self.rect.collidelist(tile_rects)
     if(collision != -1):
         tile_rect = tile_rects[collision]
         if(self.direction == DOWN and
            self.rect.bottom > tile_rect.top):
             self.rect.bottom = tile_rect.top - 1
         elif(self.direction == RIGHT and
              self.rect.right > tile_rect.left):
             self.rect.right = tile_rect.left - 1
         elif(self.direction == LEFT and
              self.rect.left < tile_rect.right):
             self.rect.left = tile_rect.right + 1
         elif(self.direction == UP and
              self.rect.top < tile_rect.bottom):
             self.rect.top = tile_rect.bottom + 1
         self.collision_rect.center = self.rect.center
Exemple #2
0
    def update(self, deltat, screen, events):
        for event in events:
            down = event.type == pygame.KEYDOWN
            if event.key == pygame.K_RIGHT : 
                self.hero.xSpeed = down * 6
            elif event.key == pygame.K_LEFT : 
                self.hero.xSpeed = down * -6
            elif event.key == pygame.K_UP : 
                self.hero.ySpeed = down * -6
            elif event.key == pygame.K_DOWN : 
                self.hero.ySpeed = down * 6
            elif event.key == pygame.K_ESCAPE and down:
                return util.STATE_NewGame
            elif event.key == pygame.K_F1 and down : 
                self.debug = not(self.debug)

        enemies = self.enemies
        hero = self.hero
        # update enemies
        enemies_view = []
        for enemy in enemies:
            enemy.update(deltat)
            enemies_view.append(enemy.view)
            
        # update hero and camera
        hero.update(deltat, self.level.sprite_layers[2])
        self.update_camera()

        # draw the stuff
        for sprite_layer in self.level.sprite_layers:
            if sprite_layer.is_object_group:
                continue
            else:
                self.renderer.render_layer(screen, sprite_layer)

        # draw debug data to show collision boxes
        if self.debug:
            # calculate where on the camera it should be
            camera_left = self.renderer._cam_rect.left
            camera_top = self.renderer._cam_rect.top
            for enemy_view in enemies_view:
                view = enemy_view.copy()
                view.left -= camera_left
                view.top -= camera_top
                pygame.draw.rect(screen, (255, 0, 0), view, 1)
            hero_rect = hero.collision_rect.copy()
            hero_rect.left -= camera_left
            hero_rect.top -= camera_top
            pygame.draw.rect(screen, (0, 0, 255), hero_rect, 1)

        # haha, or not. you lost!
        collision = hero.collision_rect.collidelist(enemies_view)
        if collision != -1:
            camera_left = self.renderer._cam_rect.left
            camera_top = self.renderer._cam_rect.top
            view = enemies_view[collision].copy()
            view.left -= camera_left
            view.top -= camera_top
            pygame.draw.rect(screen, (255, 0, 0), view, 3)
            return util.STATE_GameOver

        # maybe you did it?
        tiles = util.neighbour_tiles(hero.rect.center,
                                     self.level.sprite_layers[3])
        if(hero.rect.collidelist(tiles) != -1):
            if self.next_level() == False:
                return util.STATE_GameComplete
        return util.STATE_InGame