微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建多个 Pygame 实例

如何解决创建多个 Pygame 实例

我正在尝试创建一种遗传算法来学习如何玩俄罗斯方块。

但是有没有办法创建游戏的多重状态? 这样我就可以创建 200 个俄罗斯方块,等到所有的都死了再做操作而不是创建一个实例,等待 AI 失败,关闭游戏,创建一个新的等等?

我试过:

import logging
import threading
import time

from game import Game


def thread_function():
    Game()

if __name__ == "__main__":
    x = threading.Thread(target=thread_function,args=())
    x.start()
    y = threading.Thread(target=thread_function,args=())
    y.start()
    z = threading.Thread(target=thread_function,args=())
    z.start()

但结果不是游戏的 3 个阶段,而是只有 1 个发生了奇怪的事情。 如果我只使用一个线程,则一切正常。

解决方法

我实际上已经解决了这个问题。

您必须创建简单的多进程,而不是创建单进程和多线程。

我已经更改了这样的代码,以获取终止时创建的每个进程的点数。

import multiprocessing
from multiprocessing import Process
from game import Game


def thread_function(procnum,return_dict):
    return_dict[procnum] = Game().end_game()

processes = []

if __name__ == "__main__":
    manager = multiprocessing.Manager()
    return_dict = manager.dict()

    for m in range(1,3):
        p = Process(target=thread_function,args=(m,return_dict,))
        p.start()
        processes.append(p)

    for p in processes:
        p.join()

    print(return_dict.values())
,

但是有没有办法创建多个游戏实例?

不,没有办法。请参阅 pygame.display 模块:

此模块提供对 pygame 显示的控制。 Pygame 有一个单独的显示 Surface,它要么包含在一个窗口中,要么全屏运行。创建显示后,您将其视为常规 Surface。 [...]

但是,您根本不需要多个窗口。您可以同时多次运行游戏逻辑。但只显示其中之一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。