[英]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.