在这次作业中,要求将上次的类补充完整,主要是根据上次的框架实现具体功能,在这次的类里,添加了对移动方法的重载,有参的是一步步走,而无参的供英雄死亡是调用,直接回到泉水处,然后技能的释放,我在这里只做了对技能是否符合释放条件进行判断,成功释放就返回技能名称(我以数字代表第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;
}
};