Я делаю игру, и у меня возникает проблема с тем, что значение класса, которое устанавливается, остается установленным и не возвращается к стандартным значениям конструктора. Я попытался найти что-то, связанное с моей проблемой, но я его не нашел, поэтому прошу прощения, если это повторение.C++ функция устанавливает класс varaibles, не сохраняя новое заданное значение.
void playerCombat(Hero hero, Enemy enemy, Item heroWeapon, Item enemyWeapon, Item heroArmor, Item enemyArmor)
{
int hp = 0;
int damage = 0;
if (heroWeapon.getType() == "Slice" && enemyArmor.getType() == "Light")
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack() * 2);
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << " missed." << endl;
}
}
else if (heroWeapon.getType() == "Stab" && enemyArmor.getType() == "Medium")
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack() * 2);
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << " missed." << endl;
}
}
else if (heroWeapon.getType() == "Blunt" && enemyArmor.getType() == "Heavy")
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack() * 2);
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << " missed." << endl;
}
}
else if (heroWeapon.getType() == "Sword" && enemyArmor.getType() == "Medium")
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack() * .5);
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << "'s weapon was ineffective." << endl;
}
}
else if (heroWeapon.getType() == "Stab" && enemyArmor.getType() == "Heavy")
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack() * .5);
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << "'s weapon was ineffective." << endl;
}
}
else if (heroWeapon.getType() == "Blunt" && enemyArmor.getType() == "Light")
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack() * .5);
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << " missed." << endl;
}
}
else
{
damage = -enemyArmor.getDefense() - enemy.getDefense() + (rand() % 20 + 1) + (hero.getAttack());
if (damage > 0)
{
hp = (enemy.getHP() - damage);
enemy.setHp(hp);
}
else
{
damage = 0;
cout << hero.getName() << "'s weapon was ineffective." << endl;
}
}
cout << hero.getName() << " deals " << damage << " points of damage to " << enemy.getName() << "." << endl;
cout << enemy.getName() << " has " << enemy.getHP() << " out of " << enemy.getMaxHp() << "." << endl;
cout << hero.getName() << " has " << hero.getHP() << " out of " << hero.getMaxHp() << "." << endl;
system("pause");
}
void enemyCombat(Hero hero, Enemy enemy, Item heroWeapon, Item enemyWeapon, Item heroArmor, Item enemyArmor)
{
int hp = 0;
int damage = 0;
if (enemyWeapon.getType() == "Slice" && heroArmor.getType() == "Light")
{
damage = (rand() % 20 + 1) + (enemy.getAttack() * 2) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << " missed" << endl;
}
}
else if (enemyWeapon.getType() == "Stab" && heroArmor.getType() == "Medium")
{
damage = (rand() % 20 + 1) + (enemy.getAttack() * 2) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << " missed" << endl;
}
}
else if (enemyWeapon.getType() == "Blunt" && heroArmor.getType() == "Heavy")
{
damage = (rand() % 20 + 1) + (enemy.getAttack() * 2) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << " missed" << endl;
}
}
else if (enemyWeapon.getType() == "Sword" && heroArmor.getType() == "Medium")
{
damage = (rand() % 20 + 1) + (enemy.getAttack() * .5) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << "'s attack was ineffective." << endl;
}
}
else if (enemyWeapon.getType() == "Stab" && heroArmor.getType() == "Heavy")
{
damage = (rand() % 20 + 1) + (enemy.getAttack() * .5) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << "'s attack was ineffective." << endl;
}
}
else if (enemyWeapon.getType() == "Blunt" && heroArmor.getType() == "Light")
{
damage = (rand() % 20 + 1) + (enemy.getAttack() * .5) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << "'s attack was ineffective." << endl;
}
}
else
{
damage = (rand() % 20 + 1) + (enemy.getAttack()) - enemyArmor.getDefense() - enemy.getDefense();
if (damage > 0)
{
hp = (hero.getHP() - damage);
hero.setHp(hp);
}
else
{
damage = 0;
cout << enemy.getName() << "' missed." << endl;
}
}
cout << enemy.getName() << " deals " << damage << " points of damage to " << hero.getName() << "." << endl;
cout << enemy.getName() << " has " << enemy.getHP() << " out of " << enemy.getMaxHp() << "." << endl;
cout << hero.getName() << " has " << hero.getHP() << " out of " << hero.getMaxHp() << "." << endl;
system("pause");
}
void combat(Hero hero, Enemy enemy, Item heroWeapon, Item enemyWeapon, Item heroArmor, Item enemyArmor)
{
if (hero.getSpeed() > enemy.getSpeed())
{
playerCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
enemyCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
}
else if (hero.getSpeed() < enemy.getSpeed())
{
playerCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
enemyCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
}
else
{
if ((rand() % 2 + 1) == 1)
{
playerCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
enemyCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
}
else
{
playerCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
enemyCombat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
}
cout << hero.getHP() << endl << enemy.getHP() << endl;
}
if (enemy.getHP() < 0)
{
cout << "You lose!";
}
else if (hero.getHP() < 0)
{
cout << "You win!";
}
else
{
combat(hero, enemy, heroWeapon, enemyWeapon, heroArmor, enemyArmor);
}
}
По какой-то причине после функций для конкретного символов конца боя, он не сохраняет новое значение HP, а просто сбрасывает его обратно свои полные л.с. (в данном случае 100)
Не могли бы вы уменьшить это до [MCVE], и более конкретно, что на самом деле происходит неправильно. –