1

私のプロジェクト:

  • ボタンのグリッドを持つpygameのGUI
  • ゲームローダー
  • すべてがGUIで動作する必要がある多くのゲーム

すべて別々の.pyファイルにあります

アプリケーションローダーはGUIを起動する必要があり、ユーザーはGUIのボタンをクリックして、ゲームローダーに特定のゲームをロードさせます。次に、ユーザーはGUIの他のボタンをクリックしてゲームロジックを操作し、ゲームの状態もに表示されます。 GUI。

ゲームローダーはGUIをインポートする必要があるため、Pythonでこれを構造化する方法がわかりませんが、特定のゲームをロードするメソッドを呼び出すために、GUIはゲームローダーをインポートする必要がありますか?そして、ゲームファイルとの同様の相互作用?

GUIは選択可能なオプションです。同じ機能を実行するハードウェアがあり、それらは互いに連携して動作することもできるからです。

3つのコンポーネントすべてが相互に関数を呼び出すことができる必要がありますが、インポートではこれを一方向にしかできません。異なるファイルがすべて同じファイルの一部であるかのようにインポートを機能させる方法はありますか?それらがお互いをインポートする代わりに?

さまざまなもの、インポート、スレッドなどを試しましたが、何も機能しません。助けていただければ幸いです。

言葉遣いの悪い質問でごめんなさい。

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 に答える