Это потому, что вы передаете структуры player
по значению.
Когда параметр передается по значению, копия вызывается в вызываемой функции.Поэтому любые изменения, внесенные в функцию, не влияют на оригинал.
Итак, ваше утверждение:
y.hp = y.hp - x.dmg;
влияет только на локальную копию x
и y
.Который выпадает из области видимости и выбрасывается после завершения функции.
Решение состоит в том, чтобы передать ссылку следующим образом:
void dealdamage(player &x, player &y){
В этом случае изменения вносятся в x
и y
повлияет на оригиналы.