CCCPaste

Untitled

import pygame as pg

keybindings = {
    'left': pg.K_LEFT,
    'right': pg.K_RIGHT,
    'down': pg.K_DOWN,
    'action': pg.K_s,
    'jump': pg.K_UP,
}

class Control():
    def __init__(self, caption):
        self.screen = pg.display.get_surface()
        self.done = False
        self.clock = pg.time.Clock()
        self.caption = caption
        self.fps = 60
        self.show_fps = False
        self.current_time = 0.0
        self.keys = pg.key.get_pressed()
        self.state_dict = {}
        self.state_name = None
        self.state = None

    def setup_states(self, state_dict, start_state):
        self.state_dict = state_dict
        self.state_name = start_state
        self.state = self.state_dict[self.state_name]

    def update(self):
        self.current_time = pg.time.get_ticks()

        if self.state.quit:
            self.done = True
        elif self.state.done:
            self.flip_state()
        self.state.update(self.screen, self.keys, self.current_time)

    def flip_state(self):
        previous_state = self.state_name
        self.state_name = self.state.next
        self.state = self.state_dict[self.state_name]
        self.state.previous = previous_state

    def event_loop(self):
        for event in pg.event.get():
            if event.type == pg.QUIT:
                self.done = True
            elif event.type == pg.KEYDOWN:
                self.keys = pg.key.get_pressed()
                self.toggle_show_fps(event.key)
            elif event.type == pg.KEYUP:
                self.keys = pg.key.get_pressed()

            self.state.get_event(event)



    def toggle_show_fps(self, key):
        if key == pg.K_z:
            self.show_fps = not self.show_fps
            if not self.show_fps:
                pg.display.set_caption(self.caption)

    def main(self):
        # game loop for super mario game
        while not self.done:
            self.event_loop()
            self.update()
            pg.display.update()
            self.clock.tick(self.fps)

            if self.show_fps:
                fps = self.clock.get_fps()
                fps_string = "{} - {:2f}".format(self.caption, fps)
                pg.display.set_caption(fps_string)

class _State():
    def __init__(self):
        self.start_time = 0.0
        self.current_time = 0.0
        self.done = False
        self.quit = False
        self.next = None
        self.previous = None
        self.persist = {}

    def startup(self, current_time, persistance):
        self.persist = persistance
        self.start_time = current_time

    def cleanup(self):
        self.done = False
        return self.persist

    def update(self, screen, keys, current_time):
        pass