我有班级敌人:
class Enemy
{
Enemy();
Enemy(string n, int u, int v, int p, int vy);
~Enemy();
}
我有类游戏,我有一个名为fight()的方法;
class Game
{
public:
Game();
~Game();
void Fight();
private:
vector<Enemy> e;
}
void Game::Fight()
{
e.push_back(Enemy("Skeleton",1,2,3,4));
//code for displaying info about Enemy
//code for reducing hp
}
我需要在每次战斗中重新初始化敌人的价值观。
答案 0 :(得分:0)
没有太多可以继续的,但这里有一些提示。
您可以将std::vector
本地设为Game::Fight()
:
void Game::Fight()
{
std::vector<Enemy> e = { {"Skeleton",1,2,3,4} };
//...
}
您可以将其作为成员对象保留并在将敌人放入其中之前将其清除:
void Game::Fight()
{
e.clear();
e.push_back({"Skeleton",1,2,3,4});
//...
}
你可以重新分配它,这与上面的基本相同:
void Game::Fight()
{
e = { {"Skeleton",1,2,3,4} };
//...
}
你可以修改那里的当前敌人,但你必须先在某处添加敌人,也许在构造函数中:
void Game::Fight()
{
e[0].hp = 100;
//...
}
您可以通过添加Enemy::reset()
要求敌人重置。此函数将重置hp,mp等:
void Game::Fight()
{
e[0].reset();
// ...
}
答案 1 :(得分:0)
您的代码(当前发布的代码)无法编译。缺失包括,缺少分号和其他一些东西。您应该只提交编译并重现您试图理解的问题的代码。
关于你努力猜测你前进的方向,关于你的努力的信息仍然太少。我的想象力通常是让我失望的第一件事。我的思维阅读能力也很慢。
但我有矢量和一些调试样式输出的经验(你 当他们发出太多噪音时会想要评论。)
这是一个可以模仿这个早期代码的东西。虽然它编译并“运行”,但我认为它不能回答你的任何具体问题。但也许它表明你需要在你的向量中考虑你想要的东西。例如,“副本”会导致调用ctors和dtors,如果你的游戏在游戏过程中创造了更多,这可能会影响性能,但在启动和关闭期间可能没问题。
class Enemy
{
static int M_id;
int m_id;
std::string m_s;
public:
Enemy() : m_id(++M_id)
{
std::cout << "ctor Enemy() [empty]" << m_id << std::endl;
};
Enemy(std::string n, int u, int v, int p, int vy) :
m_id(++M_id) // default m_s ok
{
std::stringstream ss;
ss << "ctor Enemy: " << m_id << " " << n
<< " " << u << " " << v << " " << p << " " << vy;
m_s = ss.str();
};
~Enemy()
{
std::cout << "dtor ~Enemy() " << std::endl;
};
std::string show()
{
std::string s ("Enemy show() E: ");
s += m_s;
return (s);
}
};
int Enemy::M_id = 0;
class Game
{
public:
Game() // default ctor e is ok
{
e.reserve(100);
std::cout << "\n\nctor Game()" << std::endl;
};
~Game()
{
std::cout << "dtor !Game()" << std::endl;
};
void Fight(int p4)
{
e.push_back(Enemy("Skeleton",1,2,3,p4));
//code for displaying info about Enemy
//code for reducing hp
}
std::string show()
{
std::stringstream ss;
ss << " Game.show() e.size() = " << e.size() << "\n";
for (auto el : e)
{
ss << el.show() << "\n";
}
return (ss.str());
}
private:
std::vector<Enemy> e;
};
int t423(void)
{
{
Game g1;
std::cout << "\ng1.show(): " << g1.show() << std::endl;
g1.Fight(11);
std::cout << "\ng1.show(): " << g1.show() << std::endl;
g1.Fight(12);
std::cout << "\ng1.show(): " << g1.show() << std::endl;
g1.Fight(13);
std::cout << "\ng1.show(): " << g1.show() << std::endl;
std::cout << "\n --- leaving scope (of g1) " << std::endl;
}
std::cout << "\n --- triggers g1 and vector dtors (which triggers Enemy dtors)" << std::endl;
return(0);
}