Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3648519
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Python/Ruby

2022-05-09 23:45:58

import os

import pygame as pg

keybinding = {

    'action':pg.K_s,

    'jump':pg.K_a,

    'left':pg.K_LEFT,

    'right':pg.K_RIGHT,

    'down':pg.K_DOWN

}

class Control(object):

    """Control class for entire project. Contains the game loop, and contains

    the event_loop which passes events to States as needed. Logic for flipping

    states is also found here."""

    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, self.state_name = self.state_name, self.state.next

        persist = self.state.cleanup()

        self.state = self.state_dict[self.state_name]

        self.state.startup(self.current_time, persist)

        self.state.previous = previous

    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_F5:

            self.show_fps = not self.show_fps

            if not self.show_fps:

                pg.display.set_caption(self.caption)

    def main(self):

        """Main loop for entire program"""

        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()

                with_fps = "{} - {:.2f} FPS".format(self.caption, fps)

                pg.display.set_caption(with_fps)

class _State(object):

    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 get_event(self, event):

        pass

    def startup(self, current_time, persistant):

        self.persist = persistant

        self.start_time = current_time

    def cleanup(self):

        self.done = False

        return self.persist

    def update(self, surface, keys, current_time):

        pass

def load_all_gfx(directory, colorkey=(255,0,255), accept=('.png', 'jpg', 'bmp')):

    graphics = {}

    for pic in os.listdir(directory):

        name, ext =外汇跟单gendan5.com os.path.splitext(pic)

        if ext.lower() in accept:

            img = pg.image.load(os.path.join(directory, pic))

            if img.get_alpha():

                img = img.convert_alpha()

            else:

                img = img.convert()

                img.set_colorkey(colorkey)

            graphics[name]=img

    return graphics

def load_all_music(directory, accept=('.wav', '.mp3', '.ogg', '.mdi')):

    songs = {}

    for song in os.listdir(directory):

        name,ext = os.path.splitext(song)

        if ext.lower() in accept:

            songs[name] = os.path.join(directory, song)

    return songs

def load_all_fonts(directory, accept=('.ttf')):

    return load_all_music(directory, accept)

def load_all_sfx(directory, accept=('.wav','.mpe','.ogg','.mdi')):

    effects = {}

    for fx in os.listdir(directory):

        name, ext = os.path.splitext(fx)

        if ext.lower() in accept:

            effects[name] = pg.mixer.Sound(os.path.join(directory, fx))

    return effects

阅读(871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~