python - 这个基本的pygame结构如何?

标签 python pygame structure

<分区>

下面是我现在如何实现简单的 pygames:

import pygame, sys
from pygame.locals import *

def run_game():
    pygame.init()

    SIZE = (640, 400)
    BG_COLOUR = (0, 0, 0)
    LINE_COLOUR = (255, 255, 255)

    screen = pygame.display.set_mode(SIZE)
    clock = pygame.time.Clock()

    while True:
        time_passed = clock.tick(30)
        for event in pygame.event.get():
                if event.type == QUIT:
                        exit_game()

        screen.fill(BG_COLOUR)
        pygame.draw.aaline(screen, LINE_COLOUR, (1, 1), (639, 399))
        pygame.display.flip()

def exit_game():
    sys.exit()

if __name__ == "__main__"
    run_game()

我还看到一个 keeprunning 标志被用来退出主事件循环,以及使用 pygame.event.poll() 而不是循环pygame.event.get()。有什么建议,例如变量的大小写/命名,以及任何可以使其更有效或更易读的建议吗?

最佳答案

无论 pygame 作者推荐什么,我都建议避免使用 from ... import *:它只会让您的代码更难阅读(因为读者必须检查每个和每个裸名以检查它是否实际分配给本地或来自推断的 *)。将其更改为 import pygame.locals as pygl,例如,并使每次使用的名称成为合格名称(我认为在您的代码中这仅意味着更改 QUITpygl.QUIT)。您选择使用什么短名称来代替 pygl 并不重要,但这是我强烈推荐的通用结构。记住:命名空间是一个很棒的想法——让我们做更多的事情吧!-)

到处使用 4 空格缩进,正如 PEP 8 所说:您似乎将一些 4 空格缩进与其他 8 空格或制表符的缩进混合在一起——不要!

不要为永远不会使用的变量赋值,因为您正在为 time_passed 赋值。

代码如下: 如果 event.type == QUIT: 退出游戏() 只要您正在测试一种或极少数可能性(使用 if/elif)就可以了,但在可读性或效率方面不会“扩大”太多.当你需要涵盖多种情况时,使用一个你可以在循环之前设置的字典:

dispatch = {pygl.QUIT: exit_game, # whatever else
           }

而不是 if/elif/else,使用:

f = dispatch.get(event.type)
if f is None:  # the "else" case"
   ...
else: f()

关于python - 这个基本的pygame结构如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413937/

相关文章:

python - 如何在 gitpod 中导入 pygame?

c - 具有字符串的结构中的 fscanf

python - 是否可以在 Python 类定义中使用导入的类方法而不运行导入文件中的所有代码?

python - numpy 中是否有函数可以替换 numpy 数组的下对角线和上对角线值?

python - 如何格式化查询字符串

python - 为什么 1-0.9 不是 0.1?

c - 在头文件中为结构成员使用宏 #define 时无法编译 C 代码

python - Websocket 在 Tornado 中收到响应后持续监听

python - PyGame点击改变矩形的颜色

python - time.sleep 遇到问题(python)