猪国杀战场记录仪

回复帖子

@wucstdio  清月 2018-11-06 20:32 回复

话说自己没事写一个这样的脚本看一群猪打架很有意思啊……

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<windows.h>
using namespace std;
//1--主公 2--忠臣 3--反贼
//1--桃(P) 2--杀(K) 3--闪(D) 4--决斗(F) 5--南猪入侵(N) 6--万箭齐发(W) 7--无懈可击(J) 8--猪哥连弩(Z)
int n,m,dis[15][15],shenfen[15],lei[15],pai[15][100005],num[15],hp[15],last[15],now;
bool z[15],tiao[15],over[15];
char paidui[2005];
int getshenfen()
{
    char c=getchar();
    while(c>'Z'||c<'A')c=getchar();
    getchar();
    switch(c)
    {
        case 'M':return 1;
        case 'Z':return 2;
        case 'F':return 3;
    }
}
char get2()
{
    char c=paidui[now];
    if(now!=m)
    char c=getchar();
    while(c>'Z'||c<'A')c=getchar();
    switch(c)
    {
        case 'P':return 1;
        case 'K':return 2;
        case 'D':return 3;
        case 'F':return 4;
        case 'N':return 5;
        case 'W':return 6;
        case 'J':return 7;
        case 'Z':return 8;
    }
}
int get()
{
    int c=paidui[now];
    if(now!=m)now++;
    return c;
}
void die(int x)
{
    over[x]=1;
    printf("%d:啊~~~~我~~~~死~~~~了~~~~~~~~\n",x);
    Sleep(2000);
    bool flag=1;
    for(int i=1;i<=n;i++)
      if(!over[i]&&shenfen[i]==3)
        flag=0;
    if(flag)
    {
        printf("MP\n");
        for(int i=1;i<=n;i++)
        {
            if(over[i])printf("DEAD\n");
            else
            {
                for(int j=1;j<=num[i];j++)
                {
                    if(pai[i][j]==1)putchar('P');
                    if(pai[i][j]==2)putchar('K');
                    if(pai[i][j]==3)putchar('D');
                    if(pai[i][j]==4)putchar('F');
                    if(pai[i][j]==5)putchar('N');
                    if(pai[i][j]==6)putchar('W');
                    if(pai[i][j]==7)putchar('J');
                    if(pai[i][j]==8)putchar('Z');
                    if(j!=num[i])putchar(' ');
                }
                putchar('\n');
            }
        }
        exit(0);
    }
    if(shenfen[x]==1)
    {
        printf("FP\n");
        for(int i=1;i<=n;i++)
        {
            if(over[i])printf("DEAD\n");
            else
            {
                for(int j=1;j<=num[i];j++)
                {
                    if(pai[i][j]==1)putchar('P');
                    if(pai[i][j]==2)putchar('K');
                    if(pai[i][j]==3)putchar('D');
                    if(pai[i][j]==4)putchar('F');
                    if(pai[i][j]==5)putchar('N');
                    if(pai[i][j]==6)putchar('W');
                    if(pai[i][j]==7)putchar('J');
                    if(pai[i][j]==8)putchar('Z');
                    if(j!=num[i])putchar(' ');
                }
                putchar('\n');
            }
        }
        exit(0);
    }
    if(shenfen[x]==2)
    {
        printf("主公:我的爱卿!\n");
        Sleep(3000);
        if(last[x]==1)
        {
            printf("主公弃掉所有手牌和装备\n");
            Sleep(3000);
            z[1]=0;
            num[1]=0;
        }
    }
    if(shenfen[x]==3)
    {
        printf("主公:反贼死了,前来领赏!\n");
        Sleep(3000);
        pai[last[x]][++num[last[x]]]=get();
        pai[last[x]][++num[last[x]]]=get();
        pai[last[x]][++num[last[x]]]=get();
    }
}
@wucstdio  清月 2018-11-06 20:32 回复 举报
bool wuxiekeji(int x)
{
    for(int y=x%n+1;y!=x;y=y%n+1)
    {
        if(over[y])continue;
        if(shenfen[x]==1&&shenfen[y]==2)continue;
        if(shenfen[x]==2&&shenfen[y]==2)continue;
        if(shenfen[x]==3&&shenfen[y]==3)continue;
        if(shenfen[x]==2&&shenfen[y]==1)continue;
        for(int i=1;i<=num[y];i++)
        {
            if(pai[y][i]!=7)continue;
            for(int j=i+1;j<=num[y];j++)
              pai[y][j-1]=pai[y][j];
            num[y]--;
            tiao[y]=1;
            printf("%d:无懈可击!\n",y);
            Sleep(1000);
            return !wuxiekeji(y);
        }
    }
    return 1;
}
void nanmanruqin(int x)
{
    for(int i=x%n+1;i!=x;i=i%n+1)
    {
        if(over[i])continue;
        printf("南蛮->%d\n",i);
        Sleep(1000);
        bool dixiao=0;
        for(int j=1;j<=num[x];j++)
        {
            if(pai[x][j]==7&&tiao[i]&&(shenfen[i]==shenfen[x]||(shenfen[i]^shenfen[x])==3))
            {
                for(int k=j+1;k<=num[x];k++)
                  pai[x][k-1]=pai[x][k];
                num[x]--;
                printf("%d:无懈可击!\n",x);
                Sleep(1000);
                tiao[x]=1;
                dixiao=wuxiekeji(x);
            }
            if(dixiao)break;
        }
        if(!dixiao)
        for(int j=x%n+1;j!=x;j=j%n+1)
        {
            if(over[j])continue;
            for(int k=1;k<=num[j];k++)
            {
                if(pai[j][k]==7&&tiao[i]&&(shenfen[i]==shenfen[j]||(shenfen[i]^shenfen[j])==3))
                {
                    for(int l=k+1;l<=num[j];l++)
                      pai[j][l-1]=pai[j][l];
                    num[j]--;
                    tiao[j]=1;
                    printf("%d:无懈可击!\n",j);
                    Sleep(1000);
                    dixiao=wuxiekeji(j);
                }
                if(dixiao)break;
            }
            if(dixiao)break;
        }
        if(!dixiao)
        for(int j=1;j<=num[i];j++)
        {
            if(pai[i][j]==2)
            {
                for(int k=j+1;k<=num[i];k++)
                  pai[i][k-1]=pai[i][k];
                num[i]--;
                printf("%d:杀!\n",i);
                Sleep(1000);
                dixiao=1;
                break;
            }
        }
        if(!dixiao)
        {
            printf("%d:啊!\n",i);
            Sleep(1000);
            hp[i]--;
            last[i]=x;
            if(i==1&&!tiao[x])lei[x]=1;
            if(hp[i]>0)continue;
            for(int j=1;j<=num[i];j++)
            {
                if(pai[i][j]==1)
                {
                    for(int k=j+1;k<=num[i];k++)
                      pai[i][k-1]=pai[i][k];
                    num[i]--;
                    printf("桃!\n");
                    Sleep(1000);
                    hp[i]++;
                    break;
                }
            }
            if(hp[i]<=0)die(i);
        }
    }
}
void wanjianqifa(int x)
{
    for(int i=x%n+1;i!=x;i=i%n+1)
    {
        if(over[i])continue;
        printf("万箭->%d\n",i);
        Sleep(1000);
        bool dixiao=0;
        for(int j=1;j<=num[x];j++)
        {
            if(pai[x][j]==7&&tiao[i]&&(shenfen[i]==shenfen[x]||(shenfen[i]^shenfen[x])==3))
            {
                for(int k=j+1;k<=num[x];k++)
                  pai[x][k-1]=pai[x][k];
                num[x]--;
                printf("%d:无懈可击!\n",x);
                Sleep(1000);
                tiao[x]=1;
                dixiao=wuxiekeji(x);
            }
            if(dixiao)break;
        }
        if(!dixiao)
        for(int j=x%n+1;j!=x;j=j%n+1)
        {
            if(over[j])continue;
            for(int k=1;k<=num[j];k++)
            {
                if(pai[j][k]==7&&tiao[i]&&(shenfen[i]==shenfen[j]||(shenfen[i]^shenfen[j])==3))
                {
                    for(int l=k+1;l<=num[j];l++)
                      pai[j][l-1]=pai[j][l];
                    num[j]--;
                    tiao[j]=1;
                    printf("%d:无懈可击!\n",j);
                    Sleep(1000);
                    dixiao=wuxiekeji(j);
                }
                if(dixiao)break;
            }
            if(dixiao)break;
        }
        if(!dixiao)
        for(int j=1;j<=num[i];j++)
        {
            if(pai[i][j]==3)
            {
                for(int k=j+1;k<=num[i];k++)
                  pai[i][k-1]=pai[i][k];
                num[i]--;
                printf("%d:闪!\n",i);
                Sleep(1000);
                dixiao=1;
                break;
            }
        }
        if(!dixiao)
        {
            printf("%d:啊!\n",i);
            Sleep(1000);
            hp[i]--;
            last[i]=x;
            if(i==1&&!tiao[x])lei[x]=1;
            if(hp[i]>0)continue;
            for(int j=1;j<=num[i];j++)
            {
                if(pai[i][j]==1)
                {
                    for(int k=j+1;k<=num[i];k++)
                      pai[i][k-1]=pai[i][k];
                    num[i]--;
                    printf("桃!\n");
                    Sleep(1000);
                    hp[i]++;
                    break;
                }
            }
            if(hp[i]<=0)die(i);
        }
    }
}
void sha(int from,int x)
{
    for(int i=1;i<=num[x];i++)
    {
        if(pai[x][i]==3)
        {
            printf("%d:闪!\n",x);
            Sleep(1000);
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            return;
        }
    }
    hp[x]--;
    printf("%d:啊!\n",x);
    Sleep(1000);
    last[x]=from;
    if(hp[x]>0)return;
    for(int i=1;i<=num[x];i++)
    {
        if(pai[x][i]==1)
        {
            hp[x]++;
            printf("桃!\n");
            Sleep(1000);
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            break;
        }
    }
    if(hp[x]<=0)die(x);
}
void juedou(int x,int y)
{
    if(shenfen[x]==1&&shenfen[y]==2)
    {
        hp[y]--;
        printf("%d:啊!\n",y);
        Sleep(1000);
        last[y]=x;
        if(hp[y]>0)return;
        for(int i=1;i<=num[y];i++)
        {
            if(pai[y][i]==1)
            {
                hp[y]++;
                printf("桃!\n");
                Sleep(1000);
                for(int j=i+1;j<=num[y];j++)
                  pai[y][j-1]=pai[y][j];
                num[y]--;
                break;
            }
        }
        if(hp[y]<=0)die(y);
        return;
    }
    for(int i=x%n+1;i!=x;i=i%n+1)
    {
        if(over[i])continue;
        for(int j=1;j<=num[i];j++)
        {
            if(pai[i][j]==7&&tiao[y]&&(shenfen[y]==shenfen[i]||(shenfen[i]^shenfen[y])==3))
            {
                for(int k=j+1;k<=num[i];k++)
                  pai[i][k-1]=pai[i][k];
                num[i]--;
                tiao[i]=1;
                printf("%d:无懈可击!\n",i);
                Sleep(1000);
                if(wuxiekeji(i))return;
            }
        }
    }
    bool flag=1;
    while(flag)
    {
        flag=0;
        for(int i=1;i<=num[y];i++)
        {
            if(pai[y][i]==2)
            {
                for(int j=i+1;j<=num[y];j++)
                  pai[y][j-1]=pai[y][j];
                printf("%d:杀!\n",y);
                Sleep(1000);
                num[y]--;
                flag=1;
                break;
            }
        }
        swap(x,y);
    }
    printf("%d:啊!\n",x);
    Sleep(1000);
    hp[x]--;
    last[x]=y;
    if(hp[x]>0)return;
    for(int i=1;i<=num[x];i++)
    {
        if(pai[x][i]==1)
        {
            hp[x]++;
            printf("桃!\n");
            Sleep(1000);
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            break;
        }
    }
    if(hp[x]<=0)die(x);
}
void work(int x)
{
    pai[x][++num[x]]=get();
    pai[x][++num[x]]=get();
    Sleep(2000);
    printf("Begin:%d\n",x);
    printf("Emmmm.....");
    Sleep(2000);
    for(int i=1;i<=num[x];i++)
    {
        if(pai[x][i]==1)printf("【桃】");
        if(pai[x][i]==2)printf("【杀】");
        if(pai[x][i]==3)printf("【闪】");
        if(pai[x][i]==4)printf("【决斗】");
        if(pai[x][i]==5)printf("【南蛮入侵】");
        if(pai[x][i]==6)printf("【万箭齐发】");
        if(pai[x][i]==7)printf("【无懈可击】");
        if(pai[x][i]==8)printf("【诸葛连弩】");
    }
    printf("\n");
    Sleep(1000);
    for(int j=1;j<=n;j++)
    {
        printf("%d:",j);
        if(shenfen[j]==1)printf("{主公}");
        if(shenfen[j]==2)printf("{忠臣}");
        if(shenfen[j]==3)printf("{反贼}");
        if(tiao[j])printf("(暴露)");
        else if(lei[j]&&x==1)printf("(类反)");
        else printf("      ");
        printf("hp:");
        for(int k=1;k<=4;k++)
        {
            if(k<=hp[j])putchar('*');
            else putchar(' ');
        }
        if(over[j])printf("DEAD");
        else
        {
            for(int k=1;k<=num[j];k++)
            {
                if(pai[j][k]==1)printf("   【桃】   ");
                if(pai[j][k]==2)printf("   【杀】   ");
                if(pai[j][k]==3)printf("   【闪】   ");
                if(pai[j][k]==4)printf("  【决斗】  ");
                if(pai[j][k]==5)printf("【南蛮入侵】");
                if(pai[j][k]==6)printf("【万箭齐发】");
                if(pai[j][k]==7)printf("【无懈可击】");
                if(pai[j][k]==8)printf("【诸葛连弩】");
            }
        }
        printf("\n");
    }
    Sleep(2000);
    bool pos_sha=1;
    for(int i=1;i<=num[x];i++)
    {
        if(pai[x][i]==1&&hp[x]!=4)
        {
            hp[x]++;
            pai[x][i]=0;
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            Sleep(1000);
            printf("桃!\n");
            Sleep(1000);
            i=0;
            continue;
        }
        if(pai[x][i]==2&&pos_sha)
        {
            int y=x%n+1;
            while(over[y])y=y%n+1;
            if(shenfen[x]==1)
            {
                if(lei[y]&&!tiao[y]||shenfen[y]==3&&tiao[y])
                {
                    for(int j=i+1;j<=num[x];j++)
                      pai[x][j-1]=pai[x][j];
                    num[x]--;
                    Sleep(1000);
                    printf("杀!->%d\n",y);
                    Sleep(1000);
                    i=0;
                    sha(x,y);
                    if(!z[x])pos_sha=0;
                }
            }
            else if(shenfen[x]==2)
            {
                if(tiao[y]&&shenfen[y]==3)
                {
                    for(int j=i+1;j<=num[x];j++)
                      pai[x][j-1]=pai[x][j];
                    num[x]--;
                    tiao[x]=1;
                    Sleep(1000);
                    printf("杀!->%d\n",y);
                    Sleep(1000);
                    i=0;
                    sha(x,y);
                    if(!z[x])pos_sha=0;
                }
            }
            else
            {
                if(tiao[y]&&shenfen[y]==2||shenfen[y]==1)
                {
                    for(int j=i+1;j<=num[x];j++)
                      pai[x][j-1]=pai[x][j];
                    num[x]--;
                    tiao[x]=1;
                    Sleep(1000);
                    printf("杀!->%d\n",y);
                    Sleep(1000);
                    i=0;
                    sha(x,y);
                    if(!z[x])pos_sha=0;
                }
            }
        }
        if(pai[x][i]==4)
        {
            for(int y=x%n+1;y!=x;y=y%n+1)
            {
                if(over[y])continue;
                if(shenfen[x]==1)
                {
                    if(lei[y]&&!tiao[y]||shenfen[y]==3&&tiao[y])
                    {
                        for(int j=i+1;j<=num[x];j++)
                          pai[x][j-1]=pai[x][j];
                        num[x]--;
                        Sleep(1000);
                        printf("决斗!->%d\n",y);
                        Sleep(1000);
                        i=0;
                        juedou(x,y);
                        break;
                    }
                }
                else if(shenfen[x]==2)
                {
                    if(tiao[y]&&shenfen[y]==3)
                    {
                        for(int j=i+1;j<=num[x];j++)
                          pai[x][j-1]=pai[x][j];
                        num[x]--;
                        tiao[x]=1;
                        Sleep(1000);
                        printf("决斗!->%d\n",y);
                        Sleep(1000);
                        i=0;
                        juedou(x,y);
                        break;
                    }
                }
                else
                {
                    if(shenfen[y]==1)
                    {
                        for(int j=i+1;j<=num[x];j++)
                          pai[x][j-1]=pai[x][j];
                        num[x]--;
                        tiao[x]=1;
                        Sleep(1000);
                        printf("决斗!->%d\n",y);
                        Sleep(1000);
                        i=0;
                        juedou(x,y);
                        break;
                    }
                }
            }
            if(over[x])break;
        }
        if(pai[x][i]==5)
        {
            pai[x][i]=0;
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            Sleep(1000);
            printf("南蛮入侵!\n");
            Sleep(1000);
            i=0;
            nanmanruqin(x);
            continue;
        }
        if(pai[x][i]==6)
        {
            pai[x][i]=0;
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            Sleep(1000);
            printf("万箭齐发!\n");
            Sleep(1000);
            i=0;
            wanjianqifa(x);
            continue;
        }
        if(pai[x][i]==8)
        {
            pai[x][i]=0;
            for(int j=i+1;j<=num[x];j++)
              pai[x][j-1]=pai[x][j];
            num[x]--;
            Sleep(1000);
            printf("诸葛连弩!\n");
            Sleep(1000);
            i=0;
            z[x]=1;
            pos_sha=1;
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    tiao[1]=1;
    for(int i=1;i<=n;i++)
    {
        hp[i]=4;
        shenfen[i]=getshenfen();
        pai[i][++num[i]]=get2();
        pai[i][++num[i]]=get2();
        pai[i][++num[i]]=get2();
        pai[i][++num[i]]=get2();
    }
    for(int i=1;i<=m;i++)
      paidui[i]=get2();
    now=1;
    for(int i=1;;i=i%n+1)
    {
        if(over[i])continue;
        work(i);
    }
    return 0;
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。