Beispiel #1
0
class Application:
    def __init__(self, window_x, window_y):
        self.window_x = window_x
        self.window_y = window_y
        self.WINDOW_WIDTH = 800
        self.WINDOW_HEIGHT = 600
        self.backgroundColor = (255, 255, 255)
        self.textColor = (0, 0, 0)

        self.is_running = True
        pygame.init()
        self.fps_controller = fps_limiter(
        )  # IMPORTANT - FPS Controller must be started AFTER the call to
        # pygame.init(). The timer in pygame gets the time in milliseconds
        self.up_pressed = False  # from the call to pygame.init().
        self.down_pressed = False
        self.left_pressed = False
        self.right_pressed = False

        self.pressed = None  # Empty object to store output from pygame.key.get_pressed()

        self.up = pygame.K_UP  # Key constants redefined for easier typing
        self.down = pygame.K_DOWN
        self.left = pygame.K_LEFT
        self.right = pygame.K_RIGHT
        self.space = pygame.K_SPACE

        # Setup for the screen, background, and player objects
        self.screen = pygame.display.set_mode(
            (self.WINDOW_WIDTH, self.WINDOW_HEIGHT))
        self.background = pygame.Surface(
            (self.WINDOW_WIDTH, self.WINDOW_HEIGHT))
        self.background.fill(self.backgroundColor, None)
        self.player = Player("Gjiorgisborgen")
        self.player.setup_entity(400, 400, 30, 30)

        # Font initialization
        pygame.font.init()
        self.text_font = pygame.font.SysFont(pygame.font.get_default_font(),
                                             20)

        # Text Surface initial render
        self.player_info = self.text_font.render(self.player.__str__(), True,
                                                 (0, 0, 0))

        # Collision detection object
        self.collision_checker = Collision(self.player)

    # Text update handling
    def update_text(self):
        self.player_info = self.text_font.render(self.player.__str__(), True,
                                                 (0, 0, 0))

    # Main game loop function
    def main(self):

        while self.is_running:
            self.fps_controller.update_timer()
            self.event_loop()
            self.collision_checker.check_collision()
            self.player.updateEntity()
            self.fps_controller.control_fps()
            self.render()
            pygame.display.flip()

    def getscreen(self):
        return self.screen

    # ALL RENDERING DONE HERE!!!
    def render(self):
        pygame.draw.rect(self.screen, self.backgroundColor,
                         pygame.Rect(0, 0, 800, 600), 800)
        self.player.drawEntity(self.getscreen())
        self.update_text()
        self.screen.blit(self.player_info, (0, 0))

    # The event loop first uses get_pressed()->[]Booleans, which represent the overall
    # state of every key on the keyboard. It's from this new self.pressed variable that
    # we store the states that we care about, up down left and right, in single, easily accessible
    # Boolean variables. These are then changed within the loop itself based on the input from
    # the use.
    def event_loop(self):

        self.pressed = pygame.key.get_pressed()  # Get the key states

        self.up_pressed = self.pressed[self.up]  # Update the key states
        self.down_pressed = self.pressed[self.down]
        self.left_pressed = self.pressed[self.left]
        self.right_pressed = self.pressed[self.right]

        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                self.quit_application()

            if event.type == pygame.KEYDOWN:
                if event.key == self.up:
                    self.player.set_y_vel(-3)
                    self.up_pressed = True

                if event.key == self.down:
                    self.player.set_y_vel(3)
                    self.down_pressed = True
                if event.key == self.left:
                    self.player.set_x_vel(-3)
                    self.left_pressed = True
                if event.key == self.right:
                    self.player.set_x_vel(3)
                    self.right_pressed = True

                if event.key == self.space:
                    if not self.player.get_jump_started() or self.player.get_y(
                    ) == (self.collision_checker.maxy - 1):
                        self.player.set_y_vel(-10)
                        self.player.set_y_accel(0.5)
                        self.player.set_jump_started(True)

            if event.type == pygame.KEYUP:
                if event.key == self.up and self.down_pressed:
                    self.player.set_y_vel(3)
                    self.up_pressed = False
                elif event.key == self.up:
                    self.player.set_y_vel(0)
                    self.up_pressed = False
                if event.key == self.down and self.up_pressed:
                    self.player.set_y_vel(-3)
                    self.down_pressed = False
                elif event.key == self.down:
                    self.player.set_y_vel(0)
                    self.down_pressed = False

                if event.key == self.left and self.right_pressed:
                    self.player.set_x_vel(3)
                    self.left_pressed = False
                elif event.key == self.left:
                    self.player.set_x_vel(0)
                    self.left_pressed = False
                if event.key == self.right and self.left_pressed:
                    self.player.set_x_vel(-3)
                    self.right_pressed = False
                elif event.key == self.right:
                    self.player.set_x_vel(0)
                    self.right_pressed = False

    def quit_application(self):
        pygame.font.quit()
        pygame.quit()