Beispiel #1
0
class Demo(state_machine.State):

    def __init__(self):
        state_machine.State.__init__(self)
        self.state_machine = state_machine.StateMachine()
        self.should_flip = False
        self.timer_delay = None
        self.blink = True

    def startup(self, now, persistant):
        self.state_machine.setup_states({
            'GAME': Game(),
            'CREDITS': Credits()
        }, 'CREDITS')
        self.state_machine.state.startup(now, persistant)
        self.should_flip = False
        self.blink = True
        self.timer_delay = Timer(1000)

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

    def get_event(self, event):
        if event.type == pygame.KEYDOWN:
            self.done = True
            self.next = 'GAME'
            self.state_machine.state.cleanup()

    def update(self, keys, now):
        if self.state_machine.state_name == 'GAME' and not self.state_machine.state.AI:
            if not self.should_flip:
                self.state_machine.state_dict['GAME'].AI = True
                self.should_flip = True
                self.state_machine.state_dict['GAME'].restart_game_state()
            else:
                self.should_flip = False
                self.state_machine.state.next = 'CREDITS'
                self.state_machine.flip_state()

        self.state_machine.update(keys, now)
        if self.timer_delay.check_tick(now):
            self.blink = not self.blink

    def draw(self, surface, interpolate):
        self.state_machine.draw(surface, interpolate)
        if self.blink:
            render_text_center(surface,
                               '{} VERSION {}\nPRESS ANY KEYS TO START'.format(GameConfig.CAPTION_WINDOW.capitalize(),
                                                                               GameConfig.VERSION_TEXT.capitalize()),
                               GameConfig.COLOR_CENTER_TEXT,
                               GameConfig.WINDOW_H - GameConfig.FONTSIZE_CENTER_TEXT * 2,
                               GameConfig.FONTSIZE_CENTER_TEXT)
class Credits(state_machine.State):
    def __init__(self):
        state_machine.State.__init__(self)
        self.land = None
        self.aircraft = None
        self.aircraft_team = None
        self.timer_delay = None
        self.draw_credits = False

        self.timer_display_message = None
        self.display_message = ''
        self.debug_group = components.debug.debug_group
        self.number_plateform_save = 0
        self.gravity_save = 0
        self.credit_index = 0

    def startup(self, now, persistant):
        state_machine.State.startup(self, now, persistant)
        self.number_plateform_save = LandingConfig.numberOfPlateforms
        self.gravity_save = LanderConfig.GRAVITY
        LanderConfig.GRAVITY = 0
        LandingConfig.numberOfPlateforms = 0
        self.draw_credits = False
        self.timer_delay = Timer(CreditConfig.DELAY_BETWEEN_CREDITS)
        self.land = Landing()
        self.aircraft = Lander()
        self.aircraft.fuel = 1000
        self.timer_display_message = Timer(CreditConfig.CREDIT_DURATION)
        self.aircraft_team = pygame.sprite.Group(self.aircraft)
        self.aircraft.orientation = 0
        self.credit_index = 0

    def cleanup(self):
        self.done = False
        LandingConfig.numberOfPlateforms = self.number_plateform_save
        LanderConfig.GRAVITY = self.gravity_save
        return self.persist

    def get_event(self, event):
        pass

    def update(self, keys, now):
        self.now = now
        self.debug_group.update()
        self.aircraft.boost()
        self.aircraft.vy = 0
        self.aircraft.vx = CreditConfig.SPEED_AIRCRAFT
        self.aircraft.y = CreditConfig.AIRCRAFT_Y_POS
        self.land.landingEntities.update()
        self.aircraft_team.update()
        self.aircraft.fuel = 1000
        if self.aircraft.rect.left > GameConfig.WINDOW_W:
            self.land = Landing()
            self.aircraft.x = -15

        if not self.draw_credits:
            self.timer_display_message.timer = now
            if self.timer_delay.check_tick(now):
                self.draw_credits = not self.draw_credits
        else:
            self.timer_delay.timer = now
            if self.timer_display_message.check_tick(now):
                self.draw_credits = not self.draw_credits
                self.credit_index += 1
        if self.credit_index >= len(CreditConfig.CREDITS):
            self.done = True
            self.next = 'GAME'
        else:
            self.display_message = CreditConfig.CREDITS[self.credit_index]

    def draw(self, surface, interpolate):
        surface.fill(GameConfig.BACKGROUND_COLOR)
        self.land.landingEntities.draw(surface)
        self.aircraft_team.draw(surface)
        self.debug_group.draw(surface)
        if self.draw_credits:
            render_text_center(surface, self.display_message,
                               GameConfig.COLOR_CENTER_TEXT,
                               CreditConfig.OFFSET_Y_CREDIT,
                               GameConfig.FONTSIZE_CENTER_TEXT)