gpt4 book ai didi

python 3 : How to generate a pseudo-random sequence per object?

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:14 24 4
gpt4 key购买 nike

我有一个测试项目,其中一些实体可以发射子弹,并且根据命中方向和一些随机值,它可以影响或偏转。

当离线运行时,很容易生成随机数来判断射击是否应该跳弹,如 random.randint()random.random ()

但我希望通过 UDP 广播发射事件,以便其他客户端可以在他们的屏幕上显示相同的实体/射弹。

射弹的速度非常快,所以我等不及服务器告诉我过去的位置并直接使用它(不过我可以更正轨迹)。主要思想是接收来自远程实体的 fire 调用,获取一些值,例如 position, velocity, randseed

我的问题是如何为每个实体使用种子?

假设我的屏幕上同时有 10 个子弹,每个都有自己的伪随机种子,我希望子弹生成自己的伪序列,就像它们在网络的一侧或另一侧一样。

Example:

class Bullet(object):
def __init__(self, pos, v, seed):
self.randgen = InstanciableGenerator(seed)
# ...

def hit(self, pos, ...):
currentRandom = self.randgen.get()
# ...

So that each instance has its own random sequence, not one shared by the random.seed() across each random.random() calls.

如何生成不同的伪随机序列?

如果这是一个坏主意,广播触发事件的最佳方法是什么,以便它与所有客户端 + 服务器同步?

PS:服务器权限全,同步是为了展示

最佳答案

使用 random.Random类,例如:

self.randgen = random.Random(seed)

然后调用 self.randgen.random() (或 .randint(<int>) )将在您的实例本地。

或者,您可以创建一个使用 self.state = random.getstate() 的包装器然后 random.setstate(self.state)在每次调用 random.random() 之前

关于 python 3 : How to generate a pseudo-random sequence per object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com