使用 arc4random 生成的 Bools 的控制数量
Control quantity of Bools generated using arc4random
在我的 spritekit 游戏中,我生成了两个敌人之一。使用 arc4random_uniform(2)
随机生成的 bool 决定生成的敌人。
我正在尝试创建一种控制分发的方法。基本上,我不希望它连续生成 3 1
's (true
's)...
我认为最好的方法是在每次生成某些东西时进行检查,并递增计数,如果超过计数,则将生成的 bool
更改为相反的值。
我想我有点困惑,因为我无法让它工作。
有没有一种简单的方法可以做到这一点,或者可以修改我的代码以使其正常工作吗?谢谢。
var randomSequenceNumber = Int(arc4random_uniform(2)) == 0 ? true: false
if randomSequenceNumber {
seqCount = randomSequenceNumber
obNum++
print("Obstacle Count: ", obNum)
}
if obNum <= 3 {
randomSequenceNumber = !seqCount
obNum = 0
}
(估计脑子放了个大屁)
Gameplaykit introduces some new random number generators including GKShuffledDistribution
,根据 Apple 的说法,它完全符合您的要求:
A GKShuffledDistribution
object produces random numbers that across many samplings are uniformly
distributed, but where short sequences of similar values are unlikely
nextBool()
应该给你一个新的分布特征内的随机布尔值。
希望这对您有所帮助,
西蒙
我想按顺序生成随机 bools
,但如果相同的 bool
值连续生成 3 次以上,则改为相反。
但与此同时,我不只是希望它只是交替,比如 true false true false true false
等
所以它可以生成 true false true false true false
或 true true false false true false true false false true false
但永远不会 true true true true false true false true false false false false
... 等
这意味着我需要存储值,比较它们,如果最后 x
数量匹配则更改值,并重置存储值以备下次比较。
我是这样做的:
var randSeqArray: [Bool] = [] //empty array for bools
在我生成 bools
的函数中:
randSeqArray.append(randomBool) //add bool to array
if randSeqArray.count == 2 { //if matches count
if randSeqArray[0] == randSeqArray[1] { //if elements match
print("-------> last two bools matched!")
randomBool = !randomBool //change bool to opposite
}
randSeqArray.removeAll(keepCapacity: true) //empty array
randSeqArray.append(randomBool) //add bool back, ready to check next time
}
显然,此代码可确保随机布尔交替(用于测试),但可以采用它以允许在重置之前最多 x
连续匹配布尔。
这是上面的示例,它检查最后生成的 3 个布尔值是否匹配,确保您永远不会连续获得超过 2 个相同的布尔值:
randSeqArray.append(randomBool)
if randSeqArray.count == 3 {
if randSeqArray[0] == randSeqArray[1] && randSeqArray[1] == randSeqArray[2] {
print("-------> last three bools matched!")
randomBool = !randomBool
}
randSeqArray.removeAll(keepCapacity: true)
randSeqArray.append(randomBool)
}
在我的 spritekit 游戏中,我生成了两个敌人之一。使用 arc4random_uniform(2)
随机生成的 bool 决定生成的敌人。
我正在尝试创建一种控制分发的方法。基本上,我不希望它连续生成 3 1
's (true
's)...
我认为最好的方法是在每次生成某些东西时进行检查,并递增计数,如果超过计数,则将生成的 bool
更改为相反的值。
我想我有点困惑,因为我无法让它工作。
有没有一种简单的方法可以做到这一点,或者可以修改我的代码以使其正常工作吗?谢谢。
var randomSequenceNumber = Int(arc4random_uniform(2)) == 0 ? true: false
if randomSequenceNumber {
seqCount = randomSequenceNumber
obNum++
print("Obstacle Count: ", obNum)
}
if obNum <= 3 {
randomSequenceNumber = !seqCount
obNum = 0
}
(估计脑子放了个大屁)
Gameplaykit introduces some new random number generators including GKShuffledDistribution
,根据 Apple 的说法,它完全符合您的要求:
A
GKShuffledDistribution
object produces random numbers that across many samplings are uniformly distributed, but where short sequences of similar values are unlikely
nextBool()
应该给你一个新的分布特征内的随机布尔值。
希望这对您有所帮助,
西蒙
我想按顺序生成随机 bools
,但如果相同的 bool
值连续生成 3 次以上,则改为相反。
但与此同时,我不只是希望它只是交替,比如 true false true false true false
等
所以它可以生成 true false true false true false
或 true true false false true false true false false true false
但永远不会 true true true true false true false true false false false false
... 等
这意味着我需要存储值,比较它们,如果最后 x
数量匹配则更改值,并重置存储值以备下次比较。
我是这样做的:
var randSeqArray: [Bool] = [] //empty array for bools
在我生成 bools
的函数中:
randSeqArray.append(randomBool) //add bool to array
if randSeqArray.count == 2 { //if matches count
if randSeqArray[0] == randSeqArray[1] { //if elements match
print("-------> last two bools matched!")
randomBool = !randomBool //change bool to opposite
}
randSeqArray.removeAll(keepCapacity: true) //empty array
randSeqArray.append(randomBool) //add bool back, ready to check next time
}
显然,此代码可确保随机布尔交替(用于测试),但可以采用它以允许在重置之前最多 x
连续匹配布尔。
这是上面的示例,它检查最后生成的 3 个布尔值是否匹配,确保您永远不会连续获得超过 2 个相同的布尔值:
randSeqArray.append(randomBool)
if randSeqArray.count == 3 {
if randSeqArray[0] == randSeqArray[1] && randSeqArray[1] == randSeqArray[2] {
print("-------> last three bools matched!")
randomBool = !randomBool
}
randSeqArray.removeAll(keepCapacity: true)
randSeqArray.append(randomBool)
}