- wangweikun2024's blog
游戏
- @ 2026-3-14 11:57:58
友情提示:目前只写好了基本框架,可以自己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();
}