欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

魔兽世界之二:装备

程序员文章站 2024-03-17 18:02:34
...
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;
 
class HeadQuarter
{
public:
	string weapons[3];
	char ctime[10];//时间
	string strHQName;//司令部名称
	int id;//司令部标志 0 red,1 blue
	int gid[5];//该司令部制造武士的顺序
	int ipos;//存储司令部当前需要制造哪个武士
	int itime;//时间,如果不能直接用武士总数量,则可以单独记一下
	int strengthnum;//该司令部的初始元气值
	
	int icemannum;
	int lionnum;
	int wolfnum;
	int ninjanum;
	int dragonnum;
	
	int icemansgh;
	int lionsgh;
	int wolfsgh;
	int ninjasgh;
	int dragonsgh;
 
	bool blIsStop;
	//获取该司令部的所有武士数量,用于时间显示(比小时数多1)
	int GetWarriorsNum()
	{
		return icemannum+lionnum+wolfnum+ninjanum+dragonnum;
	}
	
	//司令部 构造函数,初始生命元数目和红蓝标志
	HeadQuarter(int strengthnum1,int id)
	{
		strengthnum=strengthnum1;itime=0;icemannum=0;lionnum=0;
		wolfnum=0;ninjanum=0;dragonnum=0;
		id=id;//0 red;1 blue;
		if(id==0)
		{
			gid[0]=3;gid[1]=4;gid[2]=5;gid[3]=2;gid[4]=1;strHQName="red";
		}
		else
		{
			gid[0]=4;gid[1]=1;gid[2]=2;gid[3]=3;gid[4]=5;strHQName="blue";
		}
		ipos=0;
		blIsStop=false;
		weapons[0]="sword";
		weapons[1]="bomb";
		weapons[2]="arrow";
	}
 
	//初始化,每类武士生命初始值
	void InitSamuraVal(int v1,int v2,int v3,int v4,int v5)
	{
		dragonsgh=v1;ninjasgh=v2;icemansgh=v3;lionsgh=v4;wolfsgh=v5;
	}
 
	//制造单个武士
	bool MakeOneWarrior(int id)
	{
		int arrownum=0;
		float fmorale=0.0;
		switch(id)
		{
		case 1:
			if(strengthnum<dragonsgh)
				return false;
			strengthnum-=dragonsgh;
			dragonnum++;
			sprintf(ctime,"%03d",(GetWarriorsNum()-1));
			cout<<ctime<<" "<<strHQName<<" dragon "<<GetWarriorsNum()<<" born with strength "
				<<dragonsgh<<","<<dragonnum<<" dragon in "<<strHQName<<" headquarter"<<endl;
			fmorale=strengthnum/(dragonsgh*1.0);
			cout<<"It has a "<<weapons[GetWarriorsNum()%3]<<",and it's morale is "<<setiosflags(ios::fixed)<<setprecision(2)<<fmorale<<endl;
			break;
		case 2:
			if(strengthnum<ninjasgh)
				return false;
			strengthnum-=ninjasgh;
			ninjanum++;
			sprintf(ctime,"%03d",(GetWarriorsNum()-1));
			cout<<ctime<<" "<<strHQName<<" ninja "<<GetWarriorsNum()<<" born with strength "
				<<ninjasgh<<","<<ninjanum<<" ninja in "<<strHQName<<" headquarter"<<endl;
			cout<<"It has a "<<weapons[GetWarriorsNum()%3]<<" and a "<<weapons[(GetWarriorsNum()+1)%3]<<endl;
			break;
		case 3:
			if(strengthnum<icemansgh)
				return false;
			strengthnum-=icemansgh;
			icemannum++;
			sprintf(ctime,"%03d",(GetWarriorsNum()-1));
			cout<<ctime<<" "<<strHQName<<" iceman "<<GetWarriorsNum()<<" born with strength "
				<<icemansgh<<","<<icemannum<<" iceman in "<<strHQName<<" headquarter"<<endl;
			cout<<"It has a "<<weapons[GetWarriorsNum()%3]<<endl;
			break;
		case 4:
			if(strengthnum<lionsgh)
				return false;
			strengthnum-=lionsgh;
			lionnum++;
			sprintf(ctime,"%03d",(GetWarriorsNum()-1));
			cout<<ctime<<" "<<strHQName<<" lion "<<GetWarriorsNum()<<" born with strength "
				<<lionsgh<<","<<lionnum<<" lion in "<<strHQName<<" headquarter"<<endl;
			cout<<"It's loyalty is "<<strengthnum<<endl;
			break;
		case 5:
			if(strengthnum<wolfsgh)
				return false;
			strengthnum-=wolfsgh;
			wolfnum++;
			sprintf(ctime,"%03d",(GetWarriorsNum()-1));
			cout<<ctime<<" "<<strHQName<<" wolf "<<GetWarriorsNum()<<" born with strength "
				<<wolfsgh<<","<<wolfnum<<" wolf in "<<strHQName<<" headquarter"<<endl;
			break;
		default:
			break;
		}
		return true;
	}
	
	//判断该司令部是否还能够继续制造武士
	bool IsMakeEnable()
	{
		if((strengthnum<icemansgh)&&(strengthnum<lionsgh)&&(strengthnum<wolfsgh)&&(strengthnum<ninjasgh)&&(strengthnum<dragonsgh))
		{
			if(!blIsStop)
			{
				sprintf(ctime,"%03d",GetWarriorsNum());
				cout<<ctime<<" "<<strHQName<<" headquarter stops making warriors"<<endl;
				blIsStop=true;
			}
			return false;
		}
		else
		{
			return true;
		}
	}
 
	//制造武士,判断当前需要制造哪一类武士
	bool MakeWarrior()
	{
		if(ipos==5) ipos=0;
		if(MakeOneWarrior(gid[ipos]))
		{	
			ipos++;
			return true;
		}
		else
		{
			ipos++;
			return false;
		}
	}
};
 
int main()
{
	//存储所有组的测试数据
	int linenum=0,icaseid=1;
	cin>>linenum;
	vector< vector<int> >vecwarriors;
	while((linenum--)>0)
	{
		vector<int> vectemp;
		for(int i=0;i<6;i++)
		{
			int a=0;
			cin>>a;
			vectemp.push_back(a);
		}
		vecwarriors.push_back(vectemp);
	}
	
	//对每组测试数据进行计算输出
	for(int j=0;j<vecwarriors.size();j++)
	{
		cout<<"Case:"<<icaseid<<endl;
		icaseid++;
		HeadQuarter red(vecwarriors[j][0],0),blue(vecwarriors[j][0],1);
		red.InitSamuraVal(vecwarriors[j][1],vecwarriors[j][2],vecwarriors[j][3],vecwarriors[j][4],vecwarriors[j][5]);
		blue.InitSamuraVal(vecwarriors[j][1],vecwarriors[j][2],vecwarriors[j][3],vecwarriors[j][4],vecwarriors[j][5]);
		
		while(red.IsMakeEnable()||blue.IsMakeEnable())
		{
			if(red.IsMakeEnable())
			{
				do
				{
					if(red.MakeWarrior()) break;
				}while(1);
			}
			
			if(blue.IsMakeEnable())
			{
				do
				{
					if(blue.MakeWarrior()) break;
				}while(1);
			}
		}
	}
	return 0;
}

 

相关标签: C++