簡體   English   中英

Python3:如何為每個對象生成一個偽隨機序列?

[英]Python3: How to generate a pseudo-random sequence per object?

我有一個測試項目,其中一些實體可以發射子彈,並且根據命中方向和一些隨機值,它可以影響或被偏轉。

當離線運行時,它很容易在移動中生成隨機數,以便判斷鏡頭是否應該彈跳,如random.randint()random.random()

但我希望通過UDP廣播發射事件,以便其他客戶可以在屏幕上顯示相同的實體/射彈。

彈丸是非常高的速度,所以我不能等待服務器告訴我過去的位置,只是使用它(我可以糾正軌跡)。 主要思想是從遠程實體接收fire調用,獲取一些值,如position, velocity, randseed

我的問題是如何為每個實體使用種子?

假設我的屏幕上一次有10個子彈,每個子彈都有自己的偽隨機種子,我想讓子彈生成自己的偽序列,就像它們在網絡的一側或另一側一樣。

例:

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

這樣每個實例都有自己的隨機序列,而不是每個random.random()調用中random.seed()共享的序列。

如何生成不同的偽隨機序列?

如果這是一個壞主意,廣播一個發射事件的最佳方法是什么,以便它與所有客戶端+服務器有些同步?

PS:服務器具有完全權限,同步用於顯示目的。

使用random.Random類,例如:

self.randgen = random.Random(seed)

然后調用self.randgen.random() (或.randint(<int>) )將是您的實例的本地。

或者,您可以創建一個包裝器,在每次調用random.random()之前使用self.state = random.getstate()然后使用random.setstate(self.state) random.random()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM