c++ - 链表中的随机性

标签 c++ data-structures random

我们可以在链表中获得随机性吗?。我正在实现太空射击游戏,其中敌人应该随机射击子弹。我将敌人存储在链表中,我想随机选择一些敌人并从中射击。我如何使用链表来做到这一点?

最佳答案

根据我的拙见,随机分配一个数字 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/

相关文章:

c++ - 重载运算符以合并 vector

c++ - wxWidgets 2.9.1 - 使用多个 wxStaticBoxes 时键盘导航出现问题

c++ - 值噪声随机函数奇怪的输出

string - 任何使用数字作为生成随机字符串的提要的算法?

c++ - 如何判断cudaErrorIllegalAddress是由于目标地址还是源地址?

c++ - 如何在 C++ 的 Visual Studio 即时窗口中声明变量?

c++ - 如何从排序的数据创建 vector map

java - 如何比较STL数据结构中的对象

直方图或包数据结构的 Objective-C 实现

c - 如何使用rand()在c中生成指定长度的随机数?