class actor//基类{ protected: int m_iHealth; const int m_iSpeed;//为了方便,这个值使用延时值,越大表示速度越慢 const int m_iHitPoint; char m_strName[260]; public: actor(const char* strName,const int iHealth,const int iSpeed,const int iHitpoint); int& Health(){ return m_iHealth; }; const char* getName(){ return m_strName; }; virtual void hit(actor *Actor) = 0; bool isAlive(); }; actor::actor(const char* strName,const int iHealth,const int iSpeed,const int iHitpoint):m_iHealth(iHealth),m_iSpeed(iSpeed),m_iHitPoint(iHitpoint){ strcpy(m_strName,strName);}bool actor::isAlive(){ return (m_iHealth>0);}///////////////////////////////////////////////////////////类fighterclass fighter :public actor{ public: fighter(const char* strName); virtual void hit(actor *Actor); private:};fighter::fighter(const char* strName):actor(strName,100,20,20){}void fighter::hit(actor *Actor){ Sleep(m_iSpeed); if(!isAlive()) { return ; } if(Actor&&Actor->isAlive()) { //这里我们用一个函数做了左值,因为函数返回的是引用 if(isAlive()) Actor->Health() = Actor->Health() - m_iHitPoint; }}///////////////////////////////////////////////////////////类knightclass knight :public actor{ public: knight(const char* strName); virtual void hit(actor *Actor); private:};knight::knight(const char* strName):actor(strName,150,20,25){}void knight::hit(actor *Actor){ Sleep(m_iSpeed); if(!isAlive()) { return ; } if(Actor&&Actor->isAlive()) { if(isAlive()) Actor->Health() = Actor->Health() - m_iHitPoint; }}///////////////////////////////////////////////////////////类warriorclass warrior :public actor{ public: warrior(const char* strName); virtual void hit(actor *Actor); private:};warrior::warrior(const char* strName):actor(strName,150,20,25){}void warrior::hit(actor *Actor){ Sleep(m_iSpeed); if(!isAlive()) { return ; } if(Actor&&Actor->isAlive()) { if(isAlive()) Actor->Health() = Actor->Health() - m_iHitPoint; }} AOE3 STUDIO |