zoukankan      html  css  js  c++  java
  • 第二次团队作业

    在这次作业中,要求将上次的类补充完整,主要是根据上次的框架实现具体功能,在这次的类里,添加了对移动方法的重载,有参的是一步步走,而无参的供英雄死亡是调用,直接回到泉水处,然后技能的释放,我在这里只做了对技能是否符合释放条件进行判断,成功释放就返回技能名称(我以数字代表第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;
    	}
    };
    
  • 相关阅读:
    插值法——线性分段插值
    插值法——lagrange插值
    插值法——多项式插值
    方程求根——二分法
    插值法——三次样条插值
    方程求根——两种加速迭代法
    线性方程组的迭代解法——超松弛迭代法
    线性方程组的迭代解法——共轭梯度法
    线性方程组的迭代解法——最速下降法
    Essential COM学习体会
  • 原文地址:https://www.cnblogs.com/wzxzx/p/9199172.html
Copyright © 2011-2022 走看看