1

我的项目:

  • pygame 中的一个 GUI,它有一个按钮网格
  • 游戏加载器
  • 许多游戏都需要使用 GUI

全部在单独的 .py 文件中

应用程序加载器应该启动 GUI,用户单击 GUI 上的一个按钮,使游戏加载器加载特定的游戏,然后用户通过单击 GUI 上的一些其他按钮与游戏逻辑进行交互,游戏状态也显示在图形用户界面。

我不确定如何在 python 中构建它,因为游戏加载器应该导入 GUI,但是 GUI 是否需要导入游戏加载器来调用加载特定游戏的方法?和游戏文件的类似交互?

GUI 是一个可以选择的选项,因为我有可以执行相同功能的硬件,并且它们也可以相互协同工作。

它有点像所有三个组件都需要能够相互调用函数,但 import 只允许这是一种方式。有没有办法让导入就像不同的文件都是同一个文件的一部分一样?而不是他们相互导入?

我已经尝试了很多不同的东西,导入,线程等,但无法得到任何工作,非常感谢任何帮助

对不起,措辞不佳的问题。

4

1 回答 1

0

任何游戏都是关于事件循环的。

所以要构建你的游戏:

  1. 有一个代表游戏加载器循环的模块,它呈现这些按钮的 GUI。一个好的做法是在事件循环之外和之前渲染大多数(甚至全部)GUI,然后让事件循环+一堆 if-else 语句来监听按钮点击。
  2. 让每个按钮单击代表一个特定事件,并将单击每个按钮后会发生的事情委托给单独的函数,这些函数负责导入和加载特定的游戏模块(其他 .py 文件)。
  3. 您可以交替主窗口的行为,这样游戏加载器 GUI 就消失了,特定游戏会获取并重用它,或者只是为特定游戏生成另一个窗口。
  4. [Alt to 2] 您可以将实际游戏逻辑放置在单个模块中的不同线程中,该模块还承载游戏加载程序循环。正确使用这种方式可能会带来更灵敏的整体游戏体验(例如,退出游戏会回到运行游戏加载器循环的另一个线程,而它仍然在内存中很热)

一个糟糕的说明如何做到这一点:

import pygame
import game_module_one  # your game logic
# two, three, four...

# Your game loader
def main():
    # Initialise window
    pygame.init()
    window = pygame.display.set_mode((1024, 768))
    # Bunch of rendering jobs, set fonts, draw buttons, etc.

    # Event loop
    while 1:
        for event in pygame.event.get():
            if event.type == QUIT:
                return
            elif event.type == "start_game_one":
                do_game_one(window)
            #...

# Game one loading function
def do_game_one(window):
    # do something to that window if you intend to
    pygame.display.flip()
    game_one_module.start()

考虑鼠标、事件、显示和表面的参考

希望这可以帮助。

于 2013-02-20T20:35:54.553 回答