记录编号 |
563179 |
评测结果 |
AAAAAAAAAA |
题目名称 |
杀手游戏 |
最终得分 |
100 |
用户昵称 |
斯内普和骑士 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2021-07-16 18:41:36 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct Information//存储玩家信息
{
int Bangcnt;//Bang卡牌数
int Grenadecnt;//Grenade卡牌数
int Ghostcnt;//Ghost卡牌数
int Knifecnt;//Knife卡牌数
int Misscnt;//Miss卡牌数
int Parrycnt;//Parry卡牌数目
bool die;//是否存活
int Life;//生命值
}I,P;
string s;
void clear(Information &x)//清除手中的牌,重启
{
x.Bangcnt=0;
x.Grenadecnt=0;
x.Ghostcnt=0;
x.Knifecnt=0;
x.Misscnt=0;
x.Parrycnt=0;
}
void mp(Information &x)//摸牌
{
cin>>s;
if(s==".")
exit(0);
if(s=="Bang")
x.Bangcnt++;
if(s=="Grenade")
x.Grenadecnt++;
if(s=="Ghost")
x.Ghostcnt++;
if(s=="Knife")
x.Knifecnt++;
if(s=="Miss")
x.Misscnt++;
if(s=="Parry")
x.Parrycnt++;
}
void init()//初始化,防止句号恶心
{
I.Life=4,P.Life=4;
I.die=false,P.die=false;
clear(I);
clear(P);
mp(I);
mp(I);
mp(I);
mp(I);
mp(P);
mp(P);
mp(P);
mp(P);
}
void CheckLife(Information &a)//检查生命是否为0
{
if(a.Life<=0)
a.die=true;
}
void Attack(Information &x,Information &y)//正常攻击
{
x.Bangcnt--;
if(y.Parrycnt)//用Parry阻挡
{
y.Parrycnt--;
mp(y);//Parry奖励
}
else
{
if(y.Misscnt)//用Miss阻挡
y.Misscnt--;
else
y.Life--;//用命档
}
CheckLife(y);
}
void Knifework(Information &x,Information &y)
{
x.Knifecnt--;
y.Life--;//就硬被砍
CheckLife(y);
}
void Grenadework(Information &x,Information &y)//受到Grenadework攻击
{
x.Grenadecnt--;
if(y.Parrycnt)//用Parry阻挡
{
y.Parrycnt--;
mp(y);//Parry奖励
}
else
{
if(y.Misscnt)//用Miss阻挡
y.Misscnt--;
else
y.Life--;//用命档
}
//if(y.Misscnt)
// y.Misscnt--;//挡刀
// else
// y.Life--;//掉血
CheckLife(y);
}
void Ghostwork(Information &x,Information &y)//受到Ghost攻击
{
x.Ghostcnt--;
if(y.Bangcnt)
y.Bangcnt--;//挡刀
else
y.Life--;//掉血
CheckLife(y);
}
void work(Information &x,Information &y)
{
mp(x);mp(x);
while(x.Ghostcnt)//优先操作
Ghostwork(x,y);
while(x.Grenadecnt)
Grenadework(x,y);
while(x.Knifecnt)//直接攻击
Knifework(x,y);
if(x.Bangcnt)
Attack(x,y);//攻击只能用一次,前三个直接出完
int cnt=x.Bangcnt+x.Misscnt+x.Parrycnt;
while(cnt>x.Life)//弃牌
{
if(x.Bangcnt)
{
x.Bangcnt--;
cnt--;
continue;
}
if(x.Misscnt)
{
x.Misscnt--;
cnt--;
continue;
}
if(x.Parrycnt)
{
x.Parrycnt--;
cnt--;
continue;
}
}
}
int main()
{
freopen("bang.in","r",stdin);
freopen("bang.out","w",stdout);
while(1)
{
init();
while(1)
{
if(I.die==true||P.die==true)
break;
work(I,P);
if(I.die==true||P.die==true)
break;
work(P,I);
}
if(I.die==true)
printf("LOSE\n");
else
printf("WIN\n");
cin>>s;
while(s!="===")
{
cin>>s;
}
}
return 0;
}