用C++实现的一道面试大题-猫狗大战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/endeavor_he/article/details/71088458

#include <iostream>
using namespace std;


class Monster
{
public:
string m_name;
int m_hitpoint; //血量
int m_damage;   //
int m_defense;
public:
Monster(string name, int hitpoint, int damage, int defense)
{
m_name = name;
m_hitpoint = hitpoint;
m_damage = damage;
m_defense = defense;
}
virtual ~Monster(){}
virtual int attack(Monster& m) = 0;
void figth(Monster& m)
{
while(1)
{
int hit = (*this).attack(m);
m.m_hitpoint -= hit;
if(m.m_hitpoint <= 0)
{
cout<<m.m_name<<"被打死了"<<endl;
break;
}
m.attack(*this);
m_hitpoint -= hit;
if(m_hitpoint <= 0)
{
cout<<m.m_name<<"被打死了"<<endl;
break;
}
}
showResult();
m.showResult();
}
void showResult()
{
cout<<"==============================="<<endl;
cout<<"怪物名称:"<<m_name<<endl;
cout<<"生命值:"<<m_hitpoint<<endl;
cout<<"攻击能力:"<<m_damage<<endl;
cout<<"防御能力:"<<m_defense<<endl;
}
};


class Cat:public Monster
{
public:
Cat(string name, int hitpoint, int damage, int defense):
Monster(name, hitpoint, damage, defense){}
int attack(Monster& m)
{
int hit = m_damage*2-m.m_defense;
if(hit < 1) hit = 1;
return hit;
}
};


class Dog:public Monster
{
public:
Dog(string name, int hitpoint, int damage, int defense):
Monster(name, hitpoint, damage, defense){}
int attack(Monster& m)
{
int hit = (m_damage-m.m_defense+5)*2;
if(hit < 2) hit = 2;
return hit;
}
};


int main()
{
Cat cat("波斯猫", 500, 50, 20);
Dog dog("旺才", 600, 70, 15);
return 0;
}

猜你喜欢

转载自blog.csdn.net/endeavor_he/article/details/71088458