character - 为什么 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() 后返回的值。我该如何解决?