首页 > 解决方案 > 为什么 rand() 函数即使在使用种子时也会通过多次调用打印出相同的值

问题描述

我有一个问题,我需要彻底解决这个问题,以便在我的一个大学项目的角色类中正确实施致命一击功能。基本上,弓箭手类有 50% 的机会在每次攻击中造成额外伤害,但我遇到了一个问题,弓箭手要么暴击要么正常攻击,并在每次连续调用 attack() 函数时保持这种状态。

如你所见,我已经实例化了一个 Character 类型的 Archer 对象和一个 Character 类型的 Warrior 对象,并且我已经告诉 Archer(玩家 3)攻击 Warrior(玩家 3)3 次。每次我调用 attack() 函数时,它都会打印出弩的伤害;普通攻击50,暴击100。

#include <iostream>

#include "Character.h"
#include "Warrior.h"
#include "Spells.h"

int main(){
Character *player1 = new Wizard(1000);
Character *player2 = new Warrior("pitch fork", 100);
Character *player3 = new Archer("slingshot", 100);

player3->attack(*player1);
player3->attack(*player1);
player3->attack(*player1);

return 0;

}

输出是:

Crossbow Damage: 50
Crossbow Damage: 50
Crossbow Damage: 50

但是如果我再次运行它并且弓箭手在第一次呼叫时暴击,那么每个后续呼叫也是暴击:

Crossbow Damage: 100
Crossbow Damage: 100
Crossbow Damage: 100

我希望每次对attack() 的调用都相互独立,所以这样的事情是理想的:

Crossbow Damage: 50
Crossbow Damage: 100
Crossbow Damage: 50

我使用了 srand() 函数,但它仍然给出相同的输出,具体取决于第一次调用 attack() 后返回的值。我该如何解决?

标签: charactersrand

解决方案


推荐阅读