第二次团队作业

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