把pygame 做成 flask 的样子

2023-04-19  本文已影响0人  圣_狒司机

一、事件路由

flask的机制是实例化事件轮询函数,然后向主函数注册路由视图的方式实现路由响应。

使用flask轮询函数只需要实例化Flask类,再app.run就可以了。app是库自带的,用户要做的只剩往路由表里添加视图函数。

pygame的内部机制是单事件循环,可以模仿flask注册事件类。先实例化一个自己的route类,往这个route类里封装事件表,对应flask 的路由表,再封装事件索引装饰器。

class Route:
    def __init__(self):
        self.lib = {}
    def __repr__(self):
        return f"{self.lib=}"
    def __call__(self,routepath):
        def warpper(func):
            self.lib[routepath] = func
            @wraps
            def inner_wrapped(*args):
                return func(*args)
            return inner_wrapped
        return warpper

二、游戏类

在游戏类的init函数中封装route事件表

class Game:
    def __init__(self):
        pygame.init()
        self.route = Route()
        self.clock = pygame.time.Clock()

    def run(self):
        self.screen = pygame.display.set_mode((400,300))
        print(self.route.lib)
        while 1:
            for event in pygame.event.get():
                if event.type in self.route.lib:
                    self.route.lib[event.type](event)
        self.screen.fill((0,0,0))
        pygame.display.flip()
        self.clock.tick(20)

三、注册事件函数

把以上两个类写进 lib.py 中,导入库:

import pygame,sys
from functools import wraps

写入口主函数和事件注册函数:

import pygame,sys
from pygame.locals import *
from lib import Game

game = Game()

@game.route(QUIT)
def exit(e):
    pygame.quit()
    sys.exit()

@game.route(KEYDOWN)
def keydown(e):
    print(e)

@game.route(MOUSEMOTION)
def mousemottion(e):
    print(e)

@game.route(MOUSEBUTTONDOWN)
def mousebuttondown(e):
    print(e)

game.run()

上一篇 下一篇

猜你喜欢

热点阅读