如何在Python中获取多个不同随机数?解决Pong双球初始方向问题
解决Pong双球初始方向随机数重复问题
首先纠正一个误解:Python的random模块默认不会以小时为种子,它第一次被调用时会自动用系统的高精度时间(微秒级)初始化种子,所以正常情况下短时间内生成多个随机数不会重复。你遇到的重复问题,大概率是重复调用了random.seed()——每次调用这个方法都会重置随机数生成器的状态,导致后续生成的随机数完全一致。
下面是几种解决方法:
只初始化一次种子(推荐)
程序启动时最多调用一次random.seed(),甚至可以完全省略这行(random模块会自动完成初始化),之后直接调用随机数生成方法即可:import random # 可选:程序开头初始化一次,不写也没问题 # random.seed() # 生成第一个球的方向分量 ball1_x = random.uniform(-1, 1) ball1_y = random.uniform(-1, 1) # 生成第二个球的方向分量 ball2_x = random.uniform(-1, 1) ball2_y = random.uniform(-1, 1)使用独立的随机生成器实例
如果担心代码其他部分的随机操作影响球的方向生成,可以创建多个random.Random实例,每个实例独立维护随机状态:import random # 为两个球分别创建独立的随机生成器 rng_ball1 = random.Random() rng_ball2 = random.Random() ball1_x = rng_ball1.uniform(-1, 1) ball1_y = rng_ball1.uniform(-1, 1) ball2_x = rng_ball2.uniform(-1, 1) ball2_y = rng_ball2.uniform(-1, 1)额外优化:生成标准化的方向向量
如果用Pygame开发,可以直接生成长度一致的方向向量,避免球的移动速度不均:import pygame import random pygame.init() # 生成第一个球的标准化方向向量 ball1_dir = pygame.math.Vector2(random.uniform(-1,1), random.uniform(-1,1)).normalize() # 生成第二个球的标准化方向向量 ball2_dir = pygame.math.Vector2(random.uniform(-1,1), random.uniform(-1,1)).normalize()
内容的提问来源于stack exchange,提问作者Ekaitz
相关产品推荐
相关产品推荐

