



#include <iostream>
#include <string>
using namespace std;
struct soldier{
int loca; //位置 等于0代表这个位置没有人或代表英雄位置
int blood; //血量
int ability; //攻击力
soldier(){
loca = 0;blood = 0;ability = 0;
}
};
struct fight{
struct soldier soldier[8];//序号与其所在位置保持一致
}pk[2];//0 代表先手 1代表后手
int main()
{
int n;//操作个数
int flag = 0,ans = 0;;
cin >> n;
getchar();
for(int i = 0;i < 2;i++){//英雄信息初始化
pk[i].soldier[0].loca = 0;
pk[i].soldier[0].blood = 30;
}
while(n--){
string s;
cin >> s;//操作 summon召唤 attack攻击 end结束回合
if(s == "summon"){
int position,attack,health;
//位置 攻击力 生命值
cin >> position >> attack >> health;
if(pk[flag].soldier[position].loca != 0){//说明当前位置有人 右边的人顺序向右移位
for(int i = 6;i >= position;i--){//从6开始 因为第七位不能右移了
if(pk[flag].soldier[i].loca!=0){//找到从右数第一个有人的位置
pk[flag].soldier[i].loca++;//右移一位
pk[flag].soldier[i+1] = pk[flag].soldier[i];//把刚才第i位随从的信息 复制给第i+1个
}
}
}
pk[flag].soldier[position].loca = position;//位置为position的随从 编号也设为position
pk[flag].soldier[position].ability = attack;
pk[flag].soldier[position].blood = health;
}
else if(s == "attack"){
int attacker,defender;//0表示对方英雄 1~7表示攻击对方随从编号
//1~7 表示本方随从编号
cin >> attacker >> defender;
int opponent = 0,i = 0;
if(flag == 0)
opponent = 1;
if(defender!=0){//攻击随从
pk[flag].soldier[attacker].blood-=pk[opponent].soldier[defender].ability;//攻击者血量减少
pk[opponent].soldier[defender].blood-=pk[flag].soldier[attacker].ability;//被攻击者血量减少
}
else{//攻击对方英雄 自己不掉血
pk[opponent].soldier[defender].blood-=pk[flag].soldier[attacker].ability;//被攻击者血量减少
}
if(pk[0].soldier[0].blood <=0){//英雄已死 直接跳出 把胜负结果赋给ans变量
ans = -1;
break;
}
else if(pk[1].soldier[0].blood <= 0){
ans = 1;
break;
}
if(pk[flag].soldier[attacker].blood <= 0){//攻击者die 往前移一位
if(attacker!=7){//不是最后一个的时候 从后往前左移
for(i = attacker+1;i <= 7 && pk[flag].soldier[i].loca!=0;i++){
pk[flag].soldier[i-1] = pk[flag].soldier[i];
}
pk[flag].soldier[i-1].loca = 0;
}
else{ //否则直接删除当前位置即可
pk[flag].soldier[7].loca = 0;
}
}
if(pk[opponent].soldier[defender].blood <= 0){
if(defender!=7){
for(i = defender+1;i <= 7 && pk[opponent].soldier[i].loca!=0;i++){
pk[opponent].soldier[i-1] = pk[opponent].soldier[i];
}
pk[opponent].soldier[i-1].loca = 0;
}
else{
pk[opponent].soldier[7].loca = 0;
}
}
}
else if(s == "end"){
if(flag == 0){//0 代表先手 1代表后手
flag = 1;
}
else{
flag = 0;
}
}
}
int num = 0;
cout << ans << endl; //胜负结果
/*先手*/
cout << pk[0].soldier[0].blood << endl;//先手玩家英雄生命值
for(int i = 1;i <= 7 && pk[0].soldier[i].loca!=0;i++){
num++;//从第一个位置开始遍历 看有多少个位置的loca变量不为0 代表有多少个随从
}
cout << num;
for(int i = 1;i <= num;i++){
cout << " " << pk[0].soldier[i].blood;
}
cout << endl;
/*后手*/
num = 0;
cout << pk[1].soldier[0].blood << endl;//后手玩家英雄生命值
for(int i = 1;i <= 7 && pk[1].soldier[i].loca!=0;i++){
num++;
}
cout << num;
for(int i = 1;i <= num;i++){
cout << " " << pk[1].soldier[i].blood;
}
cout << endl;
return 0;
}

583

被折叠的 条评论
为什么被折叠?



