社区讨论
写了两个下午,15pts
学术版参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo82ukmf
- 此快照首次捕获于
- 2023/10/27 11:52 2 年前
- 此快照最后确认于
- 2023/10/27 11:52 2 年前
CPP应该能看出来这是猪国杀(
//PigCountryKill
#include <bits/stdc++.h>
#define ufor(i,pig,b) for(int i=(pig);i<=(b);i++)
using namespace std;
struct Pig{
int NumOfCards,hp,nxt,lst;
char id,card[2005];
bool ZhugeReCrbow;
}pig[25];
char IdByDir[15],CardPile[2005],op[5];
int n,m,Rebel;
bool End;
void DrawCards(int Object){
if(m==0){
m++;
}
pig[Object].card[++pig[Object].NumOfCards]=CardPile[m];
m--;
}
void JudgmentalKill(int Object1,int Object2){
ufor(i,1,pig[Object2].NumOfCards){
if(pig[Object2].card[i]=='P'){
pig[Object2].card[i]='U';
pig[Object2].hp++;
return ;
}
}
pig[pig[Object2].nxt].lst=pig[Object2].lst;
pig[pig[Object2].lst].nxt=pig[Object2].nxt;
if(Object2==1){
End=true;
return ;
}
if(pig[Object2].id=='F'){
Rebel--;
}
if(Rebel==0){
End=true;
return ;
}
if(pig[Object2].id=='F'){
ufor(i,1,3){
DrawCards(Object1);
}
}
if(pig[Object2].id=='Z'&&pig[Object1].id=='M'){
pig[Object1].NumOfCards=0;
pig[Object1].ZhugeReCrbow=false;
}
}
void Kill(int Object1,int Object2){
ufor(i,1,pig[Object2].NumOfCards){
if(pig[Object2].card[i]=='D'){
pig[Object2].card[i]='U';
return ;
}
}
pig[Object2].hp--;
if(pig[Object2].hp==0){
JudgmentalKill(Object1,Object2);
}
}
bool Invulner(int Object1,int Object2,int Object3){
int i=Object1;
while(true){
if(Object3==1){
if(IdByDir[Object2]==pig[i].id||(IdByDir[Object2]=='M'&&pig[i].id=='Z')||(IdByDir[Object2]=='Z'&&pig[i].id=='M')){
ufor(j,1,pig[i].NumOfCards){
if(pig[i].card[j]=='J'){
pig[i].card[j]='U';
IdByDir[i]=pig[i].id;
return !Invulner(i,Object1,0);
}
}
}
}
else{
if(((pig[i].id=='M'||pig[i].id=='Z')&&IdByDir[Object1]=='F')||(pig[i].id=='F'&&(IdByDir[Object1]=='Z'))){
ufor(j,1,pig[i].NumOfCards){
if(pig[i].card[j]=='J'){
pig[i].card[j]=='U';
IdByDir[i]=pig[i].id;
return !Invulner(i,Object1,0);
}
}
}
}
i=pig[i].nxt;
if(i==Object1){
break;
}
}
return false;
}
void SouthInvasion(int Object1){
for(int Object2=pig[Object1].nxt;Object2!=Object1;Object2=pig[Object2].nxt){
if(!Invulner(Object1,Object2,1)){
int i;
for(i=1;i<=pig[Object2].NumOfCards;i++){
if(pig[Object2].card[i]=='K'){
pig[Object2].card[i]=='U';
break;
}
}
if(i>pig[Object2].NumOfCards){
pig[Object2].hp--;
if(Object2==1&&IdByDir[Object1]=='U'){
IdByDir[Object1]='L';
}
if(pig[Object2].hp==0){
JudgmentalKill(Object1,Object2);
}
if(End){
return ;
}
}
}
}
}
void ArrowsFired(int Object1){
for(int Object2=pig[Object1].nxt;Object2!=Object1;Object2=pig[Object2].nxt){
if(!Invulner(Object1,Object2,1)){
int i;
for(i=1;i<=pig[Object2].NumOfCards;i++){
if(pig[Object2].card[i]=='D'){
pig[Object2].card[i]=='U';
break;
}
}
if(i>pig[Object2].NumOfCards){
pig[Object2].hp--;
if(Object2==1&&IdByDir[Object1]=='U'){
IdByDir[Object1]='L';
}
if(pig[Object2].hp==0){
JudgmentalKill(Object1,Object2);
}
if(End){
return ;
}
}
}
}
}
void Duel(int Object1,int Object2){
if(Invulner(Object1,Object2,1)){
return ;
}
if(Object1==1&&pig[Object2].id=='Z'){
pig[Object2].hp--;
if(pig[Object2].hp==0){
JudgmentalKill(Object1,Object2);
}
return ;
}
int i,j=1,k=1;
while(true){
while(pig[Object2].card[j]!='K'&&j<=pig[Object2].NumOfCards){
j++;
}
if(j>pig[Object2].NumOfCards){
pig[Object2].hp--;
if(pig[Object2].hp==0){
JudgmentalKill(Object1,Object2);
}
return ;
}
else{
pig[Object2].card[j]='U';
}
while (pig[Object1].card[k]!='K'&&k<=pig[Object1].NumOfCards){
k++;
}
if(k>pig[Object1].NumOfCards){
pig[Object1].hp--;
if(pig[Object1].hp==0){
JudgmentalKill(Object2,Object1);
}
return ;
}
else{
pig[Object1].card[k]='U';
}
}
}
void EnterRound(){
char NowCard;
End=true;
if(Rebel>0){
End=false;
}
if(End){
return ;
}
for(int i=1;i;i=pig[i].nxt){
DrawCards(i);
DrawCards(i);
bool kill=true;
ufor(j,1,pig[i].NumOfCards){
if(pig[i].card[j]!='U'){
if(pig[i].hp==0){
break;
}
NowCard=pig[i].card[j];
if(NowCard=='P'){
if(pig[i].hp!=4){
pig[i].hp++;
pig[i].card[j]='U';
}
continue;
}
if(NowCard=='K'){
if(!kill&&!pig[i].ZhugeReCrbow){
continue;
}
if(pig[i].id=='M'&&IdByDir[pig[i].nxt]!='L'&&IdByDir[pig[i].nxt]!='F'){
continue;
}
if(pig[i].id=='F'&&IdByDir[pig[i].nxt]!='Z'&&IdByDir[pig[i].nxt]!='M'){
continue;
}
if(pig[i].id=='Z'&&IdByDir[pig[i].nxt]!='F'){
continue;
}
pig[i].card[j]='U';
Kill(i,pig[i].nxt);
IdByDir[i]=pig[i].id;
kill=false;
if(End){
return ;
}
continue;
}
if(NowCard=='F'){
if(pig[i].id=='F'){
pig[i].card[j]='U';
Duel(i,1);
IdByDir[i]=pig[i].id;
if(End){
return ;
}
j=0;
continue;
}
for(int k=pig[i].nxt;k!=i;k=pig[k].nxt){
if((pig[i].id=='M'&&(IdByDir[k]=='L'||IdByDir[k]=='F'))||(pig[i].id=='Z'&&IdByDir[k]=='F')){
pig[i].card[j]='U';
Duel(i,k);
IdByDir[i]=pig[i].id;
if(End){
return ;
}
j=0;
break;
}
}
continue;
}
if(NowCard=='N'){
pig[i].card[j]='U';
SouthInvasion(i);
if(End){
return ;
}
j=0;
continue;
}
if(NowCard=='W'){
pig[i].card[j]='U';
ArrowsFired(i);
if(End){
return ;
}
j=0;
continue;
}
if(NowCard=='Z'){
pig[i].ZhugeReCrbow=true;
pig[i].card[j]='U';
j=0;
continue;
}
}
}
}
}
int main(){
cin >>n >>m;
ufor(i,1,n){
pig[i].nxt=i+1;
pig[i].lst=i-1;
}
pig[n].nxt=1;
pig[1].lst=n;
ufor(i,1,n){
ufor(j,1,2005){
pig[i].card[j]='U';
}
cin >>op;
pig[i].id=op[0];
ufor(j,1,4){
cin >>op;
pig[i].card[j]=op[0];
}
pig[i].NumOfCards=pig[i].hp=4;
if(pig[i].id=='F'){
Rebel++;
}
pig[i].ZhugeReCrbow=false;
}
ufor(i,2,n){
IdByDir[i]='U';
}
IdByDir[1]='M';
ufor(i,1,m){
cin >>op;
CardPile[m-i+1]=op[0];
}
EnterRound();
if(pig[1].hp<=0){
cout <<"FP\n";
}
else{
cout <<"MP\n";
}
ufor(i,1,n){
if(pig[i].hp<=0){
cout <<"DEAD\n";
}
else{
ufor(j,1,pig[i].NumOfCards){
if(pig[i].card[j]!='U'){
cout <<pig[i].card[j] <<" ";
}
}
cout <<"\n";
}
}
return 0;
}
有好心人帮忙查一下BUG吗QAQ
回复
共 2 条回复,欢迎继续交流。
正在加载回复...