c++学习:多态案例之魔法门英雄无敌

题目

游戏:魔法门之英雄无敌
游戏中有很多种怪物,每种怪物都有一个类与之对应,每个怪物就是一个对象
类: 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);
   
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值