#include<bits/stdc++.h>
using namespace std;
struct node //node为妖精循环攻击兽的结构体
{
char name[10],wep[11]; //name为名字,wep为圣剑
int HP,att,har,v; //HP为血量,att为初始攻击值,har为初始防御值,v为速度,hurt为伤害
int hurt;
} q,r;
struct nodee //nodee为兽的结构体
{
int v,har,att,HP; //含义同上
}p[10];
int main()
{
queue<node>que; //que为循环妖精的队列
for(int i=0; i<4; i++)
{
cin>>q.name>>q.HP>>q.att>>q.har>>q.v>>q.wep;//依次输入信息,计算初始伤害,并让4个妖精进队列
q.hurt=q.att;
if(q.wep[0]=='P')
q.hurt+=78;
else if(q.wep[0]=='C')
q.hurt+=43;
else if(q.wep[0]=='V')
q.hurt+=110;
else if(q.wep[0]=='I')
q.hurt+=23;
que.push(q);
}
int a[7]= {7,4,3,9,3,6,2}; //兽的防
int b[7]= {100,34,24,43,34,65,90};//兽的攻
int c[7]= {2333,600,200,400,500,1100,1400};//兽的血
for(int i=0; i<7; i++)
{
cin>>p[i].v; //输入兽的速度,并让p的成员:防,攻,血赋初值
p[i].har=a[i];
p[i].att=b[i];
p[i].HP=c[i];
}
int t1,t2,h1,h2,ans=0,flag=1;
for(int i=0; i<7; i++) //优先攻击体型最大的
{
while(!que.empty()) //只要队列里头还有东西,就是还有妖精存在
{
ans++;
r=que.front(); //取出来第一个妖精让其战斗
que.pop(); //这里先让他出去,如果没死的话到后来,再进来
t1=r.hurt;
h1=t1-p[i].har; //妖精的伤害减去兽的护甲为对兽的总伤害,这里标记为h1
//p[i].HP-=h1;
t2=p[i].att;
h2=t2-r.har; //兽的伤害间距妖精的护甲为对妖精的总伤害,这里标记为h2
//r.HP-=h2;
if(r.v>p[i].v) //如果妖精的速度大于兽的速度,兽要被攻击两次,妖精被攻击一次
{
p[i].HP-=2*h1;
r.HP-=h2;
}
else if(r.v<p[i].v) //同理
{
r.HP-=2*h2;
p[i].HP-=h1;
}
else //速度相等时
{
r.HP-=h2;
p[i].HP-=h1;
}
if(r.HP>0)
que.push(r); //如果一回合后该妖精没死,重新进队列
if(p[i].HP<=0) //如果当前的兽死了,就需和下一个兽打,这里break一下
break;
if(que.empty()) //如果队列空了,也就是妖精都死光了,肯定是失败的,flag标记为0,要输出BOOM!
{
flag=0;
break;
}
}
if(flag==0) //紧跟着上一步,也需跳出for
break;
}
if(ans<=100&&flag!=0)
cout<<ans<<endl;
else
cout<<"BOOM!"<<endl;
return 0;
}
SDUT4377->最终之战
最新推荐文章于 2019-11-10 00:47:18 发布