14 条题解

  • 0
    @ 2026-2-6 11:59:11
    #include<random>
    #include<fstream>
    using namespace std;//2ecba4
    #define pb push_back
    string inp,plnol[3]={"赚得金钱x1.5","赚得经验x1.5","敌人初始生命降低2点"};
    struct cardef{
    	int atk,def,hel,lev,price;
    	string name,type,nolio;
    	bool buyl;
    };
    cardef shop[15];
    cardef allcards[30]={
    	{15,5,30,2,100,"1+1","水系替身","无",false},
    	{3,0,5,2,150,"小吃家","土系替身","被破坏时,对破坏自己的敌人造成25点伤害",false},
    	{1,0,1,1,50,"迷你吃家","普通替身","攻击时有20%概率直接破坏指向单位",false},
    	{0,0,50,2,75,"小78","土系替身","无",false},
    	{0,0,20,1,100,"迷你78","水系替身","无",false},
    	{7,8,15,1,150,"1*1","木系替身","被攻击时,可以通过使自身-1攻击力来减少一半",false},
    	{15,9,30,4,200,"肾蕨·孢子囊","毒系替身","在场上存活满3回合后,变为“肾蕨·幼苗”",false}
    };
    cardef alldiren[30]={
    	{3,0,15,1,25,"迷你石蛙","普通替身","无",false},
    	{5,1,25,1,30,"小石蛙","金系替身","无",false},
    	{10,2,35,3,50,"中石蛙","火系替身","无",false}
    };
    cardef thistime[3];
    pair<int,int> timeguard[100]={{0,3},{1,5},{2,6}};
    struct playertab{
    	string name,password,nol;
    	int exp,lvl,money,ms,gk;
    	vector<cardef>diki;
    };
    playertab players[15];
    void introduce(){
    	cout<<"-------------------------------------------"<<endl;
    	cout<<"-------------------------------------------"<<endl;
    	cout<<"普通替身:无特殊效果。"<<endl;
    	cout<<"金系替身:每次攻击成功,减少1点护盾(最低0点),增加自己1点攻击。"<<endl;
    	cout<<"木系替身:自首次上阵时开始计算,每三回合,若自己在场上,恢复自己5点生命。"<<endl;
    	cout<<"水系替身:在敌方攻击自己的伤害结算阶段,有20%几率减免50%最终伤害。"<<endl;
    	cout<<"火系替身:在自己攻击敌方的伤害结算阶段,有20%几率对敌人造成3回合的持续灼烧伤害(25%攻击力/回合)。"<<endl;
    	cout<<"土系替身:在自己攻击敌方的伤害结算阶段,若伤害大于等于敌方护盾,可造成穿透伤害。"<<endl;
    	cout<<"毒系替身:在自己攻击敌方的伤害结算阶段,有35%几率对敌人造成5回合的持续中毒伤害(2%敌人最大生命值/回合),并使敌人减少1点护盾。"<<endl;
    	cout<<"雷系替身:每回合可行动2次,但行动第2次的同时减少2点护盾。"<<endl;
    	cout<<"风系替身:在被破坏时,有10%几率不被破坏。"<<endl;
    	cout<<"光系替身:在首次上阵时,使所有友方单位增加5点生命,2点攻击,2点护盾。"<<endl;
    	cout<<"暗系替身:在破坏敌方单位时,将生命降低2,对敌人本体造成5点伤害。"<<endl;
    	cout<<"霰系替身:不可作为效果所指定的对象。"<<endl;
    	cout<<"澜系替身:当自己被破坏时,若破坏自己的敌方单位非水系替身,将其护盾归零。"<<endl;
    	cout<<"墨系替身:在己方的结束阶段,增加自己2点生命,但降低1点攻击(最低1点)。"<<endl;
    	cout<<"阴阳替身:在敌方攻击自己的伤害结算阶段,若此次攻击致命,有50%几率回到手牌。在自己攻击敌方的伤害结算阶段,若此次攻击致命,有50%几率将敌方除外。"<<endl;
    	cout<<"坑人替身:在被攻击破坏时,对敌方本体造成本次受到攻击的溢出伤害。"<<endl;
    	cout<<"-------------------------------------------"<<endl;
    	cout<<"-------------------------------------------"<<endl;
    }
    void setmarket(int typer){
    	random_device rd;
    	mt19937 gen(rd());
    	if(typer==0){
    		shop[0]={10,5,25,1,100,"活者","普通替身","无",false};
    		shop[1]={20,0,15,1,100,"交通堵塞","普通替身","无",false};
    		shop[2]={5,20,35,1,100,"亡灵","普通替身","无",false};
    	}
    	if(typer==1){
    		bool vis[7]={0,0,0,0,0,0,0};
    		int p=0;
    		uniform_int_distribution<> distrib(0, 6); 
    		while(p!=5){
    			int uses=distrib(gen);
    			if(vis[uses]!=1){
    				p++;
    				vis[uses]=1;
    				shop[p-1]=allcards[uses];
    			}
    		}
    	}
    }
    void intomarket(int vty){
    	cout<<"-------------------------------------------"<<endl;
    	cout<<"你的金钱:"<<players[0].money<<endl;
    	if(vty==0){
    		cout<<"白蛇:“光碟大甩卖!!!全场十折!!!”"<<endl;
    		for(int i=0;i<3;i++){
    			cout<<i+1<<". "<<shop[i].name<<' '<<"价格:"<<shop[i].price<<endl;
    			cout<<"属性:"<<"生命: "<<shop[i].hel<<' '<<"攻击: "<<shop[i].atk<<' '<<"防御: "<<shop[i].def<<endl;
    			cout<<"特性:"<<"种类:"<<shop[i].type<<' '<<"等级:"<<shop[i].lev<<endl;
    			cout<<"能力: "<<shop[i].nolio<<endl;
    			cout<<endl;
    		}
    		cout<<"白蛇:“你要买什么呢?(输入-1退出!)”"<<endl;
    		cout<<"-------------------------------------------"<<endl;
    		while(1){
    			cin>>inp;
    			if(inp=="-1"){
    				cout<<"-------------------------------------------"<<endl;
    				return;
    			}
    			if(inp!="1"&&inp !="2"&&inp != "3"){
    				cout<<"X:你到底想不想买?给我看有东西的柜子!!!(恼)"<<endl;
    				continue;
    			}
    			else{
    				if(shop[inp[0]-'0'-1].buyl==true){
    					cout<<"买过辣!"<<endl;
    					continue;
    				}
    				if(shop[inp[0]-'0'-1].price>players[0].money){
    					cout<<"马内不足!!!"<<endl;
    					continue;
    				}
    				players[0].money-=shop[inp[0]-'0'-1].price;
    				players[0].diki.pb(shop[inp[0]-'0'-1]);
    				shop[inp[0]-'0'-1].buyl=true;
    				cout<<"购买成功!"<<endl;
    				cout<<"你现在的金钱:"<<players[0].money<<endl;
    			}
    		}
    	}
    	if(vty==1){
    		cout<<"白蛇:“欢迎光临!!!您要点什么呢?”"<<endl;
    		for(int i=0;i<5;i++){
    			cout<<i+1<<". "<<shop[i].name<<' '<<"价格:"<<shop[i].price<<endl;
    			cout<<"属性:"<<"生命: "<<shop[i].hel<<' '<<"攻击: "<<shop[i].atk<<' '<<"防御: "<<shop[i].def<<endl;
    			cout<<"特性:"<<"种类:"<<shop[i].type<<' '<<"等级:"<<shop[i].lev<<endl;
    			cout<<"能力: "<<shop[i].nolio<<endl;
    			cout<<endl;
    		}
    		cout<<"白蛇:“你要买什么呢?(输入-1退出!)”"<<endl;
    		cout<<"-------------------------------------------"<<endl;
    		while(1){
    			cin>>inp;
    			if(inp=="-1"){
    				cout<<"-------------------------------------------"<<endl;
    				return;
    			}
    			if(inp!="1"&&inp !="2"&&inp != "3"&&inp != "4"&&inp != "5"){
    				cout<<"X:你到底想不想买?给我看有东西的柜子!!!(恼)"<<endl;
    				continue;
    			}
    			else{
    				if(shop[inp[0]-'0'-1].buyl==true){
    					cout<<"买过辣!"<<endl;
    					continue;
    				}
    				if(shop[inp[0]-'0'-1].price>players[0].money){
    					cout<<"马内不足!!!"<<endl;
    					continue;
    				}
    				players[0].money-=shop[inp[0]-'0'-1].price;
    				players[0].diki.pb(shop[inp[0]-'0'-1]);
    				shop[inp[0]-'0'-1].buyl=true;
    				
    				cout<<"购买成功!"<<endl;
    				cout<<"你现在的金钱:"<<players[0].money<<endl;
    			}
    		}
    	}
    }
    void shuxing(){
    	cout<<"-------------------------------------------"<<endl;
    	cout<<players[0].name<<"的属性:"<<endl;
    	cout<<"名字:"<<players[0].name<<endl;
    	cout<<"金钱:"<<players[0].money<<endl;
    	cout<<"魔法石:"<<players[0].ms<<endl;
    	cout<<"等级:"<<players[0].lvl<<endl;
    	cout<<"经验:"<<players[0].exp<<endl;
    	cout<<"能力:"<<players[0].nol<<endl;
    	cout<<"卡组:"<<endl;
    	for(int i=0;i<players[0].diki.size();i++){
    		cout<<i+1<<". "<<players[0].diki[i].name<<endl;
    		cout<<"属性:"<<"生命: "<<players[0].diki[i].hel<<' '<<"攻击: "<<players[0].diki[i].atk<<' '<<"防御: "<<players[0].diki[i].def<<endl;
    		cout<<"特性:"<<"种类:"<<players[0].diki[i].type<<' '<<"等级:"<<players[0].diki[i].lev<<endl;
    		cout<<"能力: "<<players[0].diki[i].nolio<<endl;
    		cout<<endl;
    	}
    	cout<<"-------------------------------------------"<<endl;
    }
    void adventure(){
    	cout<<"X:前面的区域以后再来探索吧~~~"<<endl;
    	cout<<"当前关卡:"<<players[0].gk<<endl;
    	cout<<"是否挑战?"<<endl;
    	cin>>inp;
    	if(inp=="是"){
    		random_device rd;
    		mt19937 gen(rd());
    		for(int i=0;i<3;i++){
    			thistime[i]={0,0,0,0,0,"","","",false};
    		}
    		bool vis[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    		uniform_int_distribution<> distrib1(timeguard[players[0].gk].first,timeguard[players[0].gk].second);
    		uniform_int_distribution<> distrib2(1,3);
    		int these=distrib2(gen);
    		int p=0;
    		while(p!=these){
    			int used=distrib1(gen);
    			if(vis[used]==0){
    				vis[used]=1;
    				thistime[p]=allcards[used];
    				p+=1;
    			}
    			else{
    				continue;
    			}
    		}
    		cout<<"-------------------------------------------\n"<<"第"<<players[0].gk<<"关:\n";
    		
    	}
    	else{
    		cout<<"???:给我GG!"<<endl;
    		return;
    	}
    }
    void solve(){
    	cout<<"-------------------------------------------"<<endl;
    	cout<<"欢迎!请登录账号!"<<endl;
    	cout<<"你的名字是:";
    	cin>>inp;
    	players[0].name=inp;
    	cout<<"你的能力:"<<endl<<"1.赚得金钱x1.5 2.赚得经验x1.5 3.敌人初始生命降低2点"<<endl;
    	cout<<"你的选择:";
    	while(1){
    		cin>>inp;
    		if((inp!="1" )&&(inp !="2")&&(inp != "3")){
    			cout<<"错误输入!请输入数字!"<<endl;
    		}
    		else{
    			players[0].nol=plnol[inp[0]-'0'-1];
    			break;
    		}
    	}
    	cout<<"登录完成!欢迎您,"<<players[0].name<<"!"<<endl;
    	players[0].money=100;
    	players[0].ms=0;
    	players[0].gk=1;
    	cout<<"-------------------------------------------"<<endl;
    	cout<<"introduce.名词介绍 0.查看状态 1.白蛇的商店 2.牢板的陷阱店 3.齐贝林的魔法店 4.出发吧!!! exit.退出"<<endl;
    	cout<<"请输入“1”前往买卡!!!"<<endl;
    	inp="10";
    	while(inp!="1"){
    		cin>>inp;
    		if(inp=="exit"){
    			exit(0);
    		}
    		if(inp!="1"){
    			cout<<"你TMD给我按“1”!!!!!"<<endl;
    		}
    	}
    	setmarket(0);
    	intomarket(0);
    	cout<<"???:“那么,祝你好运!”"<<endl;
    	cout<<"你:“布什戈门,你谁?”"<<endl;
    	while(true){
    		cout<<"introduce.名词介绍 0.查看状态 1.白蛇的商店 2.牢板的陷阱店 3.齐贝林的魔法店 4.出发吧!!! exit.退出"<<endl;
    		cin>>inp;
    		if(inp[0]-'0'!=0&&inp[0]-'0'!=1&&inp[0]-'0'!=2&&inp[0]-'0'!=3&&inp[0]-'0'!=4&&inp!="exit"&&inp!="introduce"){
    			cout<<"X:“你TMD想什么呢?”"<<endl;
    		}
    		if(inp=="introduce"){
    			introduce();
    		}
    		if(inp=="0"){
    			shuxing();
    		}
    		if(inp=="1"){
    			setmarket(1);
    			intomarket(1);
    		}
    		if(inp=="4"){
    			adventure();
    		}
    		if(inp=="exit"){
    			exit(0);
    		}
    	}
    }
    int main(){
    	int T=1;
    	for(int i=0;i<15;i++){
    		players[i]={"","","",0,0,0,0,0,{}};
    		shop[i]={0,0,0,0,0,"","","",false};
    	}
    	while(T--){
    		solve();
    	}
    	return 0;
    }
    
    
    
    

    信息

    ID
    13833
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    14
    已通过
    0
    上传者