重新初始化矢量值

时间:2016-08-22 03:03:40

标签: c++

我有班级敌人:

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
}

我需要在每次战斗中重新初始化敌人的价值观。

2 个答案:

答案 0 :(得分:0)

没有太多可以继续的,但这里有一些提示。

  1. 您可以将std::vector本地设为Game::Fight()

    void Game::Fight()
    {
        std::vector<Enemy> e = { {"Skeleton",1,2,3,4} };
        //...
    }
    
  2. 您可以将其作为成员对象保留并在将敌人放入其中之前将其清除:

    void Game::Fight()
    {
        e.clear();
        e.push_back({"Skeleton",1,2,3,4});
        //...
    }
    
  3. 你可以重新分配它,这与上面的基本相同:

    void Game::Fight()
    {
        e = { {"Skeleton",1,2,3,4} };
        //...
    }
    
  4. 你可以修改那里的当前敌人,但你必须先在某处添加敌人,也许在构造函数中:

    void Game::Fight()
    {
        e[0].hp = 100;
        //...
    }
    
  5. 您可以通过添加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);
  }