【发布时间】:2021-09-05 09:44:06
【问题描述】:
我正在制作一个向导游戏原型,但遇到了一个问题:
我创建了一个名为 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);
}
}
所以,在主函数中,我调用了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;
}
很抱歉,如果这很长,但我们将不胜感激。
【问题讨论】:
-
在您将
h分配给health的构造函数中,它应该是相反的。其他领域也是如此。 -
在设置器中存在与 Raildex 提到的问题相同的问题。我习惯在成员变量前加上
m_,这可能有助于避免混淆。顺便说一句:为什么你的吸气剂返回float?成员变量具有 int 类型,setter 也采用int...