如何将耗尽的健康结转到下一个循环?

达蒙定律

我有这个程序来实例化玩家角色、敌人角色和他们的武器。玩家角色选择攻击谁,敌人随机攻击玩家。他们有自己随机设置的健康、位置和武器伤害。我还有一个武器功能dodamage(),它通过武器伤害减少玩家的生命值。在 中main(),我设置了一个while(true)循环,每个角色都会攻击并消耗生命值。问题是第一次之后的每个循环,生命值和伤害都与开始相同。在第一个循环之后它们永远不会改变。我想知道如何将造成的伤害转移到下一个循环,直到生命值达到 <=0。

主程序

void playerAttack(Character c1, Character c2, Weapon w, string target)
{
if (target == "1")
{
    w.DoDamage(c1.healthPoints, w.Damage);
    if (c1.healthPoints <= 0)
        c1.die();
 }
    else if (target == "2") 
{
    w.DoDamage(c2.healthPoints, w.Damage);
    if (c2.healthPoints <= 0)
        c2.die();
}
}

void enemyAttack(Character c1, Character c2, Weapon w)
{
srand(time(NULL));
int randTarget = rand() % 2 + 1;
if (randTarget = 1)
{
    w.DoDamage(c1.healthPoints, w.Damage);
    if (c1.healthPoints <= 0)
        c1.die();
}
else if (randTarget = 2)
{
    w.DoDamage(c1.healthPoints, w.Damage);
    if (c2.healthPoints <= 0)
        c2.die();
}
}

int main()
{
PlayerCharacter p1, p2;
EnemyCharacter e1, e2;
Weapon p1W = p1.currentWeapon;
Weapon p2W = p2.currentWeapon;
Weapon e1W = e1.currentWeapon;
Weapon e2W = e2.currentWeapon;

string enemyTarget, playerTarget;

p1.printCharacter();
p2.printCharacter();
e1.printCharacter();
e2.printCharacter();


while (true) 
{
    cout << "Player One. Choose your Target (1 or 2)" << endl;
    cin >> playerTarget;
    playerAttack(e1, e2, p1W, playerTarget);


    cout << "Enemy One Attacks" << endl;
    enemyAttack(p1, p2, e1W);

    cout << "Player Two. Choose your Target (1 or 2)" << endl;
    cin >> playerTarget;
    playerAttack(e1, e2, p2W, playerTarget);


    cout << "Enemy Two Attacks" << endl;
    enemyAttack(p1, p2, e2W);   
}

if (p1.isDead && p2.isDead)
    cout << "Game Over!" << endl;
else if (e1.isDead && e2.isDead)
    cout << "You Win!" << endl;

system("pause");
return 0;
}

武器.cpp

void Weapon::printWeapon() 
{
srand(time(NULL));
cout << "Weapon: " << WeaponType[randomName] << endl;;
cout << "Type: " << object->WeaponName[randomType] << endl;
cout << "Damage: " << Damage << endl;;
}
int Weapon::DoDamage(int health, int damage) 
{
int resultHealth = health - damage;

cout << "Damage - " << damage << endl;
cout << "Health: " << resultHealth << endl << endl;
health = resultHealth;
return health;
}

Character.cpp(玩家角色和敌人角色的基类)

Character::Character()
{
srand(time(NULL));
populatePosition(3);
}

void Character::printCharacter() 
{
srand(time(NULL));
healthPoints = rand() % 100;



cout << "Enter First Name" << endl;
cin >> firstName;
cout << "Enter Last Name" << endl;
cin >> lastName;
cout << endl;
cout << firstName << " " << lastName << ": " << endl;
cout << "Health: " << healthPoints << endl;
cout << "Position: "<<endl;

for (auto p:position) 
{   
    cout << p << ", " << endl;
}
cout << endl;

}

void Character::populatePosition(int vectorSize) 
{
for (int i = 0; i < vectorSize; i++) 
{
    f = rand() % 20;
    position.push_back(f);
}
}

void Character::die()
{
cout << firstName << " " << lastName << " is dead " << endl << endl;
isDead = true;
}
埃文

问题是 DoDamage 从不更新其范围之外的任何内容。您按值传递健康,因此 DoDamage 的结果永远不会被使用。您也没有捕获返回值的结果,该结果也可用于更新值。

要解决它,要么 A,使 DoDamage 的健康参数通过引用传递

int Weapon::DoDamage(int & health, int damage) 
{
int resultHealth = health - damage;

cout << "Damage - " << damage << endl;
cout << "Health: " << resultHealth << endl << endl;
health = resultHealth;
return health;
}

引用基本上就像指向数据的指针,但您不必记得取消引用它们,编译器会为您记住这一点。您只需要记住传入的值与您正在使用的值位于同一地址。

或者B,使用返回的值在攻击函数中重新分配角色的健康点。

例如:

w.DoDamage(c1.healthPoints, w.Damage);

可能看起来像:

c1.healthPoints = w.DoDamage(c1.healthPoints, w.Damage);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

dplyr分组依据,将值从上一个分组结转到下一个

创建新列并将值从上一个组结转到下一个

我如何转到RPGLE中的循环中的下一个元素?

如何使用 for 循环转到列表中的下一个值?

解压缩空文件时如何循环函数转到下一个对象?

Swift 如何跳转到下一个 uitextfield

如何跳转到下一个 TODO 存根?

Jquery 测验 - 如何转到下一个问题?

如何将向量中的元素块定义为零并循环下一个块?

如何创建循环,或者如何将前一个 SELECT 语句的结果用于下一个 SELECT 语句?

如何将两个参数传递给下一个ViewController?

如何跳转到GIT difftool中的下一个/上一个差异?

转到基于范围的for循环中的下一个迭代器

R for循环跳转到下一个迭代

在JavaScript forEach循环中转到“下一个”迭代

在Java中的For循环中转到下一个迭代

VBA:使用INDEX MATCH循环不会转到下一个值

VBA错误处理转到下一个循环而不是继续

如果条件为false,则转到For-Each循环中的下一个对象

跳转到for循环Cuda中的下一个块

如何检查for循环中的下一个迭代?

如何使用if下一个条件将for循环结果存储到数据帧

如何将DHCP功能转发到下一个路由器?

如何将Streams Prev元素结果传递给下一个

GraphQL-如何将返回值用作下一个查询的变量?

如何将捕获的/画廊图像传递给android中的下一个活动

`forever`:如何将信息转发到下一个迭代?

如何将省略的参数传递给下一个函数?

如何将逗号分隔的列表作为下一个命令的参数