本文共 3651 字,大约阅读时间需要 12 分钟。
防止本宝宝突然……决定实时更新到cnblog上
或者说,请个大佬斧正
#include#include #include #include #include using namespace std;struct pig{ int pupil;//表示猪型,-1反,0主,1忠。 char paid[110];//表示手牌。 int num_paid;//表示现持有的牌数。 void dust_paid()//整理手牌 { int cnt=0; for(int i=1;i<=num_paid;i++) if(paid[i]!=0) paid[++cnt]=paid[i]; return ; } int alive;//剩余血量。 int jump;//-1 跳反,0未跳,1跳忠。 bool like_enemy;//是否为类反猪。 bool equip;//是否装备诸葛连弩。 // int num_kill;//杀 int num_dodge;//闪 // int num_fight;//决斗 // int num_peach;//桃 int num_none;//无懈可击 数量 int alive_before;//前一头活着的猪 int alive_next;//下一头活着的猪 void debug() { printf("class: %d Hp: %d num_paid: %d \n",pupil,alive,num_paid); printf("手牌:\n "); for(int i=1;i<=num_paid;i++) printf("%c ",paid[i]); printf("\n跳反(-1反,0无,1忠): %d \n类反猪: %d \n武器: %d \n",jump,like_enemy,equip); printf("无懈可击数: %d \n闪数: %d \n",num_none,num_dodge); printf("上家: %d 下家: %d \n",alive_before,alive_next); return ; }}pig[110];int n,m;char opt;int mp;//主猪编号.int num_f;//反猪个数。 char pid[10010];int num_pid;//目前抽到哪张牌? void start()//开始 { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { pig[i].alive=4; scanf("%c%c",&opt,&opt);// printf("%c ",opt); if(opt=='M') pig[i].pupil=0,mp=i; else if(opt=='Z') pig[i].pupil=1; else if(opt=='F') pig[i].pupil=-1,num_f++;// printf("%d ",pig[i].pupil); scanf("%c",&opt); for(int j=1;j<=4;j++) { scanf("%c%c",&opt,&opt);// printf("%c ",opt); pig[i].paid[++pig[i].num_paid]=opt; if(opt=='J') pig[i].num_none++; else if(opt=='D') pig[i].num_dodge++; } pig[i].alive_before=i-1; pig[i].alive_next=i+1;// puts(""); } pig[1].alive_before=n; pig[n].alive_next=1; for(int i=1;i<=m;i++) scanf("%c%c",&opt,&opt),pid[i]=opt;// for(int i=1;i<=m;i++) printf("%c ",opt);// puts(""); return ;}bool end()//判断是否结束。 { if(num_f==0){puts("MP");return true;} else if(pig[mp].alive==0) {puts("FP");return true;} return false;}void print_ans()//输出结果。 { for(int i=1;i<=n;i++,puts("")) { if(pig[i].alive==0) {printf("DEAD");continue;} pig[i].dust_paid(); for(int j=1;j<=pig[i].num_paid;j++) printf("%c ",pig[i].paid[j]); } return ;}void get_card(int i)//第i只猪摸牌。 { pig[i].paid[++pig[i].num_paid]=num_pid==m?pid[m]:pid[++num_pid]; pig[i].paid[++pig[i].num_paid]=num_pid==m?pid[m]:pid[++num_pid]; return ;}void action(int x)//第i只猪开始行动 { bool attack=false; if(!pig[x].alive) return ; get_card(x); for(int i=1;i=pig[i].num_paid;i++) { int ch=pig[x].paid[i]; if(ch==0) continue; //如果是空牌就过。 else if(pig[x].alive<4&&pig[x].paid[i]=='P') pig[x].paid[i]=0,pig[x].alive++; //如果血量没满且有桃。 else if(pig[x].paid[i]=='Z') pig[x].equip=true,pig[x].paid[i]=0,i=1; //如果是诸葛连弩,装上,从头扫。 else if(pig[x].paid[i]=='D') continue; //如果是闪就过。 else if(pig[x].paid[i]=='K') //如果是杀,且有第一击杀目标。 { //判断能不能杀。 if(!pig[x].equip) { } } }}int main(){ start();// for(int i=1;i<=n;i++,puts(""),puts(""))// printf("%d:\n",i),pig[i].debug();// printf("牌堆:\n ");// for(int i=1;i<=m;i++) printf("%c ",pid[i]); return 0;}/*3 10MP D D F FZP N N N DFP J J J JF F D D J J F F K D*/
转载地址:http://mxlxl.baihongyu.com/