方舟肉鸽-持续更新。。。

#include<graphics.h>
#include<cstdio>
#include<time.h>
#define MMax_up 500

struct P
{
	int hp;
	int Mhp;
	int sp;
	int Msp;
	int atc;
	int def;
	int Lv;
	int up;
	int Mup;
	char name[25];
	char sp_name[25];
	int shlx;
};
P player[4],mon[20],mon0;
int Mup_s[30]={0,100,150,200,250,300,500};
int wea_name=0;
int player_name=0;
int tx,ty,dx,dy;
int spadd=10;
int jn_ls=0;
int jn_add;
int logic[25][25];
int logic_Max;
int S;
int i2;
bool is_0;
bool is_jn;
int mon_Lv[10][40]={{},{3,1,2,3},{3,3,4,5}};
int mon_name;
int dod=1;

PIMAGE w_jxhz,k_zlrh,y_sx;
PIMAGE what[6];
PIMAGE c[4];
PIMAGE tt;

int max(int a,int b)
{if(a>=b) return a;return b;}
int min(int a,int b)
{if(a<=b) return a;return b;}

void ztl_move()
{
	bar(0,620,600,700);
	setfont(20,0,"");
	xyprintf(0,620,"角色");xyprintf(80,620,player[player_name].name);
	int f_Mup=Mup_s[player[player_name].Lv];
	if(f_Mup==0) f_Mup=MMax_up;
	xyprintf(150,620,"Lv.%d    %d/%d",player[player_name].Lv,player[player_name].up,f_Mup);
	if(!is_jn) xyprintf(0,640,"hp%d/%d  攻%d  防%d  智慧%d",player[player_name].hp,player[player_name].Mhp,player[player_name].atc,player[player_name].def,spadd);
	if(!is_jn) return;
	if(player_name==1) 
	{
		xyprintf(0,640,"    技能 惊吓盒子  消耗 %dsp  初始sp %d",player[player_name].Msp,player[player_name].sp);
		xyprintf(0,660,"    效果:造成 %d%% 物理伤害 眩晕敌人一回合",3*jn_add);
		putimage(0,640,w_jxhz);
	}
	else if(player_name==2)
	{
		xyprintf(0,640,"    技能 指令:融毁  消耗 %dsp  初始sp %d",player[player_name].Msp,player[player_name].sp);
		xyprintf(0,660,"    效果:伤害类型变为真实(无视防御)持续三回合");
		xyprintf(80,680,"  攻击力提升至%d%%  防御力提升至%d%%",3*jn_add,2*jn_add);
		putimage(0,640,k_zlrh);
	}
	else if(player_name==3)
	{
		xyprintf(0,640,"    技能 惊吓盒子  消耗 %dsp  初始sp %d",player[player_name].Msp,player[player_name].sp);
		xyprintf(0,660,"    效果:造成 %d%% 物理伤害 回复20%%的最大生命值",2*jn_add);
		putimage(0,640,y_sx);
	}
	return;
}

void ztl_print()
{
	int x=0;
	bar(0,600,600,620);
	setfont(15,0,"");
	xyprintf(x,600,player[player_name].name);
	x+=textwidth(player[player_name].name);
	xyprintf(x,600," hp %d/%d  技%d/%d",player[player_name].hp,player[player_name].Mhp,player[player_name].sp,player[player_name].Msp);
	x+=170;
	xyprintf(x,600,mon0.name);
	x+=textwidth(mon0.name);
	xyprintf(x,600," hp %d/%d  技%d/%d",mon0.hp,mon0.Mhp,mon0.sp,mon0.Msp);
	setfont(20,0,"");
	return;
}


int sp_pd(int S,int fit_x,int fit_y)
{
	int x=fit_x,y=fit_y;
	int sh;
	if(S==1)
	{
		player[player_name].sp-=player[player_name].Msp;
		switch (player_name) {
		case 1:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,player[player_name].sp_name);
			x+=textwidth(player[player_name].sp_name);
			xyprintf(x,y," 造成了 ");
			x+=textwidth(" 造成了 ");
			setcolor(RED);sh=player[player_name].atc*3*jn_add/100-mon0.def;
			sh=max(sh,(int)player[player_name].atc*0.3*jn_add/100);
			xyprintf(x,y,"%d",sh);
			x+=40;setcolor(LIGHTGRAY);
			xyprintf(x,y," 点的伤害");mon0.hp-=sh;
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			if(!mon0.Mup) xyprintf(x,y,"对敌人造成了一回合的眩晕!"),mon0.Mup=-1;
			else xyprintf(x,y,"敌方免疫了眩晕!");
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			break;
		case 2:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,player[player_name].sp_name);
			x+=textwidth(player[player_name].sp_name);getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			xyprintf(x,y,"伤害类型变为 ");
			x+=textwidth("伤害类型变为 ");
			setcolor(RED);
			xyprintf(x,y,"真实");
			setcolor(LIGHTGRAY);getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			xyprintf(x,y,"攻击力提升至%d%%  防御力提升至%d%%",3*jn_add,2*jn_add);getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			xyprintf(x,y,"持续三回合");getch();
			jn_ls=3;
			player[player_name].shlx=1;player[player_name].atc*=(jn_add*3);player[player_name].atc/=100;
			player[player_name].def*=(2*jn_add);player[player_name].def/=100;
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			break;
		case 3:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,player[player_name].sp_name);
			x+=textwidth(player[player_name].sp_name);getch();
			xyprintf(x,y," 造成了 ");
			x+=textwidth(" 造成了 ");
			setcolor(RED);sh=player[player_name].atc*2*jn_add/100-mon0.def;
			sh=max(sh,(int)player[player_name].atc*0.2*jn_add/100);
			xyprintf(x,y,"%d",sh);
			x+=40;setcolor(LIGHTGRAY);
			xyprintf(x,y," 点的伤害");mon0.hp-=sh;
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			xyprintf(x,y,"回复了 ");
			x+=textwidth("回复了 ");
			xyprintf(x,y,"%d",(int)(player[player_name].Mhp*0.2));x+=30;
			xyprintf(x,y,"点hp");
			player[player_name].hp+=(player[player_name].Mhp*0.2);player[player_name].hp=min(player[player_name].Mhp,player[player_name].hp);
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			break;
		}
	}
	else
	{
		mon0.sp-=mon0.Msp;
		getch();
		switch (mon_name) 
		{
			case 2:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,mon0.sp_name);
			x+=textwidth(mon0.sp_name);
			xyprintf(x,y," 造成了 ");
			x+=textwidth(" 造成了 ");
			setcolor(RED);sh=mon0.atc*2-player[player_name].def;
			sh=max(sh,(int)mon0.atc*0.2);
			xyprintf(x,y,"%d",sh);
			x+=40;setcolor(LIGHTGRAY);
			xyprintf(x,y," 点的伤害");player[player_name].hp-=sh;
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			xyprintf(x,y,"回复了 5sp");getch();mon0.sp+=5;
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			break;
			case 3:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,mon0.sp_name);
			x+=textwidth(mon0.sp_name);
			xyprintf(x,y," 造成了 ");
			x+=textwidth(" 造成了 ");
			setcolor(RED);sh=mon0.atc*3-player[player_name].def;
			sh=max(sh,(int)mon0.atc*0.3);
			xyprintf(x,y,"%d",sh);
			x+=40;setcolor(LIGHTGRAY);
			xyprintf(x,y," 点的伤害");player[player_name].hp-=sh;
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			break;
			case 4:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,mon0.sp_name);
			x+=textwidth(mon0.sp_name);
			xyprintf(x,y," 造成了 ");
			x+=textwidth(" 造成了 ");
			setcolor(RED);sh=mon0.atc*3.5-player[player_name].def;
			sh=max(sh,(int)mon0.atc*0.3);
			xyprintf(x,y,"%d",sh);
			x+=40;setcolor(LIGHTGRAY);
			xyprintf(x,y," 点的伤害");player[player_name].hp-=sh;
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			break;
			case 5:
			xyprintf(x,y," 使用了 ");
			x+=textwidth(" 使用了 ");
			xyprintf(x,y,mon0.sp_name);
			x+=textwidth(mon0.sp_name);
			xyprintf(x,y," 造成了 ");
			x+=textwidth(" 造成了 ");
			setcolor(RED);sh=mon0.atc*2-player[player_name].def;
			sh=max(sh,(int)mon0.atc*0.2);
			xyprintf(x,y,"%d",sh);
			x+=40;setcolor(LIGHTGRAY);
			xyprintf(x,y," 点的伤害");player[player_name].hp-=sh;
			getch();
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			xyprintf(x,y,"回复了 5sp");getch();mon0.sp+=5;
			y+=20;x=0;
			if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
			if(rand()%100<49) 
			{
				xyprintf(x,y,"完成了快速装填!再进行一次攻击!");
				y+=20;x=0;
				if(y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),y=680;
				y=sp_pd(S,x,y);
			}
			break;
		}
	}
	return y;
}

void getZoomImage(PIMAGE pimg, const char* fileName, int width, int height)
{
	PIMAGE temp = newimage();
	getimage(temp, fileName);
	
	if ((getwidth(pimg) != width) || (getheight(pimg) != height))
		resize(pimg, width, height);
	
	putimage(pimg, 0, 0, width, height, temp, 0, 0, getwidth(temp), getheight(temp));
	
	delimage(temp);
}

void logic_print()
{
	cleardevice();
	for(int i=1;i<=20;i++)
		for(int j=1;j<=20;j++)
			if(logic[i][j]>=0 && S!=2) putimage((i-1)*30,(j-1)*30,what[logic[i][j]]);
	switch(player_name)
	{
		case 1:
			setfont(30,30,"宋体");xyprintf((tx-1)*30,(ty-1)*30,"W");break;
		case 2:
			setfont(30,15,"宋体");xyprintf((tx-1)*30,(ty-1)*30,"凯");break;
		case 3:
			setfont(30,15,"宋体");xyprintf((tx-1)*30,(ty-1)*30,"炎");break;
	}
	if(S==0)
	{
		ztl_move();
	}
	else if(S==1)
	{
		putimage(0,600,what[logic[dx][dy]]);
		setfont(20,0,"宋体");xyprintf(40,600,"确定要触发该事件吗?");
		if(i2==1) setbkcolor(BLUE);
		xyprintf(40,630,"确认");
		setbkcolor(BLACK);Sleep(1);
		if(i2==-1) setbkcolor(BLUE);
		xyprintf(160,630,"算了");
		setbkcolor(BLACK);Sleep(1);
	}
	else if(S==2)
	{
		setfont(20,0,"宋体");
		xyprintf(0,0,"按下任意键恢复");
		xyprintf(0,20,"W A S D控制行走方向  J打开技能");
	}
	else if(S==3)
	{
		if(logic[dx][dy]==0)
		{
			putimage(0,600,what[logic[dx][dy]]);setfont(20,0,"宋体");
			xyprintf(40,600,"猜猜会发生什么?机遇或是挑战?");
		}
		else 
		{
			if(is_0) 
			{
				putimage(0,600,what[logic[dx][dy]]);setfont(20,0,"宋体");
				if(logic[dx][dy]==1) xyprintf(40,600,"战斗准备!!!");
				else if(logic[dx][dy]==2) xyprintf(40,600,"难得的休整时间");
				else if(logic[dx][dy]==3) xyprintf(40,600,"提升你的技能!");
				else if(logic[dx][dy]==4) xyprintf(40,600,"保养武器");
				return;
			}
			if(logic[dx][dy]==1)
			{
				setfont(20,0,"宋体");
				if(player_name==1) xyprintf(0,600,"W    VS"),xyprintf(120,600,mon[mon_name].name);
				else if(player_name==2) xyprintf(0,600,"凯尔希    VS"),xyprintf(180,600,mon[mon_name].name);
				else xyprintf(0,600,"炎客    VS"),xyprintf(150,600,mon[mon_name].name);
			}
		}
	}
	return;
}

void map()
{
	srand((unsigned)time(0));
	for(int i=1;i<=20;i++)
		for(int j=1;j<=20;j++)
		{
			int r=rand();
			logic[i][j]=r%10;
			if(logic[i][j]>=5) logic[i][j]=0;
		}	
	for(int i=1;i<=300;i++) logic[rand()%20+1][rand()%20+1]=-1; 
	//memset(logic,0,sizeof(logic));
	logic[tx][ty]=-1;
	
	return;
}
 
void first()
{	
	tt=newimage();
	//血量 血量上限 初动技力 技力 攻击力 防御力 等级 经验值 经验值上限
	player[1]={100,100,0,30,30,5,1,0,0,"W","惊吓盒子",0};
	player[2]={150,150,0,20,10,5,1,0,0,"凯尔希","指令:融毁",3};
	player[3]={200,200,0,35,30,0,1,0,0,"炎客","歃血",0};
	mon[1]={50,50,0,0,10,5,1,30,0,"整合运动步兵","",0};
	mon[2]={50,50,0,15,10,0,1,30,0,"整合运动弩手","强化射击阿尔法型",0};
	mon[3]={100,100,0,25,20,10,1,50,0,"初级武装人员","重击",0};
	mon[4]={200,200,0,20,40,25,2,100,1,"高级武装人员","重击PRO",0};
	mon[5]={150,150,10,15,20,0,2,100,0,"弩手队长","强化射击阿尔法型",0};
	srand((unsigned)time(0));
	tx=rand()%20+1;ty=rand()%20+1;player_name=0;
	S=0;spadd=10;jn_add=100;logic_Max=225;
}

void pd(int fx,int fy)
{
	
	dx=tx+fx,dy=ty+fy;
	if(dx>20 || dx<1 || dy>20 || dy<1) {S=0;return;}
	if(logic[dx][dy]>=0)
		S=1;
	else S=0,tx=dx,ty=dy;
	return;
}

void sys_up()
{
	int f_Mup;
	if(Mup_s[player[player_name].Lv]==0) f_Mup=MMax_up;
	else f_Mup=Mup_s[player[player_name].Lv];
	while(player[player_name].up>=f_Mup)
	{
		player[player_name].up-=f_Mup;player[player_name].Lv++;
		if(Mup_s[player[player_name].Lv]==0) f_Mup=MMax_up;
		else f_Mup=Mup_s[player[player_name].Lv];
		bar(0,600,600,700);
		setfont(20,0,"");
		if(dod<=3) xyprintf(0,600,"从 Lv.%d 提升到了 Lv.%d ! 回复所有生命值!",player[player_name].Lv-1,player[player_name].Lv),player[player_name].hp=player[player_name].Mhp;
		else xyprintf(0,600,"从 Lv.%d 提升到了 Lv.%d ! 回复一半的生命值!",player[player_name].Lv-1,player[player_name].Lv),player[player_name].hp+=(player[player_name].Mhp/2),player[player_name].hp=min(player[player_name].hp,player[player_name].Mhp);
		getch();
		xyprintf(0,620,"生命值上限 攻击力 防御力 上升了!");getch();
		xyprintf(0,640,"智慧提升 %d 点",dod);spadd+=dod;getch();
		xyprintf(0,660,"技能倍率提高了7%%");jn_add+=7;getch();
		player[player_name].Mhp+=20;player[player_name].atc+=3;player[player_name].def+=3;
		dod=player[player_name].Lv/2+1;
	}
	return;
}

void choose_player()
{
	for(int i=1;is_run();delay_fps(60))
	{
		while(kbhit())
		{
			int ch=getch();
			if(ch=='d') i++;
			else if(ch=='a') i--;
			else if(ch==13) {player_name=i;break;}
			if(i>3) i=1;
			if(i<1) i=3;
		}
		if(player_name) break;
		cleardevice();putimage(100,50,c[i]);
		if(i==1)
		{
			setfont(30, 30, "宋体");xyprintf(285,20,"W");
			setfont(20, 15, "宋体");
			xyprintf(0,500,"  攻击 :A  防御:C  技能:A  血量:D");
			xyprintf(0,0,"A D左右切换  回车选定");
		}
		else if(i==2)
		{
			setfont(30, 20, "宋体");xyprintf(250,20,"凯尔希");
			setfont(20, 15, "宋体");
			xyprintf(0,500,"  攻击 :C  防御:C  技能:S  血量:A");
			xyprintf(0,530,"     ※凯尔希的攻击为自己回复血量※");
			xyprintf(0,0,"A D左右切换  回车选定");
		}
		else if(i==3)
		{
			setfont(30, 20, "宋体");xyprintf(270,20,"炎客");
			setfont(20, 15, "宋体");
			xyprintf(0,500,"  攻击 :A  防御:D  技能:B  血量:S");
			xyprintf(0,0,"A D左右切换  回车选定");
		}
	}
	setfont(20,0,"");
	cleardevice();xyprintf(0,0,"小贴士:按T可以打开帮助");getch();
	logic_print();
	return;
}

void rest_print(int m)
{
	setfont(20,0,"");
	bar(0,600,600,700);
	xyprintf(0,600,"请选择一项增益效果");
	if(m==1) setbkcolor_f(RED);
	xyprintf(0,620,"A.回复所有生命值");setbkcolor(BLACK);
	if(m==2) setbkcolor_f(RED);
	xyprintf(0,640,"B.获得 %d 点经验",30*dod);setbkcolor(BLACK);
	if(m==3) setbkcolor_f(RED);
	xyprintf(0,660,"C.智慧提升 %d 点",2*dod),setbkcolor(BLACK);
	return;
}



void Game()
{
	int sh;
	is_0=0;jn_ls=0;
	if(logic[dx][dy]==0) 
	{
		logic_print();
		getch();
		logic[dx][dy]=rand()%4+1;
		is_0=1;logic_print();getch();is_0=0;
	}
	if(logic[dx][dy]==1)
	{
		int fit_x=0,fit_y=620;
		int s_sp=player[player_name].sp,s_Msp=player[player_name].Msp,s_shlx=player[player_name].shlx,s_atc=player[player_name].atc,s_def=player[player_name].def;
		srand((unsigned)time(0));
		mon_name=mon_Lv[dod][rand()%mon_Lv[dod][0]+1];
		mon0=mon[mon_name];
		logic_print();getch();
		ztl_print();
		setfont(20,0,"");
		while(1)
		{
			ztl_print();
			fit_x=0;xyprintf(fit_x,fit_y,player[player_name].name);
			fit_x+=textwidth(player[player_name].name);
			if(player[player_name].sp>=player[player_name].Msp)
			{
				fit_y=sp_pd(1,fit_x,fit_y);
				ztl_print();
				if(mon0.hp<=0) break;
			}
			else
			{
				xyprintf(fit_x,fit_y," 进行了普通攻击!");getch();
				//fit_x+=textwidth(" 进行了普通攻击 ");
				fit_y+=20;fit_x=0;
				if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
				if(!jn_ls) 	
				{
					player[player_name].sp+=spadd;
					xyprintf(fit_x,fit_y,"回复了 %dsp",spadd);
					fit_y+=20;fit_x=0;
					if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
					getch();
				}
				ztl_print();
				if(player[player_name].shlx==0) sh=max((int)(player[player_name].atc*0.1),player[player_name].atc-mon0.def);
				else sh=player[player_name].atc;
				if(player[player_name].shlx!=3) xyprintf(fit_x,fit_y,"造成了 %d 点伤害",sh),mon0.hp-=sh,ztl_print();
				else xyprintf(fit_x,fit_y,"治疗了 %d 点血量",sh),player[player_name].hp+=sh,player[player_name].hp=min(player[player_name].hp,player[player_name].Mhp),ztl_print();
				if(jn_ls!=0) jn_ls--;
				if(jn_ls==0) 
				{
					player[player_name].def=s_def;
					player[player_name].atc=s_atc;
					player[player_name].shlx=s_shlx;
				}
				else if(player_name==2) 
				{
					player[player_name].shlx=s_shlx; 
					player[player_name].def=s_def;
					player[player_name].atc=s_atc;
				}
				if(mon0.hp<=0) break;
				getch();
				fit_y+=20;fit_x=0;
				if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
			}
			if(mon0.Mup<0) 
			{
				fit_x=0;xyprintf(fit_x,fit_y,mon0.name);
				fit_x+=textwidth(mon0.name);
				xyprintf(fit_x,fit_y," 被眩晕!本回合跳过!");
				getch();
				mon0.Mup++;
				fit_y+=20;fit_x=0;
				if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
			}
			else
			{
				bool flag=0;
				while(mon0.Msp>0 && mon0.sp>=mon0.Msp)
				{
					flag=1;
					fit_x=0;xyprintf(fit_x,fit_y,mon0.name);
					fit_x+=textwidth(mon0.name);
					fit_y=sp_pd(2,fit_x,fit_y);
					ztl_print();
					if(player[player_name].hp<=0) {cleardevice();setcolor(RED);setfont(30,0,"");xyprintf(0,0,"YOU LOSE!");getch();setcolor(LIGHTGRAY);map();first();choose_player();return;}
				}
				if(flag) continue;
				fit_x=0;xyprintf(fit_x,fit_y,mon0.name);
				fit_x+=textwidth(mon0.name);
				xyprintf(fit_x,fit_y," 进行了普通攻击!");getch();
				//fit_x+=textwidth(" 进行了普通攻击 ");
				fit_y+=20;fit_x=0;
				if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
				if(mon0.Msp) 
				{
					xyprintf(fit_x,fit_y,"回复了 10sp");ztl_print();getch();
					mon0.sp+=10;
					fit_y+=20;fit_x=0;
					if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
				}
				sh=max((int)(mon0.atc*0.1),mon0.atc-player[player_name].def);
				xyprintf(fit_x,fit_y,"造成了 %d 点伤害",sh);player[player_name].hp-=sh;ztl_print();
				if(player[player_name].hp<=0) break; 
				getch();
				fit_y+=20;fit_x=0;
				if(fit_y==700) getimage(tt,0,640,600,60),bar(0,680,600,700),putimage(0,620,tt),fit_y=680;
			}
		}
		if(player[player_name].hp<=0) {cleardevice();setcolor(RED);setfont(30,0,"");xyprintf(0,0,"YOU LOSE!");getch();setcolor(LIGHTGRAY);map();first();choose_player();return;}
		else 
		{
			player[player_name].def=s_def;
			player[player_name].atc=s_atc;
			player[player_name].sp=s_sp;
			player[player_name].Msp=s_Msp;
			player[player_name].shlx=s_shlx;
			bar(0,600,600,700);
			setcolor(RED);setfont(30,0,"");xyprintf(0,600,"战胜了 %s !",mon0.name);setcolor(LIGHTGRAY);getch();
			bar(0,600,600,700);
			xyprintf(0,600,"获得了 %d 点经验值!",mon0.up);player[player_name].up+=mon0.up;getch();
			sys_up();
		}
	}
	else 
	{
		if(logic[dx][dy]==2) 
		{
			int tP=1;
			logic_print();
			rest_print(tP);
			for(;is_run();delay_fps(60))
			{
				rest_print(tP);
				while(kbhit())
				{
					int ch=getch();
					if(ch=='s') tP++;
					else if(ch=='w') tP--;
					else if(ch==13)
					{
						bar(0,600,600,700);
						setfont(30,0,"");
						if(tP==1) {xyprintf(0,600,"回复了所有生命值!");getch();player[player_name].hp=player[player_name].Mhp;}
						else if(tP==2) {xyprintf(0,600,"获得了 %d 点经验值!",30*dod);player[player_name].up+=(30*dod);getch();sys_up();}
						else if(tP==3) {xyprintf(0,600,"提升了智慧!");spadd+=(dod*2);getch();}
						logic[dx][dy]=-1;tx=dx;ty=dy;return;
					}
					if(tP<1) tP=3;
					if(tP>3) tP=1;
				}
			}
		}
		else if(logic[dx][dy]==3)
		{
			bar(0,600,600,700);
			setfont(30,0,"");
			xyprintf(0,600,"巫师正在训练。。。");Sleep(500);
			xyprintf(0,600,"巫师正在训练。。。。。。");Sleep(500);bar(0,600,600,700);
			xyprintf(0,600,"巫师正在训练。。。");Sleep(500);
			if(rand()%100<70) setcolor(LIGHTBLUE),xyprintf(0,600,"技能训练Lv.1  提升了技能倍率 +5%%!"),jn_add+=5;
			else if(rand()%100<50) setcolor(LIGHTPINK),xyprintf(0,600,"技能训练Lv.2  提升了技能倍率 +7%%!"),jn_add+=7;
			else setcolor(RED),xyprintf(0,600,"技能训练Lv.3  提升了技能倍率 +10%%!"),jn_add+=10;
			setcolor(LIGHTGRAY);getch();
		}
		else
		{
			bar(0,600,600,700);
			setfont(20,0,"");
		}
	}
}

int main()
{
	char p[10]="0.png";
	char pp[10]="c0.png";
	initgraph(600, 700,INIT_NOFORCEEXIT);
	first();
	for(int i=0;i<=4;i++)
	{
		p[0]=(char)(i+48);
		what[i]=newimage();
		getZoomImage(what[i],p,30,30);
		//putimage(0,0,what[i]);getch();
	}
	for(int i=1;i<=3;i++)
	{
		c[i]=newimage();
		pp[1]=(char)(i+48);
		getZoomImage(c[i],pp,400,400);
		//putimage(100,100,c[i]);getch();
	}
	w_jxhz=newimage();
	k_zlrh=newimage();
	y_sx=newimage();
	getZoomImage(w_jxhz,"w_jxhz.png",30,30);
	getZoomImage(k_zlrh,"k_zlrh.png",30,30);
	getZoomImage(y_sx,"y_sx.png",30,30);
	map();
	choose_player();
	for(;is_run();delay_fps(30))
	{
		bool flag=0;
		bool flag2;
		if(S==2 && getch()) {S=0;logic_print();continue;}
		while(!S && kbhit())
		{
			int ch=getch();
			switch(ch)
			{
				case 'd':
					flag=1;pd(1,0);break;
				case 'a':
					flag=1;pd(-1,0);break;
				case 's':
					flag=1;pd(0,1);break;
				case 'w':
					flag=1;pd(0,-1);break;
				case 't':
					flag=1;S=2;break;
				case 'j':
					flag=1;is_jn=!is_jn;break;
			}
		}
		if(flag) logic_print();
		if(S==1) 
		{
			flag=1;i2=1;
			logic_print();
			while(flag)
			{
				while(kbhit())
				{
					int ch=getch();
					if(ch=='a' || ch=='d') i2=-i2,logic_print();
					else if(ch==13) 
						{
							if(i2==-1) {S=0;flag=0;break;}
							else {S=3;Game();logic[dx][dy]=-1;tx=dx;ty=dy;logic_Max--;flag=0;S=0;break;}
						}
				}
			}
			logic_print();
		}
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值