如何在swift中生成从1到4和8的随机数

how to generate random numbers from 1 to 4 and 8 in swift

我现在正在制作一个 iOS SpriteKit 游戏,这是我第一次开发任何应用程序,这对我来说是一个艰巨的挑战,因为这确实是一个很大的项目。我的游戏是骰子游戏,我将移动定义为 4 个数字。因此,每当我触摸屏幕时,玩家移动 4 个方块,但现在我想将骰子添加到游戏中,我需要从 1 到 4 和 8 的数字。所以骰子中的数字将是 1、2、3、4 和 8 .我知道在 Swift 中我们可以使用 "arc4random" 获得随机数,但是我如何获得数字 1 到 4 以及 8 我可以使用 arc4random 来实现吗?如果可能的话,我需要 4 和 8 个数字来达到 20%更频繁。 任何帮助都会非常有帮助。谢谢

您可以生成一个1-8的随机数,如果出现5、6、7,您可以再次运行随机数函数,直到一个可接受的值。 它有点变通,但它有效,因为数据集很小。

将你的 sides 放入一个数组中,然后使用 arc4random_uniform 进行掷骰:

let sides = [1, 2, 3, 4, 8]
let roll = sides[Int(arc4random_uniform(UInt32(sides.count)))]

if possible I need 4 and 8 numbers to come 20% more often

这意味着,48 应该出现 6 次,每次其他人出现 5 次。所以 1-3 各放 5 次在你的数组中,48:

各 6 个
let sides = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8]
let roll = sides[Int(arc4random_uniform(UInt32(sides.count)))]

另外,查看

你会像这样使用他的函数:

let sides = [1, 2, 3, 4, 8]
let probabilities = [1.0, 1.0, 1.0, 1.2, 1.2]

let rand = randomNumber(probabilities: probabilities)
let roll = sides[rand]