注意
随从是否死亡和死亡后移动位置要在发动攻击后在进行,否则war[ano][dder].life-=war[cur][aker].attack会错误 ,见attack指令代码块
建议英雄存在 war[0][0]和war[1][0],方便最后输出时写循环
#include<iostream>
using namespace std;
int star_life[2];
int sum;
struct Node{
int life;
int attack;
} war[2][10];
void summon(int cur,int pos,int att,int hea)
{
int ano=cur^1;
for(int i=7;i>=pos+1;i--)
{
war[cur][i]=war[cur][i-1];
}
war[cur][pos]={hea,att};
}
void attack(int cur,int aker,int dder)
{
int ano=cur^1;
if(dder==0)
{
star_life[ano]-=war[cur][aker].attack;
}else{
war[cur][aker].life-=war[ano][dder].attack; //!!!!!!注意 是否死亡和死亡后移动位置要在发动攻击后在进行,否则war[ano][dder].life-=war[cur][aker].attack会错误
war[ano][dder].life-=war[cur][aker].attack;
if(war[cur][aker].life<=0)
{
for(int i=aker;i<=7;i++)
{
war[cur][i]=war[cur][i+1];
}
}
// war[ano][dder].life-=war[cur][aker].attack; !!!!!!错误
if(war[ano][dder].life<=0)
{
for(int i=dder;i<=7;i++)
{
war[ano][i]=war[ano][i+1];
}
}
}
}
int main()
{
// war[0][0].life=30; //建议英雄存在0,1下标
// war[1][0].life=30;
star_life[0]=30;
star_life[1]=30;
int sum_op;
cin>>sum_op;
int cur=0;
for(int i=0;i<sum_op;i++)
{
string op;
cin>>op;
if(op=="end")
{
cur ^=1;
}else if(op=="summon")
{
int pos,att,hea;
cin>>pos>>att>>hea;
summon(cur,pos,att,hea);
}else if(op=="attack")
{
int aker,dder;
cin>>aker>>dder;
attack(cur,aker,dder);
}
}
if(star_life[0]<=0)
{
cout<<-1<<endl;
}else if(star_life[1]<=0)
cout<<1<<endl;
else cout<<0<<endl;
cout<<star_life[0]<<endl;
int cnt=0;
for(int s=1;s<=7;s++)
{
if(war[0][s].life>0)
{
cnt++;
}
}
cout<<cnt;
for(int w=1;w<=7;w++)
{
if(war[0][w].life>0)
{
cout<<" "<<war[0][w].life;
}
}
cout<<endl;
cnt=0;
for(int i=1;i<=7;i++)
{
if(war[1][i].life>0)
{
cnt++;
}
}
cout<<star_life[1]<<endl;
cout<<cnt;
for(int i=1;i<=7;i++)
{
if(war[1][i].life>0)
{
cout<<" "<<war[1][i].life;
}
}
return 0;
}