我正在制作一个巫师游戏原型,我遇到了一个问题:
我创建了一个名为Wizard的类和一个名为Goblin的类:
class Wizard
{
public:
int damage;
int health;
int stamina;
Wizard(int d, int h, int s)
{
d = damage;
h = health;
s = stamina;
}
float getDamage() { return damage; }
void setDamage(int v) { v = damage; }
float getHealth() { return health; }
void setHealth(int v) { v = health; }
float getStamina() { return stamina; }
void setStamina(float v) { v = stamina; }
};
class Goblin
{
public:
int health;
int damage;
Goblin(int h, int d)
{
h = health;
d = damage;
}
float getHealth() { return health; }
void setHealth(int v) { v = health; }
float getDamage() { return damage; }
void setDamage(int v) { v = damage; }
};然后,我为它们声明并初始化了变量:
Wizard wizard(50, 150, 10);
Goblin goblin(150, 25);然后,我创建了一个attack()函数:
void attack(Wizard attacker, Goblin target)
{
if(target.getDamage() > 0.0)
{
attacker.setStamina(attacker.getStamina() - 1);
}
}因此,在main函数中,我调用了attack并打印出结果:
int main()
{
attack(wizard, goblin);
printInfo();
return 0;
}但这就是结果:
> clang++-7 -pthread -std=c++17 -o main main.cpp
> ./main
Wizard Health: 0
Wizard Damage: 0
Wizard Stamina: 0
Goblin Damage: 0
Goblin Health: 0我还创建了一个printInfo()函数:
void printInfo()
{
std::cout << "Wizard Health: " << wizard.getHealth() << std::endl;
std::cout << "Wizard Damage: " << wizard.getDamage() << std::endl;
std::cout << "Wizard Stamina: " << wizard.getStamina() << std::endl;
std::cout << std::endl;
std::cout << "Goblin Damage: " << goblin.getHealth() << std::endl;
std::cout << "Goblin Health: " << goblin.getDamage() << std::endl;
}如果您需要的话,这里是完整的文件:
#include <iostream>
class Wizard
{
public:
int damage;
int health;
int stamina;
Wizard(int d, int h, int s)
{
d = damage;
h = health;
s = stamina;
}
float getDamage() { return damage; }
void setDamage(int v) { v = damage; }
float getHealth() { return health; }
void setHealth(int v) { v = health; }
float getStamina() { return stamina; }
void setStamina(float v) { v = stamina; }
};
class Goblin
{
public:
int health;
int damage;
Goblin(int h, int d)
{
h = health;
d = damage;
}
float getHealth() { return health; }
void setHealth(int v) { v = health; }
float getDamage() { return damage; }
void setDamage(int v) { v = damage; }
};
Wizard wizard(50, 150, 10);
Goblin goblin(150, 25);
void attack(Wizard attacker, Goblin target);
void printInfo();
int main()
{
attack(wizard, goblin);
printInfo();
return 0;
}
void attack(Wizard attacker, Goblin target)
{
if(target.getDamage() > 0.0)
{
attacker.setStamina(attacker.getStamina() - 1);
}
}
void printInfo()
{
std::cout << "Wizard Health: " << wizard.getHealth() << std::endl;
std::cout << "Wizard Damage: " << wizard.getDamage() << std::endl;
std::cout << "Wizard Stamina: " << wizard.getStamina() << std::endl;
std::cout << std::endl;
std::cout << "Goblin Damage: " << goblin.getHealth() << std::endl;
std::cout << "Goblin Health: " << goblin.getDamage() << std::endl;
}如果这篇文章太长了,很抱歉,但我们将非常感谢您的帮助。
发布于 2021-09-05 10:24:04
在构造函数和set*方法中,需要将输入参数值赋给类的成员变量。反之亦然。
#include <iostream>
class Wizard
{
public:
int damage;
int health;
int stamina;
Wizard(int d, int h, int s)
{
damage = d;
health = h;
stamina = s;
}
float getDamage() { return damage; }
void setDamage(int v) { damage = v; }
float getHealth() { return health; }
void setHealth(int v) { health = v; }
float getStamina() { return stamina; }
void setStamina(float v) { stamina = v; }
};
class Goblin
{
public:
int health;
int damage;
Goblin(int h, int d)
{
health = h;
damage = d;
}
float getHealth() { return health; }
void setHealth(int v) { health = v; }
float getDamage() { return damage; }
void setDamage(int v) { damage = v; }
};
Wizard wizard(50, 150, 10);
Goblin goblin(150, 25);
void attack(Wizard attacker, Goblin target);
void printInfo();
int main()
{
attack(wizard, goblin);
printInfo();
return 0;
}
void attack(Wizard attacker, Goblin target)
{
if(target.getDamage() > 0.0)
{
attacker.setStamina(attacker.getStamina() - 1);
}
}
void printInfo()
{
std::cout << "Wizard Health: " << wizard.getHealth() << std::endl;
std::cout << "Wizard Damage: " << wizard.getDamage() << std::endl;
std::cout << "Wizard Stamina: " << wizard.getStamina() << std::endl;
std::cout << std::endl;
std::cout << "Goblin Damage: " << goblin.getHealth() << std::endl;
std::cout << "Goblin Health: " << goblin.getDamage() << std::endl;
}发布于 2021-09-05 09:46:24
您的attack()函数按值接受参数。因此,它会修改全局变量的副本。
使用引用:
void attack(Wizard& attacker, Goblin& target)
{
...
}PS:另请参阅https://en.cppreference.com/w/cpp/language/constructor以了解成员初始值设定项列表
https://stackoverflow.com/questions/69062232
复制相似问题