我正在制作一个编程游戏,玩家可以在其中对盟友的行为进行编程。玩家为给定的盟友编写decision() 函数的主体,可以用任何Java 代码填充该主体,但必须返回一个动作。我想给每个盟友一组,每次滴答的计算量有限,所以 1)添加更多实体不会使游戏减慢太多,2)实体花费计算的时间会反映在游戏中,所以如果一个盟友花更多的时间“思考”它会减少行动。我对它应该如何工作的灵感是Battlecode,它为单位每轮提供一定数量的字节码,然后暂停计算并让程序员在事情发生变化时处理注意事项。
我的问题是如何暂停和恢复正在线程中执行决策功能的实体。我知道这样做的“正确”方法是设置一个标志,告诉线程暂停并偶尔检查它,但由于我不能强制玩家在 decision() 函数中检查标志,所以我不知道如何暂停线程。实体只查看世界的固定表示,只需要返回一个枚举值,所以我认为他们不应该锁定任何东西,但我希望有比使用已弃用的更好的方法来做到这一点线程暂停方法。我愿意改变玩家编写代码的方式,但我想不出一种方法来做到这一点,同时仍然向用户隐藏暂停标志检查,而不会使编写决策循环变得混乱和繁重。