Ejemplo n.º 1
0
class Game:
    def __init__(self, frame, size):
        self.size = size
        # make a new camera based on the size of the frame, then create the frame and add a start button.
        self.camera = Camera((0, 0), self.size[0] // Unit.UNIT,
                             self.size[1] // Unit.UNIT, Unit.UNIT)
        self.player = Player(100, 100, Unit.UNIT, Unit.UNIT)
        self.keyboard = Keyboard()
        self.result = States.STATES[1]

        frame.set_keydown_handler(self.keyboard.key_down)
        frame.set_keyup_handler(self.keyboard.key_up)

        sound = Sound()
        self.tiles = Mapper.get_start_tiles(self.camera)
        sound.play_death()

    def game_draw(self, canvas):
        #########################################################################
        # IMPORTANT the tile array is a list of lists. Functionally similar, but#
        # distinct from a 2d array. To access the first element tiles[0][0] is  #
        # used. Since tiles[0] evaluates to a list object.                      #
        #########################################################################

        # for each column
        tiles_in_camera = self.camera.get_tiles_in_span(self.tiles)
        offset = Vector(self.camera.pos.x, self.camera.pos.y)
        for i in range(len(tiles_in_camera)):
            tiles_in_camera[i].draw(canvas, offset)
        self.result = self.player.draw(canvas, self.size, offset)
        canvas.draw_line((0, 0), (0, self.size[1]), 40, "#000000")
        canvas.draw_line((self.size[0], 0), (self.size[0], self.size[1]), 40,
                         "#000000")
        self.player.draw_lives(canvas)
        self.tick(tiles_in_camera)

        if self.result is not States.STATES[1]:
            self.game_over()

        return self.result

    def tick(self, sprites_to_tick):
        self.keyboard.tick(self.player, self.camera)
        self.camera.tick()
        for s in sprites_to_tick:
            s.tick()
        self.player.tick()

    def game_over(self):
        # TODO: add the game over transition and everything
        self.player = None
        self.camera = None
        self.keyboard = None
        self.tiles = None