我们可以在链表中获得随机性吗?。我正在实现太空射击游戏,其中敌人应该随机射击子弹。我将敌人存储在链表中,我想随机选择一些敌人并从中射击。我如何使用链表来做到这一点?
最佳答案
根据我的拙见,随机分配一个数字 N 然后让 N 艘船射击并不是解决这个问题的正确方法。首先,这意味着一艘船将拍摄每一帧或每一转,这不一定是您想要的。
问题是无论屏幕上有多少敌人,射击的数量都是一样的。无论您有 1 个敌人还是 100 个敌人,所有敌人的射速加起来就是每回合/帧一次射击,这在游戏设计方面毫无意义。这也意味着一艘船有时可能 2xN 转弯不开火(这有点像老武侠电影中坏人排队等候与“英雄”战斗并且从不同时攻击)。
在我看来,最好的方法是迭代飞船并以一定的概率让每艘飞船都开火,最好是根据上次开火的时间。
long now = getCurrentTime... /*replace with real function*/
double epsilon = 0.0001; /*adjust as needed*/
while(current = enemyList.next()){
if(Math.random() < epsilon * (now - current.lastFired))
{
current.fire();
current.lastFired = now;
}
}
如果不利用这个机会,迭代 N 个元素几乎没有任何意义。如果您使用列表,则意味着您计划遍历所有敌人并更新每个敌人。没有必要再次迭代其中的 N 个,只是选择一个来开火。
关于c++ - 链表中的随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13448972/