题目
游戏:魔法门之英雄无敌
游戏中有很多种怪物,每种怪物都有一个类与之对应,每个怪物就是一个对象
类: CSoldier CDragon CPhonex CAngel
怪物能够互相攻击,攻击敌人和被攻击时都有相应的动作,动作是通过对象的成员函数实现。
问题:游戏升级时,需要添加新的怪物–雷鸟,如何编程才能使得升级的时候代码改动和增加量较小 新增类:CThunderBird
1 为每个怪物编写 Attack FightBack和Hurted成员函数
2 Attack函数表示攻击动作,攻击某个怪物,并调用被攻击怪物的Hurted函数,以减少被攻击怪物的生命值,同时也调用被攻击怪物的FightBack成员函数,遭受被攻击怪物的反击
3 Hurted函数减少自身生命值,并表现受伤动作
4 FightBack成员函数表现反击动作,并调用被反击对象的Hurted成员函数,使得被反击对象受伤。
5 设置基类CCreature,并且使得CDragon,CWolf等其他类都从CCreature派生而来
代码块
非多态
//
// 非多态的实现方法
// 对于该程序,如果程序升级,增加了怪物雷鸟 CThunderBird,则程序变动较大
#include <iostream>
using namespace std;
class CCreature
{
protected: //派生类的成员函数可以访问当前对象的基类的保护成员
int nPower; // 代表攻击力
int nLifeValue; // 代表生命值
};
/**
* 问题:1 有n种怪物,CDragon类中就会有n个Attack成员函数,以及n个FightBack成员函数。对于其他类也是如此
* 2 对于该程序,如果程序升级,增加了怪物雷鸟 CThunderBird,则程序变动较大
* 3 所有的类都需要添加两个成员函数
* void Attack(CThunderBird* pThunderBird);
* void FightBack(CThunderBird* pThunderBird);
* 4 在怪物种类多的时候,工作量非常大
* */
class CDragon:public CCreature
{
public:
void Attack(CWolf* pWolf)
{
// ... 表现攻击动作的代码
pWolf->Hurted(nPower);