非多态简单格斗游戏

这里写图片描述

#include<iostream>
#include<string>
using namespace std;

class Clark;                //前向声明
class Ralf;                 //同上
class Heidern;              //同上

//******************************
//以下代码为clark英雄角色的类体部分

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();         //获取当前生命值

};

//*****************************************************
// Ralf角色的实现

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();         //获取当前生命值

};


//******************************************
//以下代码为Heidern角色的实现

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::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::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::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;
}

//步骤三====================================================================

//void start()
//{
//  //开始战斗吧
//  cout << "游戏开始" << endl;
//  Ralf r;
//  Heidern h;
//  Clark c;
//  r.Attack(&c);
//  c.Attack(&h);
//  h.Attack(&r);
//}
//

//==========================================================================

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)                                       //  开始创建英雄角色,第1战斗角色
    {
        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;
    }

    //创建第2战斗角色
    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;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值