首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建多个博弈状态

创建多个博弈状态
EN

Stack Overflow用户
提问于 2021-03-03 16:14:07
回答 2查看 36关注 0票数 0

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

但是有什么方法可以让这个游戏多站起来吗?这样我就可以创建200条俄罗斯方块,等到所有的人都死了,做操作而不是创建一个实例,等待AI失败,关闭游戏,创建一个新的,等等?

我试过:

代码语言:javascript
运行
复制
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()

但结果不是比赛的三站,而是只有一个与古怪的事情正在进行。如果我只使用一个线程,一切都很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-03 16:55:05

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

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

我对代码进行了如下修改,以获得终止时创建的每个进程的点数。

代码语言:javascript
运行
复制
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())
票数 0
EN

Stack Overflow用户

发布于 2021-03-03 16:55:28

,但是有办法创建游戏的多个实例吗?

不,不可能。请参见pygame.display模块:

这个模块提供了对游戏显示的控制。Pygame有一个单独的显示界面,它要么包含在窗口中,要么运行全屏。一旦你创建了显示,你就把它当作一个普通的曲面。..。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66460852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档