POJ3760

来源:互联网 发布:武汉微派网络 编辑:程序博客网 时间:2024/04/27 19:33


    个人认为3760主要是一个考验人的细心程度的题,对技术可以说是入门级,只要学过一些基本的C语言知识的人就可以去做,关键在于细心与认真。另外强烈建议在做这道题之前先下个(UltraCompare)。做这种题,要是没有个文本比较软件的话,我相信你会在测试阶段里动辄上千行的输出对比中死的很有节奏感······
     
    说说这里面的一些易错点吧:
    单词、输出时留的空格不要打错。这两个错误我在前期对输出进行人工比对时一直都没发现,后来用了工具软件才找到。
    城市里战斗结果的记录与城市旗帜颜色的判断。这个问题的关键在于用多少个数字能表示出全部的战斗结果,并且能自动忽略掉未发生战斗这一情况的发生。
    Wolf的血量与攻击力的倍增。友情提示:Wolf的人头初始值是0。
    司令部对战斗获胜的武士的生命奖励情况的判定。这个要注意他是按距敌军司令部的远近来进行的,而且是先奖励,然后司令部才会获取生命值(而不是像输出里显示的那样,战斗结束的一瞬间司令部就拿到了生命值)
 
    另外在进行测试的时候建议把时间放的长一点,多取特殊值,这样比较容易发现自己的错误。如果测了很长时间也没发现错在哪儿之后,送你四个字:
     
接着测吧
    
 
    好啦,不扯淡了,上源码:


#include <iostream>

#include <iomanip>
using namespace std;
typedef struct solder  //兵种模型
{
    public :
    char *name;//兵种名
    int attack;//攻击力
    int blood;//血量
    int kind;//兵种类型:ninja=0 lion=1 wolf=2 iceman=3 dragon=4
    int number;//士兵编号   
    int n;//记录wolf杀死的人数
    int step;//记录iceman行走的步数
     
};
char    ninja[]="ninja",
        lion[]="lion",
        wolf[]="wolf",
        iceman[]="iceman",
        dragon[]="dragon";
void definesolder(solder &a,int kind1,int number1,int dragonlife1,int renzhelife1,int icemanlife1,int lionlife1,int wolflife1,int dragonattack1,int renzheattack1,int icemanattack1,int  lionattack1,int wolfattack1)
    {   
        switch (kind1)
        {case 0 : a.attack=renzheattack1;
                  a.kind=0;
                  a.blood=renzhelife1;          
                  a.name=&ninja[0];
                  a.number=number1;
                  break;
        case 1 :  a.attack=lionattack1;
                  a.kind=1;
                  a.blood=lionlife1;
                  a.name=&lion[0];
                  a.number=number1;
                  break;
        case 2 :  a.kind=2;
                  a.attack=wolfattack1;
                  a.blood=wolflife1;
                  a.name=&wolf[0];
                  a.number=number1;
                  a.n=0;
                  break;
        case 3 :  a.kind=3;
                  a.attack=icemanattack1;
                  a.blood=icemanlife1;
                  a.name=&iceman[0];
                  a.number=number1;
                  a.step=0;
                  break;
        case 4 :  a.kind=4;
                  a.attack=dragonattack1;
                  a.blood=dragonlife1;
                  a.name=&dragon[0];
                  a.number=number1;
                  break;
        }
    };
 
//定义两方士兵,一会回来看是不是需要用数组
 
 
typedef struct cityabc//构造城市
{
 
    solder *R;//士兵一,红方士兵
    solder *B;//士兵二,蓝方士兵
     
    int flag;//旗帜,0是无旗,1是红色,2是蓝色
    int Rwin;//红胜
    int Bwin;//蓝胜
    int life;//生命元'
    int fightresult;//战斗结果,奖励时用
     
};
//首先攻击函数
int firstfight(int citynumber ,int cityflag)//首先攻击函数
{switch (cityflag)
 {
    case 0 :
    if(citynumber%2)
    {return 1;}
    else
    {return 0;}//偶数蓝先
    case 1 : return 1;
    case 2 : return 0;
 }
}
//攻击函数
int fight(int firstfight1,int &Rcitylifesave,int &Bcitylifesave,int k,int time,cityabc &cityfight)//返回值为0,1,2,0是平局,1是红胜,2是蓝胜
{if (firstfight1)//判断由谁先主动攻击,1的话红方先攻击,0的话蓝方先攻击
    { 
    cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
    cout<<':'<<time%60<<" red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" attacked blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" in city "<<k<<" with "<<cityfight.R->blood<<" elements and force "<<cityfight.R->attack<<endl; //红方主动进攻
    cityfight.B->blood=cityfight.B->blood-cityfight.R->attack;     
    if(cityfight.B->blood<=0)//判断红方的攻击是否获胜了,
    {
        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
        cout<<':'<<time%60<<" blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" was killed in city "<<k<<endl;//主动攻击获胜,输出蓝方死亡
        switch (cityfight.R->kind)//红方主动攻击获胜
     {
        case 2 : cityfight.R->n=cityfight.R->n+1;//当其为wolf时,人头计数器加一
                 if(cityfight.R->n%2==0)//判断是否杀够了两个人
                    {
                       cityfight.R->attack=2*cityfight.R->attack;//当杀够了两个人时,攻击力与血量翻倍
                       cityfight.R->blood=2*cityfight.R->blood;
                    } 
                 break;//wolf结束
        case 4 : cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
                 cout<<':'<<time%60<<" red dragon "<<cityfight.R->number<<" yelled in city "<<k<<endl;//dragon欢呼
                 break;//恐龙的欢呼
     }
       if(cityfight.B->kind==1)//如果杀死的是lion
        {
            if(cityfight.R->kind==2&&cityfight.R->n%2==0)
            {
                cityfight.R->blood+=cityfight.B->blood+cityfight.R->attack/2;
            }
            else
            {
                cityfight.R->blood+=cityfight.B->blood+cityfight.R->attack;//把死亡前的血量献给对方
            }
 
       }
////////////////////////////////////////////////////////////////////
     
       cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
       cout<<':'<<time%60<<" red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" earned "<<cityfight.life<<" elements for his headquarter"<<endl;
 
////////////////////////////////////////////////////////////////////
      cityfight.B=NULL;
      cityfight.fightresult=1;//新加入cityfight参数。即为发生战斗的城市
      return 1;
    }//主动攻击获胜
     else//主动攻击没杀死人
     {
        if(cityfight.B->kind==0)//即被攻击者是忍者
      {
        if(cityfight.R->kind==4)
        {
            cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
            cout<<':'<<time%60<<" red dragon "<<cityfight.R->number<<" yelled in city "<<k<<endl;//dragon欢呼
        }
        cityfight.fightresult=3;
        return 0;//0表示正常战斗,互相无伤亡
      }//ninja 没有反击函数
      else//反击函数
      {
        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
        cout<<':'<<time%60<<" blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" fought back against red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" in city "<<k<<endl;//输出反击
        cityfight.R->blood=cityfight.R->blood-(cityfight.B->attack>>1);//反击
       if(cityfight.R->blood>0)
       {
        if(cityfight.R->kind==4)//反击没杀死人
        {
            cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
            cout<<':'<<time%60<<" red dragon "<<cityfight.R->number<<" yelled in city "<<k<<endl;
        }//dragon欢呼
       cityfight.fightresult=3;
       return 0;//0表示正常战斗,互相无伤亡
       }
       else
       {
        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
        cout<<':'<<time%60<<" red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" was killed in city "<<k<<endl;//红武士被杀//反击打死人
        
        if(cityfight.R->kind==1)
       {
          cityfight.B->blood+=cityfight.R->blood+(cityfight.B->attack>>1);   
       }
////////////////////////////////////////////////////////////////////
       cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
       cout<<':'<<time%60<<" blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" earned "<<cityfight.life<<" elements for his headquarter"<<endl;
////////////////////////////////////////////////////////////////////
       cityfight.R=NULL;//消灭红方在地球上的痕迹
       cityfight.fightresult=2;
       return 2;
       }//蓝方获胜
      }//反击结束
     }  //主动攻击没获胜结束
    }//红先结束
else//蓝先开始
    { 
      cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
      cout<<':'<<time%60<<" blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" attacked red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" in city "<<k<<" with "<<cityfight.B->blood<<" elements and force "<<cityfight.B->attack<<endl; //蓝方主动进攻
      cityfight.R->blood=cityfight.R->blood-cityfight.B->attack;       
      if(cityfight.R->blood<=0)//判断蓝方的攻击是否获胜了,
     {
        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
        cout<<':'<<time%60<<" red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" was killed in city "<<k<<endl;//主动攻击获胜,输出红方死亡
 
     switch (cityfight.B->kind)//蓝方主动攻击获胜
     {
        case 2 : cityfight.B->n=cityfight.B->n+1;//当其为wolf时,人头计数器加一
                 if(cityfight.B->n%2==0)//判断是否杀够了两个人
                  {
                    cityfight.B->attack=2*cityfight.B->attack;//当杀够了两个人时,攻击力与血量翻倍
                    cityfight.B->blood=2*cityfight.B->blood;
                  }
                  break;//wolf结束
        case 4 : cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
                 cout<<':'<<time%60<<" blue dragon "<<cityfight.B->number<<" yelled in city "<<k<<endl;//dragon欢呼
                 break;//恐龙的欢呼
     }
       if(cityfight.R->kind==1)//如果杀死的是lion
        
       {
        if(cityfight.B->kind==2&&cityfight.B->n%2==0)
            {
            cityfight.B->blood+=cityfight.R->blood+cityfight.B->attack/2;
            }
        else
            {
            cityfight.B->blood+=cityfight.R->blood+cityfight.B->attack;
            }//把死亡前的血量献给对方
 
       }
////////////////////////////////////////////////////////////////////
       cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
       cout<<':'<<time%60<<" blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" earned "<<cityfight.life<<" elements for his headquarter"<<endl; 
////////////////////////////////////////////////////////////////////
       cityfight.R=NULL;//新加入cityfight参数。即为发生战斗的城市
       cityfight.fightresult=2;
       return 2;
     }//主动攻击获胜
     else//主动攻击没杀死人
         {
            if(cityfight.R->kind==0)//即被攻击者是忍者
              {
                if(cityfight.B->kind==4)
                     {
                        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
                        cout<<':'<<time%60<<" blue dragon "<<cityfight.B->number<<" yelled in city "<<k<<endl;//dragon欢呼
                     }//0表示正常战斗,互相无伤亡
                cityfight.fightresult=3;
                return 0;
               }//ninja 没有反击函数
      else//反击函数
      {
        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
        cout<<':'<<time%60<<" red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" fought back against blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" in city "<<k<<endl;//输出反击
        cityfight.B->blood=cityfight.B->blood-(cityfight.R->attack>>1);//反击
        if(cityfight.B->blood>0)
        {
            if(cityfight.B->kind==4)//反击没杀死人
            {
                cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
                cout<<':'<<time%60<<" blue dragon "<<cityfight.B->number<<" yelled in city "<<k<<endl;
            }//dragon欢呼
            cityfight.fightresult=3;
            return 0;//0表示正常战斗,互相无伤亡
        }
       else
       {
        cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
        cout<<':'<<time%60<<" blue ";cout<<(cityfight.B->name);cout<<" "<<cityfight.B->number<<" was killed in city "<<k<<endl;//红武士被杀//反击打死人
        
        if(cityfight.B->kind==1)
        {
            cityfight.R->blood+=cityfight.B->blood+(cityfight.R->attack>>1);
        }
 
////////////////////////////////////////////////////////////////////
       cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
       cout<<':'<<time%60<<" red ";cout<<(cityfight.R->name);cout<<" "<<cityfight.R->number<<" earned "<<cityfight.life<<" elements for his headquarter"<<endl;
////////////////////////////////////////////////////////////////////       
       cityfight.B=NULL;//消灭蓝方在地球上的痕迹
       cityfight.fightresult=1;
       return 1;
       }//红方获胜
      }//反击结束
     }  //主动攻击没获胜结束
    }//蓝先结束
 
}
//奖血函数
void prizeblood(cityabc &city,int &rm)//必须用两次for
{
  switch(city.fightresult)
  {
  case 1 :if(rm>=8)//看基地里的生命值储量
            {
                city.R->blood=city.R->blood+8;
                rm=rm-8;//大于8的话给予生命奖励
            }
          break;  
  case 2:if(rm>=8)//看基地里的生命值储量
           {
            city.B->blood=city.B->blood+8;
            rm=rm-8;//大于8的话给予生命奖励
           }
          break;    
  }
   
}
//收集生命元函数
void prizeown(cityabc &city,int &rm,int &bm,int time)//可以仅用一次for
{
  switch(city.fightresult)
  {
   
  case 1 :
       rm=rm+city.life;//为基地获取生命值
       city.life=0;city.fightresult=0;break;
  case 2:      
       bm=bm+city.life;//为基地获取生命值
       city.life=0;city.fightresult=0;break; 
  case 3 :
       city.fightresult=0;break;  
  }
}
//换旗函数
void changeflag(cityabc &city,int k,int time)
{
    switch(city.fightresult)
    {
    case 1:city.Bwin=0;city.Rwin=city.Rwin+1;
    if(city.Rwin==2&&city.flag!=1){city.flag=1;cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
    cout<<':'<<time%60<<" red flag raised in city "<<k<<endl;}break;//红胜
    case 2:city.Bwin=city.Bwin+1;city.Rwin=0;
    if(city.Bwin==2&&city.flag!=2){city.flag=2;cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
    cout<<':'<<time%60<<" blue flag raised in city "<<k<<endl;}break;//蓝胜
    case 3:city.Bwin=0;city.Rwin=0;break;
    }
}
//胜利函数
int win1(int &a,int &b ,cityabc &city1,cityabc &city2,int time,int rn,int bn)//胜利函数,city1是city[0],蓝方获胜的判定条件,city2是city[N+1],红方获胜的判定条件
{
 if(city2.R!=NULL)
 {
    a=a+1;
    cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
    cout<<":10"<<" red ";cout<<city2.R->name;cout<<" "<<city2.R->number<<" reached blue headquarter with "<<city2.R->blood<<" elements and force "<<city2.R->attack<<endl;
    city2.R=NULL;
 }
 if(a>=2)
 {
 cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
 cout<<":10 blue headquarter was taken" <<endl;
 return 1; 
 }
 else
 {return 0;}
}
int win2(int &a,int &b ,cityabc &city1,cityabc &city2,int time,int rn,int bn)//胜利函数,city1是city[0],蓝方获胜的判定条件,city2是city[N+1],红方获胜的判定条件
{
 if(city1.B!=NULL)
 {
    b=b+1;
    cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
    cout<<":10"<<" blue ";cout<<city1.B->name;cout<<" "<<city1.B->number<<" reached red headquarter with "<<city1.B->blood<<" elements and force "<<city1.B->attack<<endl;
    city1.B=NULL;   
 }
 if(b>=2) 
   {
    cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
    cout<<":10 red headquarter was taken" <<endl;
    return 1; 
   }
 else
 {return 0;}
}
 
//生产函数
int Rproduct(int number)//生产函数
{switch(number)
    {
        case 1: return 3;break;
        case 2: return 1;break;
        case 3: return 2;break;
        case 4: return 0;break;
        case 0: return 4;break;
    }
}
int Bproduct(int number)//生产函数
{switch(number)
    {
        case 1: return 1;break;
        case 2: return 4;break;
        case 3: return 0;break;
        case 4: return 3;break;
        case 0: return 2;break;
    }
}
//函数定义完毕,以下是全局变量
int M,N,T,dragonlife,renzhelife,icemanlife,lionlife,wolflife,dragonattack,renzheattack,icemanattack, lionattack,wolfattack;//定义基本数据
int time,wins1=0,wins2=0;//时间
int a=0,b=0;
cityabc city[21];//多定义一位,作为司令部 
int rm,bm;//初始生命值
int rn=1;//士兵编号
int bn=1;
int wolegequ=-1;
solder Redsolder[22],Bluesolder[22];//士兵数组,同一时刻最多只有22个活着的士兵,所以不用定义那么多。
int firstfight1;//接收首先攻击函数的返回值
int list=1;//方便输出case
int main()//接收测试组数
{   
    do
    {
/////////////////////////////////////////////////////////////////////////////   
    if(wolegequ==-1)
    {cin>>wolegequ;}
    cin>>M>>N>>T;
    cin>>dragonlife>>renzhelife>>icemanlife>>lionlife>>wolflife;
    cin>>dragonattack>>renzheattack>>icemanattack>>lionattack>>wolfattack;//输入基本数据值
    cout<<"Case:"<<list<<endl;
/////////////////////////////////////////////////////////////////////////////
    bm=M;
    rm=M;
    for(int k=0;k<=N+1;k++)
    {city[k].flag=0;
    city[k].Rwin=0;
    city[k].Bwin=0;
    city[k].R=NULL;
    city[k].B=NULL;
    city[k].life=0;
    city[k].fightresult=0;
    }
    for(time=0;time<=T&&wins1!=1&&wins2!=1;time=time+10)//当时间达到规定值或任意一方胜利时停止循环
    {
                if((time%60)==0)//诞生部分
        { 
            int Rproduct1,Bproduct1;
            int solderst=rn%22;
            Rproduct1=Rproduct(rn%5);
            Bproduct1=Bproduct(bn%5);
            definesolder(Redsolder[solderst],Rproduct1,rn,dragonlife,renzhelife,icemanlife,lionlife,wolflife,dragonattack,renzheattack,icemanattack, lionattack,wolfattack);          
             if(rm>=Redsolder[solderst].blood)
             {
              rm=rm-(Redsolder[solderst].blood);
              city[0].R=&Redsolder[solderst];
              rn=rn+1;
              cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<":0"<<time%60<<" red ";cout<<city[0].R->name;cout<<" "<<rn-1<<" born"<<endl;//红武士诞生 
             }
            definesolder(Bluesolder[solderst],Bproduct1,bn,dragonlife,renzhelife,icemanlife,lionlife,wolflife,dragonattack,renzheattack,icemanattack, lionattack,wolfattack);
             if(bm>=Bluesolder[solderst].blood)
             {
              bm=bm-(Bluesolder[solderst].blood);
              city[N+1].B=&Bluesolder[solderst];  
              bn=bn+1;
cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<((time-time%60)/60);
cout<<":0"<<(time%60)<<" blue ";cout<<city[N+1].B->name;cout<<" "<<bn-1<<" born"<<endl;//蓝武士诞生       
     }}
        else
        {         
           if(10==(time%60))//前进部分
          {
            for (int k1=1;k1<=(N+1);k1=k1+1)
              {
        city[k1-1].B=city[k1].B; 
        city[k1].B=NULL;
        city[N+2-k1].R=city[N+1-k1].R;      
        city[N+1-k1].R=NULL;    
              }//前进函数
      if(city[0].B!=NULL)
      {if(city[0].B->kind!=3)
      {wins1=win2(a,b,city[0],city[N+1],time,rn,bn);}
      else
      {city[0].B->step++;
            if((city[0].B->step%2)==0)
              {city[0].B->attack=city[0].B->attack+20;city[0].B->blood=city[0].B->blood-9;}
               if(city[0].B->blood<=0)
                 {city[0].B->blood=1;}
      wins1=win2(a,b,city[0],city[N+1],time,rn,bn);          
      }}
      for (int k=0;k<=N+1;k=k+1)//输出前进情况
      {
        if(city[k].B!=NULL)
        {if(city[k].B->kind==3)
        {
            city[k].B->step++;
            if((city[k].B->step%2)==0)
              {city[k].B->attack=city[k].B->attack+20;city[k].B->blood=city[k].B->blood-9;}
               if(city[k].B-B%0t;blood<=0)
                 {city[k].B->blood=1;}}}
        if(city[k].R!=NULL)
        {
            if(city[k].R->kind==3)
              {city[k].R->step++;
                if((city[k].R->step%2)==0){city[k].R->attack=city[k].R->attack+20;city[k].R->blood=city[k].R->blood-9;}
                  if(city[k].R->blood<=0){city[k].R->blood=1;}}}         
        if(city[k].R!=NULL&&k!=0&&k!=N+1)
        {   
            cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<':'<<time%60<<" red ";cout<<city[k].R->name;cout<<" "<<city[k].R->number<<" marched to city "<<k<<" with "<<city[k].R->blood<<" elements and force "<<city[k].R->attack<<endl;}
        if(city[k].B!=NULL&&k!=0&&k!=N+1)
        {
            cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<':'<<time%60<<" blue ";cout<<city[k].B->name;cout<<" "<<city[k].B->number<<" marched to city "<<k<<" with "<<city[k].B->blood<<" elements and force "<<city[k].B->attack<<endl;}
          }
      wins2=win1(a,b,city[0],city[N+1],time,rn,bn);
      }
          else
          {
              if(20==(time%60))//创造生命部分
              {
                for (int k=1;k<=N;k=k+1)
      {
        city[k].life=city[k].life+10;
      }
              }
              else
              {
                if(30==(time%60))//取生命值部分
                {
                    for(int k=1;k<=N;k=k+1)
                    {
            if(city[k].R==NULL&&city[k].B!=NULL)
        {
        bm=bm+city[k].life;         
cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<":"<<time%60<<" blue ";cout<<city[k].B->name;cout<<" "<<city[k].B->number<<" earned "<<city[k].life<<" elements for his headquarter"<<endl;
        city[k].life=0;
        }
        if(city[k].B==NULL&&city[k].R!=NULL)
        {rm=rm+city[k].life;         
cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<':'<<time%60<<" red ";cout<<city[k].R->name;cout<<" "<<city[k].R->number<<" earned "<<city[k].life<<" elements for his headquarter"<<endl;
        city[k].life=0;
        }
                    }
                 }
                else
                {
                    if(40==(time%60))//PK部分
                    {  
                        for (int k=1;k<=N;k=k+1)
        {
            if(city[k].R!=NULL&&city[k].B!=NULL)
        {
        firstfight1=firstfight(k,city[k].flag);
        fight(firstfight1,rm,bm,k,time,city[k]);
        }
            changeflag(city[k],k,time);
        }//换旗函数
          for(int k1=N;k1>0;k1--)
        {   if(city[k1].fightresult==1)
            {prizeblood(city[k1],rm);}
        }
        for(int k2=1;k2<=N;k2++)
        {   if(city[k2].fightresult==2)
            {prizeblood(city[k2],bm);}
        }
             
    for(int k3=1;k3<=N;k3++)
        {   if(city[k3].fightresult!=0)
            {prizeown(city[k3],rm,bm,time);}
        }         
        }
                    else
                    {
                        if(50==(time%60))//司令部汇报生命值部分
                        {
cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<':'<<time%60<<" "<<rm<<" "<<"elements in red headquarter"<<endl;
cout<<setfill('0')<<setw(3)<<setiosflags(ios::right)<<(time-time%60)/60;
cout<<':'<<time%60<<" "<<bm<<" "<<"elements in blue headquarter"<<endl;                         
                        }
                    }
                }
              }
          }
        }
    } 
list++;wolegequ--;
wins1=0;wins2=0;
a=0;b=0;
rn=1;
bn=1;//归0
    }
    while(wolegequ);
    return 1; 
    }        
     
原创粉丝点击