游玩的时候记得在编译时做以下操作:点击工具->编译选项->编译器->编译时加入以下命令打钩->输入-std=c++14
还要把输出框的大小改成:长165,宽65。更舒适。
(大家可以教教我怎么用程序修改长宽)
游戏分为四个身份,四人游玩。
首先查看技能和道具简介,然后开始游戏。
每一回合可以从道具池中抽奖,并用抽到的能量使用技能。
玩家死亡是在回合结束后算的。
“下一回合跳过xx”会在下一次轮到被使用者后自动跳过。
可能会有亿点BUG,如果出现问题或者有不合理的地方(如能量消耗与技能强度),大家可以积极留言。
一键三连拿走呦~
(第一个千行大作,希望大家多多支持呀)
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
vector<string> id={"冰火战士","药剂巫师","骷髅法师","太乙真人"}; //身份
vector<string> prize={"谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","谢谢惠顾","一次抽奖机会","一次抽奖机会","一次抽奖机会","一次抽奖机会","一次抽奖机会","两次抽奖机会","两次抽奖机会","两次抽奖机会","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","一格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","两格能量","三格能量","三格能量","三格能量","三格能量","三格能量","三格能量","三格能量","四格能量","四格能量","四格能量","四格能量","四格能量","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","气拳","紧箍咒","紧箍咒","紧箍咒","紧箍咒","紧箍咒","紧箍咒","紧箍咒","紧箍咒","紧箍咒","紧箍咒","大雾弥漫","大雾弥漫","大雾弥漫","大雾弥漫","大雾弥漫","大雾弥漫","知识的洗礼","知识的洗礼","知识的洗礼","知识的洗礼","知识的洗礼","知识的洗礼"}; //奖池
/*
谢谢惠顾:10%
一次抽奖机会:5%
两次抽奖机会:3%
一格能量:20%
两格能量:13%
三格能量:7%
四格能量:5%
气拳:15%
紧箍咒:10%
大雾弥漫:6%
知识的洗礼:6%
*/
vector<string> by; //备用奖池
vector<string> dj; //总道具
vector<string> hv_jn[10]; //玩家拥有技能
vector<string> hv_dj[10]; //玩家拥有道具
string what[15][15]; //奖池内容
int srt,wj,hh,sum=100,leave,wz,win,jh[10],hp[10],nl[10],hj[10],du[10],all[10],chou[10],ji[10],xmc,qys,kl[10],dwmm[10]; //输入次数,当前玩家,回合,奖池剩余量,死亡人数,雾中人数,胜利者,抽奖机会,血量,能量,护甲,持续扣1格血的回合数,被跳过的回合数,被跳过的抽奖阶段数,被跳过的使用技能阶段数,休眠舱层数,轻羽扇是否使用,被傀儡的回合数,处在大雾弥漫几回合。
bool vis[15][15],die[10]; //奖池格子是否被抽过,玩家是否死亡
map<int,string> num_jn; //编号变技能名
map<int,string> num_dj; //编号变道具名
map<string,int> name_num; //道具名变编号
map<string,int> name_nl; //技能名变能量
map<string,string> des; //简介
void SetConsoleSize(int width,int height)
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
COORD bufferSize={static_cast<short>(width),static_cast<short>(height)};
if(!SetConsoleScreenBufferSize(hConsole,bufferSize))
SMALL_RECT windowSize={0,0,static_cast<short>(width-1),static_cast<short>(height-1)};
}
string finding(string key_to_find) //查找
{
std::map<std::string,std::string>::iterator it=des.find(key_to_find);
if(it!=des.end())
{
return it->second;
}
else
{
return "暂无。";
}
}
void describe(string th) //输出简介
{
cout<<finding(th)<<endl<<endl;
return ;
}
void join_des() //添加描述
{
//冰火
hv_jn[1].push_back("轻羽扇");
hv_jn[1].push_back("冰原域");
hv_jn[1].push_back("休眠舱");
hv_jn[1].push_back("焱冰束");
des["轻羽扇"]="轻羽扇,辅助技能,消耗2格能量,获得「火」效果,使下一次伤害附加火焰效果,即伤害翻倍(不能叠加)。\n";
des["冰原域"]="冰原域,控制技能,消耗3格能量,对所有敌人使用,附加「缓诅」效果,即跳过其下一回合抽道具阶段。\n";
des["休眠舱"]="休眠舱,防御技能,消耗2格能量,下一回合获得「反甲」效果,可在本回合内抵御一次任意数值攻击,并对攻击者造成所抵御攻击的50%伤害反甲(向下取整)。\n";
des["焱冰束"]="焱冰束,攻击技能,消耗3格能量,选择一人使用,造成2格伤害,并附加「冰火」效果,下一回合再次造成1格伤害。\n";
//巫师
hv_jn[2].push_back("红十字");
hv_jn[2].push_back("四面雨");
hv_jn[2].push_back("藤生壁");
hv_jn[2].push_back("沼泽漫");
des["红十字"]="红十字,辅助技能,消耗2格能量,对自己使用生命药剂,回复自己1~3格hp(上限10格)\n";
des["四面雨"]="四面雨,控制技能,消耗3格能量,选择一人使用,附加「逃遁」效果,在其身边降下药雨,使其不得不躲避,即跳过整个下一回合。\n";
des["藤生壁"]="藤生壁,防御技能,消耗2格能量,在面前使用生长药剂,迅速长出高大的藤蔓,即获得护盾,可承受2格伤害。\n";
des["沼泽漫"]="沼泽漫,攻击技能,消耗3格能量,选择一人使用,投射毒药剂,附加「毒心骨」效果,造成1格伤害,并持续两回合造成1格伤害。\n";
//法师
hv_jn[3].push_back("百鬼行");
hv_jn[3].push_back("牵魂索");
hv_jn[3].push_back("骸骨甲");
hv_jn[3].push_back("兵临城");
des["百鬼行"]="百鬼行,辅助技能,消耗3格能量,选择一人使用,召唤百鬼,附加「逃遁」效果,使其不得不隐藏起来,即跳过整个下一回合。\n";
des["牵魂索"]="牵魂锁,控制技能,消耗5格能量,选择一人使用,附加「傀儡戏」效果,使其变为傀儡,控制其身体为己所用一回合。\n";
des["骸骨甲"]="骸骨甲,防御技能,消耗2格能量,给自己及傀儡套上一层装甲,可承受1格伤害。\n";
des["兵临城"]="兵临城,攻击技能,消耗2~5格能量,召唤一群骷髅骑兵,攻击一人消耗2格能量,攻击两人消耗4格能量,攻击三人消耗5格能量,并对被攻击者造成2格伤害。\n";
//太乙
hv_jn[4].push_back("洒玉露");
hv_jn[4].push_back("酒壶吸");
hv_jn[4].push_back("金莲身");
hv_jn[4].push_back("如律令");
des["洒玉露"]="洒玉露,辅助技能,消耗2格能量,恢复自己2格hp,并随机恢复一人1格hp。\n";
des["酒壶吸"]="酒壶吸,控制技能,消耗2格能量,选择一人使用,夺取随机一个道具(若没有道具,则获得一次抽奖机会)。\n";
des["金莲身"]="金莲身,防御技能,消耗2格能量,进入十二品金莲冷静一波,获得2格护甲,并有20%概率恢复1格hp。\n";
des["如律令"]="如律令,攻击技能,消耗3格能量,选择一人使用,对其施加急急如律令,造成2格伤害,并随机误伤一人造成1格伤害。\n";
//道具
dj.push_back("气拳");
dj.push_back("紧箍咒");
dj.push_back("大雾弥漫");
dj.push_back("知识的洗礼");
des["气拳"]="气拳,普通攻击,选择一人使用,造成1格伤害。\n";
des["紧箍咒"]="紧箍咒,普通控制,选择一人使用,附加「禁锢」效果,使其下一回合无法使用技能,只能抽道具和使用道具。\n";
des["大雾弥漫"]="大雾弥漫,普通防御,获得「雾中」效果,进入隐蔽状态,本回合无法被选中,但也无法使用技能及其余道具。\n";
des["知识的洗礼"]="知识的洗礼,普通辅助,恢复1格1hp,并消除身上的所有负面效果。\n";
return ;
}
void dl() //打乱道具池
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=10;j++)
{
int r=rand()%prize.size();
what[i][j]=prize[r];
by.push_back(prize[r]);
prize.erase(prize.begin()+r,prize.begin()+r+1);
}
}
return ;
}
void check() //查看简介
{
system("cls");
int ud=0,tg=0;
printf("现在所有人开始查看技能与道具的简介...\n\n");
system("pause");
printf("\n\n");
printf("是否选择跳过(1 跳过 / 其余任意数 不跳过):");
scanf("%d",&tg);
printf("\n\n");
if(tg==1) return ;
system("cls");
int want;
while(1)
{
for(int i=1;i<=4;i++) cout<<i<<":"<<id[i-1]<<endl;
cout<<5<<":道具"<<endl;
while(1)
{
printf("输入1~5查看具体内容,6跳过...\n\n");
scanf("%d",&want);
printf("\n\n");
if(want==6) return ;
if(want<1||want>7)
{
printf("不能输入范围之外,请重新输入!\n\n");
Sleep(500);
system("pause");
continue;
}
system("cls");
break;
}
if(want<=4)
{
for(int i=1;i<=4;i+=ud+1)
{
ud=0;
cout<<hv_jn[want][i-1]<<":"<<endl<<endl;
describe(num_jn[(want-1)*4+i]);
if(i==1)
{
printf("输入任意数查看下一张:");
scanf("%d",&ud);
ud=0;
system("cls");
}
else if(i==4)
{
printf("输入1查看上一张/输入其余任意数 结束 :");
scanf("%d",&ud);
if(ud==1) ud=-2;
else
{
system("cls");
break;
}
system("cls");
}
else
{
printf("查看 输入1 上一张/输入2 下一张/输入其余任意数 跳过:");
scanf("%d",&ud);
if(ud==1) ud=-2;
else if(ud==2) ud=0;
else break;
system("cls");
}
}
}
else
{
for(int i=1;i<=4;i+=ud+1)
{
ud=0;
cout<<dj[i-1]<<":"<<endl<<endl;
describe(num_dj[i]);
if(i==1)
{
printf("输入任意数查看下一张:");
scanf("%d",&ud);
ud=0;
system("cls");
}
else if(i==4)
{
printf("输入1查看上一张/输入其余任意数 结束 :");
scanf("%d",&ud);
if(ud==1) ud=-2;
else
{
system("cls");
break;
}
system("cls");
}
else
{
printf("查看 输入1 上一张/输入2 下一张/输入其余任意数 跳过:");
scanf("%d",&ud);
if(ud==1) ud=-2;
else if(ud==2) ud=0;
else break;
system("cls");
}
}
}
system("cls");
}
return ;
}
void gj(int who,int to,int no) //攻击(攻击者,被攻击者,伤害)
{
if(die[to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
return ;
}
if(to==1&&xmc)
{
printf("玩家1的一个休眠舱遭受破坏,已退出该舱体,本体不会受到伤害。反甲发动,攻击者玩家%d受到%d格伤害。\n\n",who,(int)floor(0.5*no));
xmc--;
hp[who]-=(int)floor(0.5*no);
if(xmc==0) hj[1]=0;
Sleep(500);
system("pause");
return ;
}
if(who==1&&qys)
{
printf("玩家1处于「火」效果,伤害翻2倍");
no*=2;
qys=0;
Sleep(500);
system("pause");
}
if(hj[to]>=no) hj[to]-=no;
else
{
no-=hj[to];
hj[to]=0;
hp[to]-=no;
}
return ;
}
void print1(int www) //打印道具池
{
system("cls");
printf("┏");
for(int i=1;i<=39;i++) printf("━");
printf("┓\n");
printf("┃");
for(int i=1;i<=8;i++) printf(" ");
printf("道具池");
for(int i=1;i<=8;i++) printf(" ");
printf(" ┃\n");
printf("┃");
for(int i=1;i<=3;i++) printf(" ");
printf("奖池有10排10列,100个格子哦");
for(int i=1;i<=3;i++) printf(" ");
printf(" ┃\n");
printf("┣");
for(int i=1;i<=9;i++) printf("━━━┳");
printf("━━━┫\n┃");
int x=1,y;
for(int i=1;i<=10;i++)
{
y=i;
if(vis[x][y]) printf("╱ ┃");
else printf(" ┃");
}
printf("\n");
for(int i=1;i<=9;i++)
{
x=i+1;
printf("┣");
for(int i=1;i<=9;i++) printf("━━━╋");
printf("━━━┫\n┃");
for(int i=1;i<=10;i++)
{
y=i;
if(vis[x][y]) printf("╱ ┃");
else printf(" ┃");
}
printf("\n");
}
printf("┗");
for(int i=1;i<=9;i++) printf("━━━┻");
printf("━━━┛\n");
system("pause");
system("cls");
return ;
}
void print2(int www) //打印玩家状态
{
system("cls");
for(int i=1;i<=4;i++)
{
if(die[i]) continue;
printf("玩家%d:\nhp:",i);
for(int j=1;j<=hp[i];j++) printf("□");
if(hp[i]<=0) cout<<hp[i];
printf("\n护甲:");
if(hj[i]==1e9) printf("无限");
else for(int j=1;j<=hj[i];j++) printf("□");
if(hj[i]==0) cout<<"无";
printf("\n能量:%d",nl[i]);
printf("\n抽奖机会:%d",jh[i]);
printf("\n拥有道具:");
for(auto j:hv_dj[i]) cout<<j<<" ";
if(hv_dj[i].empty()) cout<<"无";
printf("\n拥有技能(所需能量):");
for(auto j:hv_jn[i])
{
cout<<j<<"(";
if(j!="兵临城") cout<<name_nl[j];
else cout<<"2~5";
cout<<") ";
}
printf("\n所处状态:");
bool bb=0;
if(du[i]) printf("持续扣1格血%d回合 ",du[i]),bb=1;
if(all[i]) printf("跳过%d个整个回合 ",all[i]),bb=1;
if(chou[i]) printf("跳过%d个抽奖阶段 ",chou[i]),bb=1;
if(ji[i]) printf("跳过%d个使用技能阶段 ",ji[i]),bb=1;
if(i==1&&xmc) printf("%d层休眠舱 ",xmc),bb=1;
if(i==1&&qys) printf("伤害翻2倍 "),bb=1;
if(kl[i]) printf("被玩家3控制%d回合 ",kl[i]),bb=1;
if(dwmm[i]) printf("处于雾中%d回合 ",dwmm[i]),bb=1;
if(!bb) cout<<"无";
printf("\n\n");
}
printf("玩家%d的回合!\n\n",www);
}
void cj(int &l) //抽奖
{
if(chou[l])
{
printf("玩家%d本回合跳过抽道具阶段,不能抽道具。\n\n",l);
chou[l]--;
Sleep(500);
system("pause");
return ;
}
int x=0,y=0;
while(jh[l])
{
print1(l);
print2(l);
Sleep(500);
printf("是否抽奖(1是/2否):");
int ans_cj;
scanf("%d",&ans_cj);
printf("\n\n");
if(ans_cj<1||ans_cj>2)
{
printf("不能输入其他,请重新输入。");
Sleep(500);
system("pause");
continue;
}
if(ans_cj==2) return ;
Sleep(500);
printf("请输入行和列抽奖~\n\n");
printf("行 列:");
scanf("%d%d",&x,&y);
printf("\n\n");
Sleep(500);
if(x<=0||x>=11||y<=0||y>=11)
{
printf("不能输入范围之外的格子,请重新输入!\n\n");
Sleep(500);
system("pause");
continue;
}
if(vis[x][y]==1)
{
printf("该格已被抽取,请换一个吧~\n\n");
Sleep(500);
system("pause");
continue;
}
jh[l]--;
sum--;
vis[x][y]=1;
printf("你抽到了: ");
string s=what[x][y];
cout<<s<<" !\n\n";
Sleep(500);
if(name_num[s]==1)
{
printf("真遗憾,下次好运!\n\n");
Sleep(500);
}
if(name_num[s]==2) jh[l]++;
else if(name_num[s]==3) jh[l]+=2;
else if(name_num[s]>=4&&name_num[s]<=7) nl[l]+=name_num[s]-3;
else if(name_num[s]>=8&&name_num[s]<=11) hv_dj[l].push_back(s);
system("pause");
}
return ;
}
void use_dj(int l) //使用道具
{
while(1)
{
if(hv_dj[l].empty())
{
printf("玩家%d暂无道具,已跳过使用道具阶段。",l);
Sleep(500);
system("pause");
return ;
}
string used="";
int x=0,ii;
while(1)
{
printf("你要使用什么道具(0 不使用道具/1 气拳/2 紧箍咒/3 大雾弥漫/4 知识的洗礼):");
scanf("%d",&ii);
printf("\n\n");
if(ii<0||ii>4)
{
printf("不能输入范围之外的道具,请重新输入!\n\n");
Sleep(500);
system("pause");
continue;
}
if(ii==0) return ;
used=num_dj[ii];
bool b=0;
for(int i=0;i<hv_dj[l].size();i++)
if(hv_dj[l][i]==used)
{
b=1;
x=i;
break;
}
if(b==0)
{
printf("暂无该道具,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
hv_dj[l].erase(hv_dj[l].begin()+x);
int use_to;
if(used=="气拳"||used=="紧箍咒")
{
while(1)
{
printf("请选择使用对象(输入编号):");
scanf("%d",&use_to);
printf("\n\n");
if(use_to<1||use_to>5)
{
printf("暂无该玩家,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(die[use_to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
continue;
}
if(dwmm[use_to])
{
printf("该玩家处于「雾中」效果,无法选中,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
}
if(used=="气拳")
{
gj(l,use_to,1);
if(!(use_to==1&&xmc))
{
if(l==1&&qys) printf("玩家%d被气拳攻击,伤害翻2倍,受到2格伤害。",use_to);
else printf("玩家%d被气拳攻击,受到1格伤害。",use_to);
}
}
if(used=="紧箍咒")
{
ji[use_to]++;
printf("玩家%d进入「禁锢」效果,下一回合无法使用技能。",use_to);
}
if(used=="大雾弥漫")
{
if(dwmm[l]==0) wz++;
dwmm[l]++;
printf("玩家%d进入「雾中」效果,下一回合无法被选中,无法使用技能、道具。",l);
}
if(used=="知识的洗礼")
{
hp[l]++;
du[l]=0,all[l]=0,chou[l]=0,ji[l]=0,dwmm[l]=0;
printf("玩家%d接受净化,恢复1格hp。",l);
if(hp[l]>10)
{
printf("hp抵达上限10格,不再增加。");
hp[l]=10;
}
}
printf("\n\n");
system("pause");
system("cls");
print2(l);
}
use_dj(l);
return ;
}
void use_jn(int l) //使用技能
{
if(ji[l])
{
printf("玩家%d本回合跳过使用技能阶段,不能使用技能。\n\n",l);
ji[l]--;
Sleep(500);
system("pause");
return ;
}
while(1)
{
if(nl[l]<2)
{
printf("玩家%d能量不足以使用任何技能,已跳过使用技能阶段。",l);
Sleep(500);
system("pause");
return ;
}
string used;
int x=0,ii;
while(1)
{
printf("你要使用什么技能(0 不使用技能/");
for(int i=1;i<4;i++) cout<<i<<' '<<hv_jn[l][i-1]<<'/';
cout<<4<<' '<<hv_jn[l][3]<<"):";
scanf("%d",&ii);
printf("\n\n");
if(ii<0||ii>4)
{
printf("不能输入范围之外的技能,请重新输入!\n\n");
Sleep(500);
system("pause");
continue;
}
if(ii==0) return ;
used=num_jn[(l-1)*4+ii];
if(name_nl[used]>nl[l])
{
printf("能量不足,请重新输入!\n\n");
Sleep(500);
system("pause");
continue;
}
bool b=0;
for(int j=0;j<hv_jn[l].size();j++)
{
if(hv_jn[l][j]==used)
{
b=1;
x=j;
break;
}
}
if(b==0)
{
printf("暂无该技能,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
if(used!="兵临城") nl[l]-=name_nl[used];
int use_to;
if(l==1)
{
if(used=="轻羽扇")
{
qys=1;
printf("玩家1获得「火」效果,下次伤害翻2倍。");
}
if(used=="冰原域")
{
if(!die[2]&&!dwmm[2])
{
chou[2]++;
printf("玩家2进入「缓诅」效果,下一回合跳过抽道具阶段。\n");
}
if(!die[3]&&!dwmm[3])
{
printf("玩家3进入「缓诅」效果,下一回合跳过抽道具阶段。\n");
chou[3]++;
}
if(!die[4]&&!dwmm[4])
{
printf("玩家4进入「缓诅」效果,下一回合跳过抽道具阶段。\n");
chou[4]++;
}
}
if(used=="休眠舱")
{
xmc++;
hj[1]=1e9;
printf("玩家1进入「反甲」效果,获得一层绝对防御。");
}
if(used=="焱冰束")
{
while(1)
{
printf("请选择使用对象(输入编号):");
scanf("%d",&use_to);
if(use_to<1||use_to>4)
{
printf("暂无该玩家,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(die[use_to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
continue;
}
if(dwmm[use_to])
{
printf("该玩家处于「雾中」效果,无法选中,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
if(!(use_to==1&&xmc))
{
if(qys)
{
du[use_to]+=2;
printf("玩家%d受到4格伤害,进入「冰火」效果,将持续2回合受到1格伤害。",use_to);
}
else
{
du[use_to]+=1;
printf("玩家%d受到2格伤害,进入「冰火」效果,将持续1回合受到1格伤害。",use_to);
}
}
gj(1,use_to,2);
}
}
if(l==2)
{
if(used=="四面雨"||used=="沼泽漫")
{
while(1)
{
printf("请选择使用对象(输入编号):");
scanf("%d",&use_to);
if(use_to<1||use_to>5)
{
printf("暂无该玩家,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(die[use_to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
continue;
}
if(dwmm[use_to])
{
printf("该玩家处于「雾中」效果,无法选中,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
}
if(used=="红十字")
{
int rr=rand()%3+1;
hp[l]+=rr;
printf("玩家2恢复%d格hp。",rr);
if(hp[l]>10)
{
printf("hp抵达上限10格,不再增加。");
hp[l]=10;
}
}
if(used=="四面雨")
{
all[use_to]++;
printf("玩家%d进入「逃遁」效果,跳过整个下一回合。",use_to);
}
if(used=="藤生壁")
{
hj[2]+=2;
printf("玩家2获得两格护甲。");
}
if(used=="沼泽漫")
{
gj(2,use_to,1);
if(!(use_to==1&&xmc))
{
du[use_to]+=2;
printf("玩家%d受到1格伤害,进入「毒心骨」效果,将持续2回合受到1格伤害。",use_to);
}
}
}
if(l==3)
{
if(used=="百鬼行"||used=="牵魂索")
{
while(1)
{
printf("请选择使用对象(输入编号):");
scanf("%d",&use_to);
if(use_to<1||use_to>5)
{
printf("暂无该玩家,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(die[use_to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
continue;
}
if(dwmm[use_to])
{
printf("该玩家处于「雾中」效果,无法选中,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
}
if(used=="百鬼行")
{
all[use_to]++;
printf("玩家%d进入「逃遁」效果,跳过整个下一回合。",use_to);
}
if(used=="牵魂索")
{
kl[use_to]++;
printf("玩家%d进入「傀儡戏」效果,请该玩家在下一次轮到自己后自愿让玩家2操作。",use_to);
}
if(used=="骸骨甲")
{
hj[2]+=2;
printf("玩家2获得两格护甲。");
}
if(used=="兵临城")
{
int use_num;
bool flag=0;
while(1)
{
printf("请选择使用人数(1~3):");
scanf("%d",&use_num);
if(use_num<1||use_num>3)
{
printf("数量不对,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(use_num>4-leave)
{
printf("剩余人数不足,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(use_num>4-wz)
{
printf("可选人数不足,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if((use_num==1&&nl[l]<2)||(use_num==2&&nl[l]<4)||(use_num==3&&nl[l]<5))
{
printf("能量不够,请重新选择。\n\n");
Sleep(500);
system("pause");
flag=1;
break;
}
break;
}
if(flag) continue;
if(use_num<3) nl[l]-=use_num*2;
else nl[l]-=5;
for(int j=1;j<=use_num;j++)
{
while(1)
{
printf("请选择第%d个使用者(输入编号):",j);
scanf("%d",&use_to);
if(use_to<1||use_to>4)
{
printf("暂无该玩家,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(die[use_to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
continue;
}
if(dwmm[use_to])
{
printf("该玩家处于「雾中」效果,无法选中,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
break;
}
if(!(use_to==1&&xmc)) printf("玩家%d受到2格伤害。",use_to);
gj(3,use_to,2);
}
}
}
if(l==4)
{
if(used=="酒壶吸"||used=="如律令")
{
while(1)
{
printf("请选择使用对象(输入编号):");
scanf("%d",&use_to);
if(use_to<1||use_to>5)
{
printf("暂无该玩家,请重新选择。\n\n");
Sleep(500);
system("pause");
continue;
}
if(die[use_to])
{
printf("该玩家已死亡,请重新选择。");
Sleep(500);
system("pause");
continue;
}
break;
}
}
if(used=="洒玉露")
{
hp[4]+=2;
printf("玩家4恢复2格hp,");
if(hp[4]>10)
{
if(hp[4]>10)
{
printf("hp抵达上限10格,不再增加。");
hp[4]=10;
}
}
int rr=rand()%4+1;
while(die[rr]) rr=rand()%4+1;
printf("玩家%d被随机到,恢复1格hp。",rr);
hp[rr]++;
if(hp[rr]>10)
{
if(hp[rr]>10)
{
printf("hp抵达上限10格,不再增加。");
hp[rr]=10;
}
}
}
if(used=="酒壶吸")
{
if(hv_dj[use_to].empty())
{
printf("玩家%d暂无道具,玩家4获得一次抽道具机会。",use_to);
jh[4]++;
}
else
{
int rr=rand()%hv_dj[use_to].size();
hv_dj[4].push_back(hv_dj[use_to][rr]);
hv_dj[use_to].erase(hv_dj[use_to].begin()+rr);
}
}
if(used=="金莲身")
{
hj[4]+=2;
printf("玩家4获得两格护甲。");
int rr=rand()%5;
if(rr==0)
{
printf("\n玩家4运气爆棚,恢复1格hp。");
}
}
if(used=="如律令")
{
gj(4,use_to,2);
int rr=rand()%4+1;
while(die[rr]) rr=rand()%4+1;
gj(4,rr,1);
if(!(use_to==1&&xmc)) printf("玩家%d受到2格伤害。",use_to);
if(!(rr==1&&xmc)) printf("\n玩家%d被误伤,受到1格伤害。",rr);
}
}
printf("\n");
Sleep(500);
system("pause");
system("cls");
print2(l);
}
return ;
}
int main()
{
system("color f8"); //屏幕初始化
srand(time(0)); //rand初始化
SetConsoleSize(165,65); //屏幕大小
join_des();
for(int i=1;i<=4;i++) die[i]=0,jh[i]=3,nl[i]=2,hp[i]=10; //玩家状态初始化
name_num["谢谢惠顾"]=1;
name_num["一次抽奖机会"]=2;
name_num["两次抽奖机会"]=3;
name_num["一格能量"]=4;
name_num["两格能量"]=5;
name_num["三格能量"]=6;
name_num["四格能量"]=7;
name_num["气拳"]=8;
name_num["紧箍咒"]=9;
name_num["大雾弥漫"]=10;
name_num["知识的洗礼"]=11;
num_jn[1]="轻羽扇";
num_jn[2]="冰原域";
num_jn[3]="休眠舱";
num_jn[4]="焱冰束";
num_jn[5]="红十字";
num_jn[6]="四面雨";
num_jn[7]="藤生壁";
num_jn[8]="沼泽漫";
num_jn[9]="百鬼行";
num_jn[10]="牵魂索";
num_jn[11]="骸骨甲";
num_jn[12]="兵临城";
num_jn[13]="洒玉露";
num_jn[14]="酒壶吸";
num_jn[15]="金莲身";
num_jn[16]="如律令";
num_dj[1]="气拳";
num_dj[2]="紧箍咒";
num_dj[3]="大雾弥漫";
num_dj[4]="知识的洗礼"; //map初始化 2323232335222223
int sss[100]={0,2,3,2,3,2,3,2,3,3,5,2,2,2,2,2,3};
for(int i=1;i<=16;i++)
{
if(i==12) continue;
name_nl[num_jn[i]]=sss[i];
} //能量初始化
printf(" 欢迎来到道具池(4人版)!\n");
printf("---------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n");
printf(" 请在找齐玩家后开始游戏\n ");
system("pause");
system("cls");
check();
dl();
system("cls");
printf("游戏需要四名玩家,各自执掌一个身份,请提前自行决定谁是玩家几(玩家1:冰火战士,玩家2:药剂巫师,玩家3:骷髅法师,玩家4:太乙真人)。\n\n");
Sleep(500);
system("pause");
printf("\n\n决定好后开始游戏。游戏是回合制,每一回合分为三个阶段:抽道具,使用道具,使用技能。\n\n");
Sleep(500);
system("pause");
printf("\n\n每一回合四个玩家轮流经历这三个阶段,先从10*10的随机道具池里抽取道具。然后借助抽到的道具,以及通过消耗能量使用技能,耗尽其他玩家的hp。\n\n");
Sleep(500);
system("pause");
printf("\n\n玩家的死亡是在回合结束后判定的。当场上仅剩一名玩家时,该玩家胜利;若仅剩的玩家同一回合死亡,则平局。\n\n");
Sleep(500);
system("pause");
printf("\n\n注:“跳过'xx阶段'/'整个回合'是指当'下一次经历该阶段'/'进入下一个回合'时,跳过。\n\n");
Sleep(500);
printf("\n 大雾弥漫从使用者的下一个人抽道具起生效,到下一次轮到这个人时结束。期间使用者可以理解成临时死亡。\n\n");
Sleep(500);
system("pause");
while(1) //进行
{
system("cls");
if(sum<=10)
{
printf("剩余抽道具格子过少,奖池开始大洗牌...");
system("pause");
memset(vis,0,sizeof(vis));
for(int i=0;i<by.size();i++)
{
prize.push_back(by[i]);
by.erase(by.begin()+i,by.begin()+i+1);
}
dl();
sum=0;
}
hh++;
for(int l=1;l<=4&∑l++)
{
system("cls");
if(die[l]) continue;
if(kl[l])
{
printf("玩家%d本回合被玩家3控制,请玩家3进行操作。",l);
kl[l]--;
Sleep(500);
system("pause");
}
if(dwmm[l])
{
printf("玩家%d处于「雾中」效果,跳过本回合。\n",l);
dwmm[l]--;
if(dwmm[l]==0) wz--;
Sleep(500);
system("pause");
continue;
}
if(all[l])
{
printf("玩家%d本回合被跳过。\n",l);
all[l]--;
Sleep(500);
system("pause");
continue;
}
cj(l);
if(jh[l]==0) printf("抽奖机会已用完,开始选择使用道具和技能...\n\n");
else printf("接下来开始选择使用道具和技能...\n\n");
Sleep(500);
system("pause");
system("cls");
print2(l);
use_dj(l);
use_jn(l);
if(xmc) xmc=0;
system("cls");
}
hh++;
for(int l=1;l<=4;l++)
{
if(die[l]) continue;
if(du[l])
{
printf("玩家%d处于持续扣血,本回合扣1格hp。",l);
du[l]--;
hp[l]--;
Sleep(500);
system("pause");
}
if(hp[l]<=0&&!die[l])
{
printf("玩家%d hp清零,退出游戏。",l);
leave++;
die[l]=1;
Sleep(500);
system("pause");
continue;
}
int rr=rand()%2+2;
jh[l]+=rr;
}
printf("第%d回合结束!\n\n",hh);
if(leave==3)
{
for(int i=1;i<=4;i++)
{
if(hp[i]>0)
{
printf("游戏结束!");
win=i;
system("pause");
break;
}
}
break;
}
else if(leave==4)
{
printf("游戏结束!");
win=5;
system("pause");
break;
}
printf("每人增加2~3次抽奖机会。\n\n");
system("pause");
}
//结束
system("cls");
if(win==5) cout<<"本场游戏平局!";
else cout<<"获胜者是:玩家"<<win<<"!";
system("pause");
return 0;
}