首页 > 解决方案 > 支持克隆暂停例程的堆栈协程

问题描述

我正在实现一个游戏引擎并计划在它之上构建一个 AI,从一个包含状态和动作的简单模型开始,其中每个不同的游戏状态都有一组动作,而动作将你从一个状态带到另一个状态,例如

移动:状态 -> 状态

为了支持 AI 功能,我需要复制State 的能力,以便我可以为它测试每个可能的 Move(同时保持原始状态不变),以实现分支逻辑。

问题是很难复制国家。State 不能简单地用类的实例封装,因为游戏 State 包含有关程序当前执行上下文的信息。在编程术语中,整个程序堆栈是状态的一部分。

我注意到协程提供了我想要的大部分内容,特别是堆栈式协程。它们允许程序员将整个执行堆栈视为一个对象,可以暂停和恢复,这正是我所需要的。暂停的堆栈协程连同一个类实例,完全捕获了游戏状态。但是,我还需要克隆暂停的协程的能力,这样我就可以从同一个恢复点多次从中断的地方恢复它,每次使用不同的参数。每组参数对应于对状态应用不同的移动。

我对 C++ 有经验,但对协程很陌生。我浏览了 Boost 协程的基本文档,并没有发现任何关于克隆堆栈协程的能力。在我开始使用这个库之前,我需要保证它支持这个。如果没有,我将被迫使用自制程序集和堆栈操作来实现所需的逻辑,但是已经这样做的库更可取。Boost 支持这个吗?如果没有,还有什么可以工作的吗?

标签: coroutinegame-theoryc++-coroutine

解决方案


推荐阅读