c++版名字竞技场v1.1
  • 板块灌水区
  • 楼主zhuguyu
  • 当前回复10
  • 已保存回复11
  • 发布时间2024/8/5 23:34
  • 上次更新2024/8/6 09:24:55
查看原帖
c++版名字竞技场v1.1
550190
zhuguyu楼主2024/8/5 23:34

事情是这样的,我发现了一个游戏 但是因为不能自定义每个名字的属性,就让我很烦恼,所以我闲着没事就做了个名字竞技场c++版:

#include<bits/stdc++.h>
#define sf scanf
#define pf printf
#define cs c_str() 
using namespace std;
struct phb{
	int id,val;
}x[100001]; 
vector<int> liv; 
int n,cnt;
int sh[100001],fy[100001],hp[100001],kill[100001],zmyj[100001],win;
bool die[100001];
string s[100001];
int fyjs(double x,int tfy){
//	int t=tfy;
	double js=0,add=0.000501;
	while(tfy--){
		if(sqrt(1-js)*0.001<add) add-=0.000001;
		js+=max(max(sqrt(1-js)*0.001,add),0.00001);
//		if(t==1980){
//			printf("%.4lf\n",js);
//		}
		if(js>=1) break;
	}
	js-=(x/10000);
	js=max(0.00001*tfy,js);
	double res=x*fmin(js,1);
	return res;
}
int bj(double x,int u,int v){
	int isbj=rand()%10+1;
	if(isbj>3) return x;
	else{
		int r=rand()%91+110;
		double add=((double)r)/(double)100;
		double res=x*add;
		pf(" *%s* 对 *%s* 产生了暴击,暴击倍率为 %.2lf 倍\n",s[u].cs,s[v].cs,add);
		return res;
	}
}
bool cmp(phb x,phb y){
	return x.val>y.val;
}
void duel(int x,int y){
	bool flag=0;
	int zssh=sh[x],dd,tsh;	
	tsh=zssh=bj((double)zssh,x,y);
	dd=fyjs((double)zssh,fy[y]); 
	zssh-=dd;
	hp[y]-=zssh;
	if(hp[y]<=0){
		hp[y]=0;
		flag=1;
		cnt--;
		auto it=find(liv.begin(),liv.end(),y);
		liv.erase(it);
		zmyj[y]=x;
		die[y]=1;
		kill[x]++;
	}
	pf(" *%s* 对 *%s* 造成了%d点伤害,被抵挡%d点伤害,实际造成%d点伤害, *%s* 还剩%d点血\n",s[x].cs,s[y].cs,tsh,dd,zssh,s[y].cs,hp[y]);
	if(flag) pf(" *%s* 击杀 *%s* \n",s[x].cs,s[y].cs);
}
int main(){
	srand(time(0));
	pf("请输入名字个数:");
	sf("%d",&n);
	cnt=n;
	pf("请输入n个名字,以及他们的血量,防御力,攻击力(不含空格):\n");
	liv.push_back(0);
	for(int i=1;i<=n;i++){
		cin>>s[i]>>hp[i]>>fy[i]>>sh[i];
		liv.push_back(i);
	}
	while(cnt>1){
		int x=liv[rand()%cnt+1],y=liv[rand()%cnt+1];
		while(x==y) x=liv[rand()%cnt+1],y=liv[rand()%cnt+1];
		duel(x,y);
	}
	for(int i=1;i<=n;i++){
		if(!die[i]){
			win=i;
			break;
		}
	}
	pf("胜者: *%s* \n击杀数排名:\n",s[win].cs);
	for(int i=1;i<=n;i++) x[i].id=i,x[i].val=kill[i];
	sort(x+1,x+n+1,cmp);
	for(int i=1;i<=n;i++){
		pf(" *%s* 排名:%d 击杀数:%d 致命一击:",s[x[i].id].cs,i,x[i].val);
		if(zmyj[x[i].id]) pf(" *%s* ",s[zmyj[x[i].id]].cs);
		pf("\n");
	}
}
2024/8/5 23:34
加载中...