#include<iostream>
#include<string>
using namespace std;
class Clark;
class Ralf;
class Heidern;
class Clark
{
private:
int nPower;
int nLifeVaulue;
public:
Clark();
void Attack(Ralf *p);
void Attack(Heidern *p);
void Attack(Clark *p);
void Defend(Clark *p);
void Defend(Ralf *p);
void Defend(Heidern *p);
void Hurted(int nPower);
int GetLifeValue();
};
class Ralf
{
private:
int nPower;
int nLifeVaulue;
public:
Ralf();
void Attack(Ralf *p);
void Attack(Heidern *p);
void Attack(Clark *p);
void Defend(Clark *p);
void Defend(Ralf *p);
void Defend(Heidern *p);
void Hurted(int nPower);
int GetLifeValue();
};
class Heidern
{
private:
int nPower;
int nLifeVaulue;
public:
Heidern();
void Attack(Ralf *p);
void Attack(Heidern *p);
void Attack(Clark *p);
void Defend(Clark *p);
void Defend(Ralf *p);
void Defend(Heidern *p);
void Hurted(int nPower);
int GetLifeValue();
};
Clark::Clark()
{
cout << "正在初始化英雄,请输入初始生命值,单词攻击带给对方的伤害值" << endl;
cin >> nLifeVaulue >> nPower;
while (nPower <= 0 || nLifeVaulue <= 0)
{
if (nPower <= 0)
{
cout << "攻击伤害必须为正整数,请重新输入!";
cin >> nPower;
}
if (nLifeVaulue <= 0)
{
cout << "生命值必须为整数,请重新输入!";
cin >> nLifeVaulue;
}
}
cout << "初始化完成,准备战斗!" << endl << endl;
}
void Clark::Attack(Ralf *p)
{
cout << "Clark技能 召唤死灵" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Clark::Attack(Heidern *p)
{
cout << "Clark技能 召唤死灵" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Clark::Attack(Clark *p)
{
cout << "Clark技能 召唤死灵" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Clark::Defend(Clark *p)
{
if (nLifeVaulue > 0)
{
cout << "Clark反击技能 圆盾" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Clark::Defend(Ralf *p)
{
if (nLifeVaulue > 0)
{
cout << "Clark反击技能 圆盾" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Clark::Defend(Heidern *p)
{
if (nLifeVaulue > 0)
{
cout << "Clark反击技能 圆盾" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Clark::Hurted(int nPower)
{
nLifeVaulue -= nPower;
if (nLifeVaulue <= 0)
{
cout << "当前英雄死亡" << endl;
nLifeVaulue = 0;
}
else
cout << "受到伤害,生命值变为" << nLifeVaulue << endl;
}
int Clark::GetLifeValue()
{
return nLifeVaulue;
}
Ralf::Ralf()
{
cout << "正在初始化英雄,请输入初始生命值,单词攻击带给对方的伤害值" << endl;
cin >> nLifeVaulue >> nPower;
while (nPower <= 0 || nLifeVaulue <= 0)
{
if (nPower <= 0)
{
cout << "攻击伤害必须为正整数,请重新输入!";
cin >> nPower;
}
if (nLifeVaulue <= 0)
{
cout << "生命值必须为整数,请重新输入!";
cin >> nLifeVaulue;
}
}
cout << "初始化完成,准备战斗!" << endl << endl;
}
void Ralf::Attack(Clark *p)
{
cout << "Ralf技能 旋风攻击" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Ralf::Attack(Heidern *p)
{
cout << "Ralf技能 旋风攻击" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Ralf::Attack(Ralf *p)
{
cout << "Ralf技能 旋风攻击" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Ralf::Defend(Ralf *p)
{
if (nLifeVaulue > 0)
{
cout << "Ralf反击技能 天使庇护" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Ralf::Defend(Clark *p)
{
if (nLifeVaulue > 0)
{
cout << "Ralf反击技能 天使庇护" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Ralf::Defend(Heidern *p)
{
if (nLifeVaulue > 0)
{
cout << "Ralf反击技能 天使庇护" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Ralf::Hurted(int nPower)
{
nLifeVaulue -= nPower;
if (nLifeVaulue <= 0)
{
cout << "当前英雄死亡" << endl;
nLifeVaulue = 0;
}
else
cout << "受到伤害,生命值变为" << nLifeVaulue << endl;
}
int Ralf::GetLifeValue()
{
return nLifeVaulue;
}
Heidern::Heidern()
{
cout << "正在初始化英雄,请输入初始生命值,单词攻击带给对方的伤害值" << endl;
cin >> nLifeVaulue >> nPower;
while (nPower <= 0 || nLifeVaulue <= 0)
{
if (nPower <= 0)
{
cout << "攻击伤害必须为正整数,请重新输入!";
cin >> nPower;
}
if (nLifeVaulue <= 0)
{
cout << "生命值必须为整数,请重新输入!";
cin >> nLifeVaulue;
}
}
cout << "初始化完成,准备战斗!" << endl << endl;
}
void Heidern::Attack(Ralf *p)
{
cout << "Heidern技能 魔法球" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Heidern::Attack(Clark *p)
{
cout << "Heidern技能 魔法球" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Heidern::Attack(Heidern *p)
{
cout << "Heidern技能 魔法球" << endl;
p->Hurted(nPower);
p->Defend(this);
}
void Heidern::Defend(Heidern *p)
{
if (nLifeVaulue > 0)
{
cout << "Heidern反击技能 神圣光环" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Heidern::Defend(Ralf *p)
{
if (nLifeVaulue > 0)
{
cout << "Heidern反击技能 神圣光环" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Heidern::Defend(Clark *p)
{
if (nLifeVaulue > 0)
{
cout << "Heidern反击技能 神圣光环" << endl;
p->Hurted(nPower / 2);
}
else
;
}
void Heidern::Hurted(int nPower)
{
nLifeVaulue -= nPower;
if (nLifeVaulue <= 0)
{
cout << "当前英雄死亡" << endl;
nLifeVaulue = 0;
}
else
cout << "受到伤害,生命值变为" << nLifeVaulue << endl;
}
int Heidern::GetLifeValue()
{
return nLifeVaulue;
}
int startgame()
{
int n = 1, m = 1;
Clark *chero1=0;
Ralf *rhero1=0;
Heidern *hhero1=0;
Clark *chero2=0;
Ralf *rhero2=0;
Heidern *hhero2=0;
while (n)
{
cout << endl
<< "********** 开始创建英雄角色 **********" << endl
<< "********** 请选择第1战斗角色 **********" << endl
<< "********** 1 Clark **********" << endl
<< "********** 2 Ralf **********" << endl
<< "********** 3 Heidern **********" << endl
<< "********** 0 退出游戏 **********" << endl;
cin >> n;
if (n >= 0 && n < 4)
break;
}
switch (n)
{
case 0:
return 1;
case 1:
chero1 = new Clark;
break;
case 2:
rhero1 = new Ralf;
break;
case 3:
hhero1 = new Heidern;
break;
}
while (m)
{
cout << endl
<< "********** 开始创建英雄角色 **********" << endl
<< "********** 请选择第1战斗角色 **********" << endl
<< "********** 1 Clark **********" << endl
<< "********** 2 Ralf **********" << endl
<< "********** 3 Heidern **********" << endl
<< "********** 0 退出游戏 **********" << endl;
cin >> m;
if (m >= 0 && m < 4)
break;
}
switch (m)
{
case 0:
return 1;
case 1:
chero2 = new Clark;
break;
case 2:
rhero2 = new Ralf;
break;
case 3:
hhero2 = new Heidern;
break;
}
cout << endl
<< "********** 开始游戏 **********" << endl;
int fight = 1;
int fightnum = 1;
int LifeValue1 = 1, LifeValue2 = 1;
while (LifeValue1 > 0 && LifeValue2 > 0)
{
cout << endl
<< "***** 现在开始第" << fightnum << "轮战斗***** " << endl
<< "********** 请选择主动攻击方 **********" << endl
<< "********** 1 第1战斗角色 **********" << endl
<< "********** 2 第2战斗角色 **********" << endl
<< "********** 0 退出游戏 **********" << endl;
cin >> fight;
if (fight == 1)
{
cout << "玩家1开始进攻" << endl;
switch (n)
{
case 1:
switch (m)
{
case 1:
chero1->Attack(chero2);
LifeValue2 = chero2->GetLifeValue();
break;
case 2:
chero1->Attack(rhero2);
LifeValue2 = rhero2->GetLifeValue();
break;
case 3:
chero1->Attack(hhero2);
LifeValue2 = hhero2->GetLifeValue();
break;
}
LifeValue1 = chero1->GetLifeValue();
break;
case 2:
switch (m)
{
case 1:
rhero1->Attack(chero2);
LifeValue2 = chero2->GetLifeValue();
break;
case 2:
rhero1->Attack(rhero2);
LifeValue2 = rhero2->GetLifeValue();
break;
case 3:
rhero1->Attack(hhero2);
LifeValue2 = hhero2->GetLifeValue();
break;
}
LifeValue1 = rhero1->GetLifeValue();
break;
case 3:
switch (m)
{
case 1:
hhero1->Attack(chero2);
LifeValue2 = chero2->GetLifeValue();
break;
case 2:
hhero1->Attack(rhero2);
LifeValue2 = rhero2->GetLifeValue();
break;
case 3:
hhero1->Attack(hhero2);
LifeValue2 = hhero2->GetLifeValue();
break;
}
LifeValue1 = hhero1->GetLifeValue();
break;
}
}
else if (fight == 2)
{
cout << "玩家2开始攻击" << endl;
switch (m)
{
case 1:
switch (n)
{
case 1:
chero2->Attack(chero1);
LifeValue1 = chero1->GetLifeValue();
break;
case 2:
chero2->Attack(rhero1);
LifeValue1 = rhero1->GetLifeValue();
break;
case 3:
chero2->Attack(hhero1);
LifeValue1 = hhero1->GetLifeValue();
break;
}
LifeValue2 = chero2->GetLifeValue();
break;
case 2:
switch (n)
{
case 1:
rhero2->Attack(chero1);
LifeValue1 = chero1->GetLifeValue();
break;
case 2:
rhero2->Attack(rhero1);
LifeValue1 = rhero1->GetLifeValue();
break;
case 3:
rhero2->Attack(hhero1);
LifeValue1 = hhero1->GetLifeValue();
break;
}
LifeValue2 = rhero2->GetLifeValue();
break;
case 3:
switch (n)
{
case 1:
hhero2->Attack(chero1);
LifeValue1 = chero1->GetLifeValue();
break;
case 2:
hhero2->Attack(rhero1);
LifeValue1 = rhero1->GetLifeValue();
break;
case 3:
hhero2->Attack(hhero1);
LifeValue1 = hhero1->GetLifeValue();
break;
}
LifeValue2 = hhero2->GetLifeValue();
break;
}
}
else if (fight == 0)
{
cout << "异常结束游戏,没有输赢" << endl;
return 1;
}
cout << "**第 " << fightnum << " 轮战斗结束**" << endl
<< "玩家1生命值为" << LifeValue1 << endl
<< "玩家2生命值为" << LifeValue2 << endl << endl;
fightnum++;
}
cout << endl
<< "***************************************" << endl
<< "本局游戏结束,共进行" << fightnum << "次攻击" << endl
<< "本局游戏的胜利方是:";
if (LifeValue1 == 0)
cout << "游戏玩家2" << endl << endl;
else if (LifeValue2 == 0)
cout << "游戏玩家1" << endl << endl;
return 1;
}
int start()
{
int n = 1;
while (n)
{
cout << "****** 欢迎进入游戏,请选择操作 ******" << endl
<< "********** 0 开始选择英雄角色 *********" << endl
<< "********** 1 退出游戏 *********" << endl;
cin >> n;
switch (n)
{
case 0:
break;
case 1:
cout << "退出游戏,欢迎再来" << endl;
return 1;
default:
break;
}
}
n = 1;
while (n)
{
n = startgame();
cout << endl
<< "********** 请选择操作 *********" << endl
<< "********** 0 重新开始游戏 *********" << endl
<< "********** 1 退出游戏 *********" << endl;
cin >> n;
switch (n)
{
case 0:break;
case 1:
cout << "退出游戏,欢迎再来" << endl;
return 1;
default:
break;
}
}
}
int main()
{
start();
cout << "程序结束" << endl;
return 0;
}