思路:
题目思路很直接,需要注意一下细节:
1.生成新的随从,生成操作有三个参数:位置、攻击力,血量。当该随从的位置有随从时,将原来该位置处的随从和右侧的随从都右移一位。
2.当随从的血量为0或负时,进行删除,右侧随从左移一位
3.命令随从进行攻击,攻击操作有两个参数:主动攻击己方随从的位置,被攻击的敌方随从或玩家的位置(0表示玩家,1-7表示随从)
a.如果攻击的目标是玩家,玩家减掉攻击者的血量;
b.如果攻击的目标是随从,被攻击随从减掉攻击者的血量,攻击者减掉被攻击者的血量。
c.如果攻击造成玩家血量少于0,则本次程序的胜负结果决定,如果被攻击随从的血量少于0,则该随从消失,进行删除
4.结束回合操作,交换主动方(用参数flag标记哪方即可)。
代码:
#include<iostream>
#include<cstring>
using namespace std;
string str;int vv1=0;int vv2=0;
struct att
{
int pos;
int attack;
int hea;
};
att attacker[10],defender[10];bool flag=0;
int v1=30,v2=30;
void print(int kk)
{ cout<<kk<<endl;cout<<v1<<endl;
cout<<vv1<<" ";
for(int j=1;j<=vv1;j++)
cout<<attacker[j].hea<<" ";
cout<<endl;
cout<<v2<<endl;
cout<<vv2<<" ";
for(int j=1;j<=vv2;j++)
cout<<defender[j].hea<<" ";
cout<<endl;
}
void solve(int a,int p)
{
if(attacker[a].hea<=0)
{
for(int j=a;j<vv1;j++)
{
attacker[j].pos=attacker[j+1].pos;
attacker[j].attack=attacker[j+1].attack;
attacker[j].hea=attacker[j+1].hea;
} vv1--;
}
if(defender[p].hea<=0)
{
for(int j=p;j<vv2;j++)
{
defender[j].pos=defender[j+1].pos;
defender[j].attack=defender[j+1].attack;
defender[j].hea=defender[j+1].hea;
} vv2--;
}
}
int main()
{
int n;cin>>n;int count=0;
for(int i=1;i<=n;i++)
{
cin>>str;
if(str[0]=='e')
{
flag=1-flag;continue;
}
if(flag==0)
{
if(str[0]=='s')
{
int p,a,h;cin>>p>>a>>h;
for(int j=vv1+1;j>p;j--)
{
attacker[j].pos=attacker[j-1].pos;
attacker[j].attack=attacker[j-1].attack;
attacker[j].hea=attacker[j-1].hea;
}attacker[p].pos=p;attacker[p].attack=a;
attacker[p].hea=h;
vv1++;
}
if(str[0]=='a')
{
int a,p;cin>>a>>p;
if(p==0)//英雄
{
v2=v2-attacker[a].attack;
if(v2<=0)
count=1;
}
else
{
//攻击随从
attacker[a].hea-=defender[p].attack;
defender[p].hea-=attacker[a].attack;
solve(a,p);
}
}
}
if(flag==1)
{
if(str[0]=='s')
{
int p,a,h;cin>>p>>a>>h;
for(int j=vv2+1;j>p;j--)
{
defender[j].pos=defender[j-1].pos;
defender[j].attack=defender[j-1].attack;
defender[j].hea=defender[j-1].hea;
}defender[p].pos=p;defender[p].attack=a;
defender[p].hea=h;
vv2++;
}
if(str[0]=='a')
{
int a,p;cin>>a>>p;
if(p==0)//英雄
{
v1=v1-defender[a].attack;
if(v1<=0)
count=-1;
}
else
{
//攻击随从
attacker[p].hea-=defender[a].attack;
defender[a].hea-=attacker[p].attack;
solve(p,a);
}
}
}
}
print(count); return 0;
}