加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

手写的自动格斗游戏代码

(2018-06-07 12:13:31)
标签:

it

分类: C加加
。。。其实写很差,但是放在这边公示以及保存吧。
#pragma once
#include
#include
#include
using namespace std;
class CRole
{
public:
    CRole(int a,int b,int c,int d,int e,int f)      //构造函数
    {
        face = a;
        HP = b;
        ATK = c;
        DEF = d;
        Lv = e;
        EXP = f;
    };
    ~CRole()
    {

    }
    void weapon(int i);
    void jump();
    int ATK;
    int HP;
    int DEF;
    int face;
    int Lv;
    int EXP;
private:

};
void CRole::weapon(int i)    //定义3种级别武器,i表示级别,如果人物装备武器,则根据武器等级增加攻击力
{
    if (i == 1) ATK = ATK + 1;
    if (i == 2) ATK = ATK + 2;
    if (i == 3) ATK = ATK + 2;
};
void CRole::jump()     //暂定jump为每回合受到攻击时rand一个随机数,如果随机数低于预设jump值触发jump,闪躲攻击,但该功能暂未实现
{

};                      //

class Chero:public CRole
{
public:
    Chero(int a, int b, int c, int d, int e, int f,int g,int h,int i,int j):CRole(a, b, c, d, e, f)       //构造函数
    {
        kickpoint = g;
        throwpoint = h;
        currentexp = i;
        needexp = j;
    };
    ~Chero()
    {

    };
    void kick();  //脚踢
    void holdthenthrow();  //抱摔
//关于技能,设定战斗一回合只能攻击一次,默认是普通攻击,但每次攻击时对技能发动判定,成功则技能生效,普攻改为技能攻击。如果两个技能都判定成功优先使用更高伤害的技能
    int kickpoint;  //脚踢触发几率,战斗时轮到攻击时进行判定,随机产生一个点数,如果点数低于触发几率值触发技能
    int throwpoint;  //抱摔触发几率,跟脚踢一样,下面敌人技能机制也是如此。
    int currentexp;      //当前累积经验值
    int needexp;         //升级需要经验值
private:

};
void Chero::kick()
{
    ATK = 25;
};
void Chero::holdthenthrow()
{
    ATK = 30;
}
class CEnemy :public CRole
{
public:
    CEnemy(int a, int b, int c, int d, int e, int f, int g,int h) :CRole(a, b, c, d, e, f)
    {
        slappoint = g;
        twickpoint = h;
    };
    ~CEnemy()
    {
        CRole::~CRole();
    };
    void slap();  //劈掌
    void twicekick();  //连环腿
    int slappoint;
    int twickpoint;
private:

};
void CEnemy::slap()
{
    ATK = 20;
};
void CEnemy::twicekick()
{
    ATK = 25;
}

class Cbattle     //battle类作为战斗统计,统计胜场,击杀的不同类型的敌人数量
{
public:
    Cbattle(int a,int b,int c,int d)
    {
        win = a;
        killA = b;
        killB = c;
        killC = d;
    }
    ~Cbattle()
    {

    }
    int win;   //定义战斗胜利次数
    int killA; //杀死敌人A次数
    int killB; //杀死敌人B次数
    int killC; //杀死敌人C次数
private:
};

int fight(Chero x1, CEnemy x2 ,Cbattle x3)
{
    int z, s, i, j, q = 0;
    s = 0;
    int a[6];
    a[0] = x1.ATK;
    a[1] = x2.ATK;
    i = rand() % 2;  //决定先手
    if (i == 1)
    {
        cout << "你先攻" << endl;
        system("pause");
    }
    if (i == 0)
    {
        cout << "敌人先攻" << endl;
        system("pause");
    }
    while (q == 0)
    {
        if (i == 1)
        {
            j = rand() % 101;
            if (x1.kickpoint > j) a[2] = 1;
            if (x1.throwpoint > j) a[3] = 1;
            if (a[2] == 1 && a[3] == 0)
            {
                x1.kick();
                x2.HP = x2.HP +x2.DEF - x1.ATK;
                cout << "你使用了踢腿,攻击力25点" << endl;
                x1.ATK = a[0];      //重置攻击力,使得攻击完后角色的攻击力变回基础攻击力而非技能攻击力
            }
            if (a[2] == 0 && a[3] == 1)
            {
                x1.holdthenthrow();
                x2.HP = x2.HP +x2.DEF - x1.ATK;
                cout << "你使用了抱摔,攻击力30点" << endl;
                x1.ATK = a[0];
            }
            if (a[2] == 1 && a[3] == 1)
            {
                x1.holdthenthrow();
                x2.HP = x2.HP + x2.DEF - x1.ATK;
                cout << "你使用了抱摔,攻击力30点" << endl;
                x1.ATK = a[0];
            }
            if (a[2] == 0 && a[3] == 0)
            {
                x2.HP = x2.HP + x2.DEF - x1.ATK;
                cout << "你攻击了敌人,攻击力16点" << endl;
                x1.ATK = a[0];
            }
            i = 0;
            a[2] = a[3] = 0;
        }
        if (x2.HP <= 0)
        {
            z = 1;
            cout << "敌人死了" << endl;
            break;
        }
        if (i == 0)
        {
            j = rand() % 101;
            if (x2.slappoint > j) a[4] = 1;
            if (x2.twickpoint > j) a[5] = 1;
            if (a[4] == 1 && a[5] == 0)
            {
                x2.slap();
                x1.HP = x1.HP + x1.DEF - x2.ATK;
                cout << "敌人发动攻击,攻击力" << x2.ATK << "点" << endl;
                x2.ATK = a[1];
            }
            if (a[4] == 0 && a[5] == 1)
            {
                x2.twicekick();
                x1.HP = x1.HP + x1.DEF - x2.ATK;
                cout << "敌人发动攻击,攻击力" << x2.ATK << "点" << endl;
                x2.ATK = a[1];
            }
            if (a[4] == 1 && a[5] == 1)
            {
                x2.twicekick();
                x1.HP = x1.HP + x1.DEF - x2.ATK;
                cout << "敌人发动攻击,攻击力" << x2.ATK << "点" << endl;
                x2.ATK = a[1];
            }
            if (a[4] == 0 && a[5] == 0)
            {
                x1.HP = x1.HP + x1.DEF - x2.ATK;
                cout << "敌人发动攻击,攻击力" << x2.ATK << "点"<<endl;
                x2.ATK = a[1];
            }
            i = 1;
            a[4] = a[5] = 0;
        }
        if (x1.HP <= 0)
        {
            z = 0;
            cout << "你死了" << endl;
            break;
        }
        cout << "你当前HP:" << x1.HP << endl;
        cout << "敌人当前HP:" << x2.HP << endl;
        system("pause");
    }

    return z;

}
int main()
{
    int i,j,q,z=0;
    Chero lixi(1, 100, 15, 5, 1, 0, 25, 15, 0, 100);
    Cbattle lixi1(0, 0, 0, 0);
    lixi.weapon(1);
    CEnemy A(2, 100, 5, 0, 1, 10, 10, 5);
    CEnemy B(3, 100, 10, 5, 2, 15, 15, 5);
    CEnemy C(4, 100, 15, 10, 3, 25, 15, 10);
    while (z = 1)
    {
        i = rand() % 4 + 1;  //生成一个1~3的随机数,决定对手
        if (i == 1)
        {
            cout << "你将要跟A战斗" << endl;
            system("pause");
            z=fight(lixi,A,lixi1);
        }
        if (i == 2)
        {
            cout << "你将要跟B战斗" << endl;
            system("pause");
            z=fight(lixi, B,lixi1);
        }
        if (i == 3)
        {
            cout << "你将要跟C战斗" << endl;
            system("pause");
            z=fight(lixi, C,lixi1);
        }
        if (z == 1)
        {
           
            lixi1.win++;
            if (i == 1)
            {
                lixi1.killA++;
                lixi.currentexp = lixi.currentexp + A.EXP;
            }
            if (i == 2)
            {
                lixi1.killB++;
                lixi.currentexp = lixi.currentexp + C.EXP;
            }
            if (i == 3)
            {
                lixi1.killC++;
                lixi.currentexp = lixi.currentexp + C.EXP;
            }
            if (lixi.currentexp >= lixi.needexp)
            {
                lixi.Lv++;
                lixi.currentexp = lixi.currentexp - lixi.needexp;
                lixi.needexp = lixi.needexp + 100;      //每升1级,再次升级升级所需经验+100
                cout << "你升级了,当前等级为" << lixi.Lv << endl;
                cout << "你当前的战绩:" << endl;
                cout << "胜场:" << lixi1.win << endl;
                cout << "击杀A次数:" << lixi1.killA << endl;
                cout << "击杀B次数:" << lixi1.killB << endl;
                cout << "击杀C次数:" << lixi1.killC << endl;
                system("pause");
            }
            cout << "你战胜了对手,是否继续?回1继续,回其他数字结束" << endl;
            cin >> j;
            if (j == 1) continue;
            else break;
        }
        if (z == 0)
        {
            cout << "你被打败了!" << endl;
            break;
        }
    }
    system("pause");
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有