第二次团队作业

在这次作业中,要求将上次的类补充完整,主要是根据上次的框架实现具体功能,在这次的类里,添加了对移动方法的重载,有参的是一步步走,而无参的供英雄死亡是调用,直接回到泉水处,然后技能的释放,我在这里只做了对技能是否符合释放条件进行判断,成功释放就返回技能名称(我以数字代表第n个技能),还有结束技能的释放,然后再有主函数调用距离判断函数,判断是否需要调用英雄受到攻击或增益的函数(这个由其他队员实现);还有就是刚刚提到的英雄受到攻击或增益的函数,根据传入的技能,改变自身状态;此外还有英雄升级的函数,这个我只写了属性的改变,然后为了便于主函数判断该调用谁的升级函数,还需根据写小兵的队员协商,进行调整。(目前团队只考虑了每个人的分工,以及在如何实现上机进行了商讨,如何使这几个类互相配合,将在之后进行)

struct Position
{
    int x,y;
};
class Hero
{
    private:
    float blood,hurt,bloodmax,speed,hurtspeed;//血,攻击,血上限,移速,攻速 
    int rank;//等级 
    int cd[6]={0};//冷却中1
    int experience;//经验 
    Position p;//位置 
    string name;//英雄名称 
    public:
    Hero(string n)//根据英雄名字对其属性进行初始化工作 
    {
        name=n;
        if(name=="lianpo")
        {
            bloodmax=3165;
            blood=3165;
            hurt=161;
            speed=1;
        }
        else if(name=="xiaoqiao")
        {
            bloodmax=2497;
            blood=2437;
            hurt=151;
            speed=2;
        }
        else if(name=="houyi")
        {
            bloodmax=2728;
            blood=2728;
            hurt=171;
            speed=1;
        }
        else if(name=="liubang")
        {
            bloodmax=3369;
            blood=3369;
            hurt=158;
            speed=1;
        }
        else if(name=="sunwukong")
        {
            bloodmax=2876;
            blood=2876;
            hurt=167;
            speed=2;
        }
        else if(name=="sunshangxiang")
        {
            bloodmax=2604;
            blood=2604;
            hurt=171;
            speed=1;
        }
        p.x=2;
        p.y=0;
        rank=1;
        experience=0;
        hurtspeed=1;
    }
    Position move()//如果英雄死亡就调用这个函数直接回到泉水处
    {
        p.x=2;
        p.y=0;
        return p;
    }
    Position move(char c)//输入移动方向,英雄移动并返回移动后的位置 
    {
        if(c=='N')
        {
            p.y++;
        }
        else if(c=='S')
        {
            p.y--;
        }
        else if(c=='W')
        {
            p.x--;
        }
        else if(c=='E')
        {
            p.x++;
        }
        return p;
    }
    int statechange(int k,int h=0)// 血,移速等改变,如果是普通攻击就再传入攻击值 
    {
        
        if(k==0)//普攻
        {
            blood=blood-h;
            if(blood<=0)
            {
                blood=0;
                move();
                return 0;//角色死亡 
            }
        } 
        else if(k==3)//技能3 
        {
            blood=blood-0.12*(bloodmax-blood);
            if(blood<=0)
            {
                blood=0;
                move();
                return 0;
            }
        }
        else if(k==6)
        {
            blood=blood+0.4*(bloodmax-blood);
        }
        else if(k==4)
        {
            hurt=hurt*1.3;
            hurtspeed=hurtspeed*1.6;
        }
        else if(k==5)
        {
            speed=speed*1.3;
        }
        return 1;
    }
    void skillcd(int k)//技能冷却时间到 
    {
        for(int i=1;i<=6;i++)
        {
            if(k==i)
            {
                cd[i]=0;
            }
        }
    }
    int skill(int s,int t=0)//技能释放或结束效果 
    {
        if(s==4&&t!=0)
        {
            hurt=hurt/1.3;
            hurtspeed=hurtspeed/1.6;
        }
        else if(s==5&&t!=0)
        {
            speed=speed/1.3;
        }
        else if(s==1&&rank>=1&&cd[1]==0)
        {
            cd[1]=1;
            return 1;
        }
        else if(s==2&&rank>=3&&cd[2]==0)
        {
            cd[2]=1;
            return 2;
        }
        else if(s==3&&rank>=3&&cd[3]==0)
        {
            cd[3]=1;
            return 3;
        }
        else if(s==4&&rank>=5&&cd[4]==0)
        {
            cd[4]=1;
            return 4;
        }
        else if(s==5&&rank>=7&&cd[5]==0)
        {
            cd[5]=1;
            return 5;
        }
        else if(s==6&&rank>=9&&cd[6]==0)
        {
            cd[6]=1;
            return 6;
        }
        return 0;//如果技能未成功释放或是技能结束释放就返回0 
    }
    void rankdevelop(int k)//kill hero 1,soldier 0,等级提升 
    {
        if(k==1)
        {
            experience+=20;
            if(experience>=rank*100)
            {
                rank++;
                bloodmax=1.05*bloodmax;
                blood=bloodmax;
                hurt=1.05*hurt;
            }
            blood=blood+10;
            if(blood>bloodmax)
            {
                blood=bloodmax;
            }
        }
        else
        {
            experience+=10;
            if(experience>=rank*100)
            {
                rank++;
                bloodmax=1.05*bloodmax;
                blood=bloodmax;
                hurt=1.05*hurt;
            }
            blood=blood+5;
            if(blood>bloodmax)
            {
                blood=bloodmax;
            }
        }
    }
    int distance(Position p0)//对英雄生效的技能范围都是5 
    {
        if(abs(p0.x-x)<5&&abs(p0.y-y)<5)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    Position getposition()
    {
        return p;
    }
    float getblood()
    {
        return blood;
    }
    float getbloodmax
    {
        return bloodmax;
    }
    int getrank()
    {
        return rank;
    }
    float getspeed()
    {
        return speed;
    }
    float gethurtspeed()
    {
        return hurtspeed;
    }
};

转载于:https://www.cnblogs.com/wzxzx/p/9199172.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值