创建多个Pygame instance



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

但是是否有办法创造游戏的多个距离?这样我就可以创建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。[…]

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

最新更新