一个正连载的game

· · 个人记录

一个正在连载的新编卡牌游戏

曾经:1.0版本:与一种怪无限单挑

目前:1.1版本:在1.0版本上增加一种怪和收获功能

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
struct card{
    string name;
    int xiaoguo[11],haonen;
};
struct zt{
    string ztname[15]={"力量","格挡","虚弱","敏捷","智慧","死亡","中毒","祝福","蓄力","神化","易伤"}; 
    int zhuangtai[15];
}you,guai;
card paidui[40],qipai[40],shoupai[40];
int qipaishu,paiduishu,shoupaishu,paishu;
card pai[85],youpai[40];
string xgname[15]={"伤害","格挡","群体伤害","虚弱","易伤","回能","力量","献祭血量","愤怒","平静","抽牌"};
int nengliang,choupai,shangxian1,shangxian2,xueliang,jinbi,guan;
map<string,int>mp;
void init1(){
    pai[1].name="攻击";
    pai[1].xiaoguo[0]=6,pai[1].haonen=1;
    mp[pai[1].name]=1;
    pai[2].name="格挡";
    pai[2].xiaoguo[1]=5,pai[2].haonen=1;
    mp[pai[1].name]=2;
    pai[3].name="顺斩";
    pai[3].xiaoguo[2]=5,pai[3].haonen=1;
    mp[pai[1].name]=3;
    pai[4].name="肌肉强化";
    pai[4].xiaoguo[6]=1,pai[4].haonen=1;
    mp[pai[1].name]=4;
    pai[5].name="专注";
    pai[5].xiaoguo[5]=1,pai[5].haonen=0;
    mp[pai[1].name]=5;
    pai[6].name="飞跃";
    pai[6].xiaoguo[1]=8,pai[6].haonen=1;
    pai[6].xiaoguo[10]=1,mp[pai[1].name]=6;
    for (int i=1;i<=10;i++)youpai[i]=pai[(i-1)%2+1];
    youpai[11]=youpai[13]=pai[6],youpai[12]=youpai[14]=pai[3];paishu=16;
    youpai[15]=pai[4],youpai[16]=pai[5];
    nengliang=3;xueliang=20;shangxian1=20;shangxian2=3,choupai=3;
}
int cmp(card x,card y){
    return rand()%2;
}
void xipai(){
    sort(qipai+1,qipai+qipaishu+1,cmp);
    paiduishu=qipaishu,qipaishu=0;
    for (int i=1;i<=paiduishu;i++)
        paidui[i]=qipai[i];
}
void shu_gonji(int x){
    printf("                                                         \n");
    printf("                                         /\\              \n");
    printf("                                        |  |             \n");
    printf("                                       ------      %d     \n",x);
    printf("                                         ||              \n");
    printf("                                                         \n");
    printf("                                                         \n");
    printf("                                                         \n");
}
void shu_fangyu(int x){
    printf("                                                         \n");
    printf("                                   ______                \n");
    printf("                                   |    |                \n");
    printf("                                   | !! |          %d     \n",x);
    printf("                                   \\    /                \n");
    printf("                                    \\  /                 \n");
    printf("                                     \\/                  \n");
    printf("                                                         \n");
}
int xsc1(int xue,int shx,int x,int huihe){
    system("cls");
    printf("                      第%d回合                               \n",huihe);
    printf("你:%d/%d                VS                 飞行兽:%d/%d\n",xueliang,shangxian1,xue,shx);
    if(huihe%2)shu_gonji(x);
    else shu_fangyu(x);
    printf("你的状态:");
    for (int i=0;i<11;i++)
        if(you.zhuangtai[i])cout<<you.ztname[i],printf("%d ",you.zhuangtai[i]);
    printf("\n");
    printf("飞行兽的状态:");
    for (int i=0;i<11;i++)
        if(guai.zhuangtai[i])cout<<guai.ztname[i],printf("%d ",guai.zhuangtai[i]);
    printf("\n");
    for (int i=1;i<=shoupaishu;i++){
        printf("%d:",i);
        cout<<shoupai[i].name;
        printf("\n");
    }
    printf("0:跳过\n");
    printf("牌堆:%d          能量:%d             弃牌堆:%d\n",paiduishu,nengliang,qipaishu); 
}
int xsc2(int xue,int shx,int x,int huihe){
    system("cls");
    printf("                      第%d回合                               \n",huihe);
    printf("你:%d/%d                VS                  幻兽:%d/%d\n",xueliang,shangxian1,xue,shx);
    shu_gonji(x);
    printf("你的状态:");
    for (int i=0;i<11;i++)
        if(you.zhuangtai[i])cout<<you.ztname[i],printf("%d ",you.zhuangtai[i]);
    printf("\n");
    printf("幻兽的状态:");
    for (int i=0;i<11;i++)
        if(guai.zhuangtai[i])cout<<guai.ztname[i],printf("%d ",guai.zhuangtai[i]);
    printf("\n");
    for (int i=1;i<=shoupaishu;i++){
        printf("%d:",i);
        cout<<shoupai[i].name;
        printf("\n");
    }
    printf("0:跳过\n");
    printf("牌堆:%d          能量:%d             弃牌堆:%d\n",paiduishu,nengliang,qipaishu); 
}
void qipaijieduan(){
    while(shoupaishu){
        qipai[++qipaishu]=shoupai[shoupaishu];
        shoupaishu--;
    }
}
void mopai(){
    if(!paiduishu)xipai();
    shoupai[++shoupaishu]=paidui[paiduishu];
    paiduishu--;
}
void diuqi(int x){
    qipai[++qipaishu]=shoupai[x];
    shoupaishu--;
    for (int i=x;i<=shoupaishu;i++)shoupai[i]=shoupai[i+1];
}
void shouhuo(){
    char c='*';
    while(c>'3'||c<'0'){
        printf("你可以选择一项:\n");
        printf("1:增加2点血量上限\n");
        printf("2:恢复5点血量\n");
        printf("3:随机一张牌加入牌堆\n");
        printf("0:勇者无畏,从来不需要帮助\n");
        c=getchar();
        if(c>='0'&&c<'4')break;
        system("cls");
    }
    if(c=='0')printf("勇者,一路向前吧");
    if(c=='1')xueliang+=2,shangxian1+=2;
    if(c=='2')xueliang=min(xueliang+4,shangxian1);
    if(c=='3'){
        int x=rand()%6+1;
        youpai[++paishu]=pai[x];
    }
}
void xzd1(){
    printf("你遇上了飞行兽(特性,伤害减免50%,向下取整)\n");
    Sleep(3000);system("cls");
    memset(you.zhuangtai,0,sizeof(you.zhuangtai));
    memset(guai.zhuangtai,0,sizeof(guai.zhuangtai));
    qipaishu=shoupaishu=0;paiduishu=paishu;
    for (int i=1;i<=paishu;i++)paidui[i]=youpai[i];
    sort(paidui+1,paidui+1+paiduishu,cmp);
    int xue=max(20,guan*5),shx=xue,huihe=0;
    while(xueliang>0){
        ++huihe;
        int x=rand()%5+5;
        xsc1(xue,shx,x,huihe);
        Sleep(1000);
        printf("你开始摸牌\n");nengliang=shangxian2;
        Sleep(1000);you.zhuangtai[1]=0;
        for (int i=1;i<=choupai;i++)mopai(),xsc1(xue,shx,x,huihe),Sleep(1000);
        int c,y;
        while(1){
            scanf("%d",&c);
            if(c==0)break;
            if(c>shoupaishu||c<0){
                printf("输入出错!!");
                Sleep(500);
                system("cls");
                xsc1(xue,shx,x,huihe);
                continue; 
            }
            card d=shoupai[c];
            if(d.haonen>nengliang){
                printf("你的能量不够了\n");
                Sleep(500);
                system("cls");
                xsc1(xue,shx,x,huihe);
                continue;
            }
            if(d.xiaoguo[0]){
                y=d.xiaoguo[0]+you.zhuangtai[0];y/=2;
                if(y<=guai.zhuangtai[1])guai.zhuangtai[1]-=y,y=0;
                else y-=guai.zhuangtai[1];
                if(y)xue-=y;
                if(xue<=0){printf("你击杀了飞行兽\n");Sleep(1000);break;}
            }
            if(d.xiaoguo[1])you.zhuangtai[1]+=d.xiaoguo[1];
            if(d.xiaoguo[2]){
                y=d.xiaoguo[2]+you.zhuangtai[0];y/=2;
                if(y<=guai.zhuangtai[1])guai.zhuangtai[1]-=y,y=0;
                else y-=guai.zhuangtai[1];
                if(y)xue-=y;
                if(xue<=0){printf("你击杀了飞行兽\n");Sleep(1000);break;}
            }
            if(d.xiaoguo[5])nengliang+=d.xiaoguo[5];
            if(d.xiaoguo[6])you.zhuangtai[0]+=d.xiaoguo[6];
            if(d.xiaoguo[10]){
                y=d.xiaoguo[10];
                while(y--)mopai();
            }
            diuqi(c);
            nengliang-=d.haonen;
            system("cls");
            xsc1(xue,shx,x,huihe);
        }
        if(xue<=0)break;
        printf("你结束了出牌\n");
        Sleep(1000);guai.zhuangtai[1]=0;
        qipaijieduan();
        system("cls");
        xsc1(xue,shx,x,huihe);
        Sleep(1000);
        if(huihe%2){
            if(x<=you.zhuangtai[1])you.zhuangtai[1]-=x,x=0;
            else x-=you.zhuangtai[1];
            if(x)xueliang-=x;
        }
        else guai.zhuangtai[1]+=x;
        system("cls");
        xsc1(xue,shx,x,huihe);
    }
    if(xueliang<=0)return;
    int x=rand()%10+10;
    jinbi+=x;
    printf("你得到了%d枚金币,你现在有%d金币\n",x,jinbi);
    system("cls");
    shouhuo();
}
void xzd2(){
    printf("你遇上了幻兽(特性,攻击时随机给予一种负面状态)\n");
    Sleep(3000);system("cls");
    memset(you.zhuangtai,0,sizeof(you.zhuangtai));
    memset(guai.zhuangtai,0,sizeof(guai.zhuangtai));
    qipaishu=shoupaishu=0;paiduishu=paishu;
    for (int i=1;i<=paishu;i++)paidui[i]=youpai[i];
    sort(paidui+1,paidui+1+paiduishu,cmp);
    int xue=max(30,guan*5),shx=xue,huihe=0;
    while(xueliang>0){
        ++huihe;
        int x=rand()%5+5;
        xsc2(xue,shx,x,huihe);
        Sleep(1000);
        printf("你开始摸牌\n");nengliang=shangxian2;
        Sleep(1000);you.zhuangtai[1]=0;
        for (int i=1;i<=choupai;i++)mopai(),xsc2(xue,shx,x,huihe),Sleep(1000);
        int c,y;
        while(1){
            scanf("%d",&c);
            if(c==0)break;
            if(c>shoupaishu||c<0){
                printf("输入出错!!");
                Sleep(500);
                system("cls");
                xsc2(xue,shx,x,huihe);
                continue; 
            }
            card d=shoupai[c];
            if(d.haonen>nengliang){
                printf("你的能量不够了\n");
                Sleep(500);
                system("cls");
                xsc2(xue,shx,x,huihe);
                continue;
            }
            if(d.xiaoguo[0]){
                y=d.xiaoguo[0]+you.zhuangtai[0];
                if(you.zhuangtai[2])y=y*3/4; 
                if(y<=guai.zhuangtai[1])guai.zhuangtai[1]-=y,y=0;
                else y-=guai.zhuangtai[1];
                if(y)xue-=y;
                if(xue<=0){printf("你击杀了幻兽\n");Sleep(1000);break;}
            }
            if(d.xiaoguo[1])you.zhuangtai[1]+=d.xiaoguo[1];
            if(d.xiaoguo[2]){
                y=d.xiaoguo[2]+you.zhuangtai[0];
                if(you.zhuangtai[2])y=y*3/4; 
                if(y<=guai.zhuangtai[1])guai.zhuangtai[1]-=y,y=0;
                else y-=guai.zhuangtai[1];
                if(y)xue-=y;
                if(xue<=0){printf("你击杀了幻兽\n");Sleep(1000);break;}
            }
            if(d.xiaoguo[5])nengliang+=d.xiaoguo[5];
            if(d.xiaoguo[6])you.zhuangtai[0]+=d.xiaoguo[6];
            if(d.xiaoguo[10]){
                y=d.xiaoguo[10];
                while(y--)mopai();
            }
            diuqi(c);
            nengliang-=d.haonen;
            system("cls");
            xsc2(xue,shx,x,huihe);
        }
        if(xue<=0)break;
        printf("你结束了出牌\n");
        if(you.zhuangtai[2])you.zhuangtai[2]--;
        if(you.zhuangtai[10])you.zhuangtai[10]--;
        Sleep(1000);guai.zhuangtai[1]=0;
        qipaijieduan();
        system("cls");
        xsc2(xue,shx,x,huihe);
        Sleep(1000);
        if(you.zhuangtai[10])x+=x/2;
        if(x<=you.zhuangtai[1])you.zhuangtai[1]-=x,x=0;
        else x-=you.zhuangtai[1];
        if(x)xueliang-=x;
        else guai.zhuangtai[1]+=x;
        x=rand()%2;
        if(x){
            printf("你被赋予了2层虚弱\n");
            Sleep(1000);you.zhuangtai[2]+=2; 
        }
        else{
            printf("你被赋予了2层易伤\n");
            Sleep(1000);you.zhuangtai[10]+=2; 
        }
        system("cls");
        xsc2(xue,shx,x,huihe);
    }
    if(xueliang<=0)return;
    int x=rand()%10+10;
    jinbi+=x;
    printf("你得到了%d枚金币,你现在有%d金币\n",x,jinbi);
    system("cls");
    shouhuo();
}
void xz(){
    guan++;
    char c='*';
    int a[3];
    for (int i=1;i<=3;i++)a[i]=rand()%10;
    while(c<='0'||c>='4'){
        if(c!='*'){printf("你的输入出错了\n");Sleep(500);}
        system("cls");
        printf("你将要选择走哪条路?\n");
        for (int i=1;i<=3;i++){
            printf("%d条路:",i);
            if(a[i]<10)printf("一只小怪");
            printf("\n");
        }
        c=getchar();
    }
    system("cls");
    int x=a[c-48];
    if(a[x]<10){
        printf("迎接战斗吧!");
        Sleep(500);
        system("cls");
        x=rand()%2;
        if(x==0)xzd1();
        if(x==1)xzd2();
    }
}
void shanglu(){
    while(xueliang>0)xz(); 
}
int main(){
    srand(time(NULL));
//  shouhuo();
    init1();
    printf("欢迎来到勇者之路1.1\n");
    Sleep(2000);
    printf("勇者,开始你的征程吧!\n");
    Sleep(2000);
    system("cls");
    shanglu();
}