一个正连载的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();
}