友情提示:目前只写好了基本框架,可以自己diy(等我出教程,或者看注释),也可以等我咕咕咕地更新。

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
string name[1001]={"狂乱","三重打击"};
string xiao_guo[1001]={"打出手牌中的一张牌,消耗之。","造成7点伤害3次。"};
string tips[1001]={"由于一些技术原因,计数器通常从0开始。"};
int cost[1001]={1,2};
int pc_hp=80,max_pc_hp=80,fy/*费用*/,full_fy=4/*费用上限*/,pc_gd/*格挡*/,pc_js/*减伤*/;
bool end_fight;//战斗是否结束 
mt19937 rng(std::random_device{}());
struct npc{
	int hp,max_hp,js;
	string ai;//技能
	int id;
}boss[1001]={{100,100,0,"每次对玩家造成10点伤害"}};
vector<int> shou_p,ka_zu;
int init_chou_p=4;
queue<int> p_dui;
vector<int> q_p_dui,chu_wai;
vector<npc> all_boss;
int berserk;//力量
void shan_chu(vector<int> v,int x){
	vector<int> a;
	for(int i=0;i<v.size();i++){
		if(i!=x)a.push_back(v[i]);
	}
	v=a;
}
void npc_dead(int x){
	vector<npc> a;
	for(int i=0;i<all_boss.size();i++){
		if(i!=x)a.push_back(all_boss[i]);
	}
	all_boss=a;
	cout<<"其因此而死亡!";
}
void clean(queue<int> q){//清理队列
	while(q.size()){
		q.pop();
	}
}
void chou_pai(int num){
	for(int i=1;i<=num;i++){
		if(shou_p.size()<10&&p_dui.empty()){
			shuffle(q_p_dui.begin(),q_p_dui.end(),rng);
			for(int x:q_p_dui)p_dui.push(x);
			q_p_dui.clear();
		}
		if(shou_p.size()<10&&p_dui.size()){
			shou_p.push_back(p_dui.front());
			p_dui.pop();
		}
	}
}
void qi_pai(int where/*弃置手牌中的一张牌*/){
	q_p_dui.push_back(where);
	shan_chu(shou_p,where);
}
void choose(){//选择卡组
	
}
void xiao_hao(int where/*消耗手牌中的一张牌*/){
	chu_wai.push_back(where);
	shan_chu(shou_p,where);
}
void check_mb(){//展示面板 
	cout<<"你的血量:"<<pc_hp<<" 血量上限:"<<max_pc_hp<<" 力量:"<<berserk<<" 减伤:"<<pc_js<<endl; 
}
void zhan_shi(){//展示手牌
	while(1){
		int x;
		for(int i=0;i<shou_p.size();i++){
			cout<<i<<"."<<" 名字:"<<name[shou_p[i]]<<" id:"<<shou_p[i]<<endl;
		}
		cout<<"你要查看哪张卡牌的效果?若无需查看,输入-1"<<endl;
		cin>>x;
		if(x==-1){
			system("cls");
			break;
		}
		cout<<xiao_guo[shou_p[x]]<<endl;
		Sleep(1000);
		system("pause");
		system("cls");
	}
	for(int i=0;i<shou_p.size();i++){
		cout<<i<<"."<<" 名字:"<<name[shou_p[i]]<<" id:"<<shou_p[i]<<endl;
	}
}
void cha_kan(){//展示怪物 
	for(int i=0;i<all_boss.size();i++){
		npc x=all_boss[i];
		cout<<"第"<<i<<"只怪物的血量:"<<x.hp<<" 血量上限:"<<x.max_hp<<" 减伤:"<<x.js<<" AI:"<<x.ai<<endl;
	}
}
int link_sp(){//选中一张手牌 
	while(1){
		int x;
		zhan_shi();
		cout<<"选择一张手牌,输入它的位置:";
		cin>>x;
		cout<<endl;
		if(0<=x&&x<shou_p.size())return x;
		else{
			cout<<"手牌不存在!"<<endl;
			Sleep(1000);
			system("cls");
		}
	}
}
int link_gw(){//选中一只怪物 
	while(1){
		int x;
		cha_kan();
		cout<<"选择一只怪物,输入它的位置:";
		cin>>x;
		cout<<endl;
		if(0<=x&&x<all_boss.size())return x;
		else{
			cout<<"怪物不存在!"<<endl;
			Sleep(2000);
			system("cls");
		}
	}
}
void npc_hurt(int x,int dmg){//npc受伤 
	all_boss[x].hp-=dmg-all_boss[x].js;
	cout<<"第"<<x<<"个怪物受到了"<<dmg-all_boss[x].js<<"点伤害!";
	if(all_boss[x].hp<=0)npc_dead(x);
	Sleep(2000);
	system("cls");
}
void pc_hurt(int dmg){
	pc_hp-=max(dmg-pc_gd-pc_js,0);
	pc_gd-=min(dmg,pc_gd-pc_js);
	cout<<"你还剩"<<pc_hp<<"点血,"<<pc_gd<<"点格挡。";
	Sleep(2000);
	system("cls");
}
void pc_atk(int x,int dmg){
	npc_hurt(x,dmg+berserk);
}
void use(int card_id,int where/*为-1则不存在*/){
	if(cost[card_id]>fy){
		cout<<"你的费用不够!"<<endl;
		system("cls");
		return; 
	}
	fy-=cost[card_id];
	if(where!=-1)qi_pai(where);
	if(card_id==0){
		int x=link_sp();
		use(shou_p[x],-1);
		xiao_hao(x);
	}
	if(card_id==1){
		int x=link_gw();
		pc_atk(x,7);
		pc_atk(x,7);
		pc_atk(x,7);
	}
	Sleep(1000);
	system("cls");
}
void init_boss(){//初始化怪物 
	
}
void init_fight(){//初始化战斗 
	choose();
	init_boss();
	pc_hp=max_pc_hp;
	all_boss.clear();
	shuffle(ka_zu.begin(),ka_zu.end(),rng);
	clean(p_dui);
	q_p_dui.clear();
	chu_wai.clear();
	shou_p.clear();
	for(int i=0;i<ka_zu.size();i++){
		p_dui.push(ka_zu[i]);
	}
	chou_pai(init_chou_p);
}
bool check_lose(){
	if(pc_hp<=0){
		cout<<"你输了!"<<endl;
		system("pause");
		system("cls");
		end_fight=1;
		return 1;
	}
	return 0;
}
bool check_win(){
	if(all_boss.empty()){
		cout<<"你赢了!"<<endl;
		system("pause");
		system("cls");
		end_fight=1;
		return 1;
	}
	return 0;
}
void pc_fight(){//玩家行动
	cout<<"现在是你的回合!"<<endl;
	Sleep(1000);
	system("cls");
	fy=full_fy;
	while(1){
		if(check_win())break;
		zhan_shi();
		check_mb();
		cout<<"输入你要使用的那张卡的位置,若要结束回合,输入-1"<<endl;
		int x;
		cin>>x;
		if(x==-1)break;
		else if(0<=x&&x<shou_p.size())use(shou_p[x],x);
		else{
			cout<<"位置不存在!"<<endl;
			Sleep(2000);
		}
		system("cls");
	}
}
void npc_fight(){//怪物行动
	cout<<"现在是怪物的回合!"<<endl;
	Sleep(1000);
	system("cls");
	for(npc x:all_boss){
		if(x.id==0){//test
			pc_hurt(10);
		}
		if(check_lose())break;
	}
}
void fight(){//战斗
	init_fight();
	while(1){
		if(end_fight)break;
		pc_fight();
		if(end_fight)break;
		npc_fight();
	}
	end_fight=0;
}
void start(){
	for(int i=0;i<1000;i++){
		boss[i].id=i;
	}
	cout<<"本游戏为类尖塔游戏"<<endl;
	Sleep(500);
	cout<<"YC:wwk"<<endl; 
	Sleep(500);
	cout<<"祝你玩的开心!"<<endl;
	system("pause");
	system("cls");
}
void game(){
	start();
	init_fight();
	fight();
}
int main(){
	game();
}