您实际上并不需要随机分布。我明确指出这一点,因为我们认为设计的“随机性”通常不是真正的随机性。
现在,考虑到这一点,让我们添加一些调整值-在设计感到“正确”之前,您将一直使用这些东西。
ChooseLetter() {
const float WordLetterProbability = 0.5f;
if (Random.NextFloat01() < WordLetterProbability) {
// Pick a random letter in the word
}
else {
// Pick a random letter *not* in the word
}
}
机率控制着给定的ChooseLetter呼叫给您一个单词字母的可能性-值为0.5时,您大约每隔一段时间就会收到一个单词字母。值为0.25时,四分之一就是单词字母,依此类推。
这仍然有点简单-因为随机性是随机的,所以您实际上无法保证单词之间的间隔时间。(从理论上讲,没有单词字母就可以永远消失,这是非常非常不可能的。)相反,我们可以增加一个因素来增加每次收到单词字母的概率:
const float BaseWordLetterProbability = 0.5f;
const float WordLetterProbabilityIncrease = 0.25f;
float WordLetterProbability = BaseWordLetterProbability;
ChooseLetter() {
if (Random.NextFloat01() < WordLetterProbability) {
// Pick a random letter in the word
WordLetterProbability = BaseWordLetterProbability;
}
else {
// Pick a random letter *not* in the word
WordLetterProbability += WordLetterProbabilityIncrease;
}
}
好吧,所以现在我们在没有单词字母的情况下不要超过两个字母。(因为在两次未命中之后,我们得到单词字母的概率为1.0。)
最后,我们需要考虑选择单词中的字母是如何工作的。为了向玩家提供他们实际需要的字母,我们需要在获得字母时将其从集合中删除。
例如,如果单词是“ test”,并且玩家已经有“ s”,我们就不想再给他们一个“ s”,因为他们不需要它!
从这里开始,其余部分将进行调整以适合您的设计。