逃跑人生game

游戏的游玩方法在代码里,一定要看好啊!!!

加入了easyX库,不然没法运行 

#include<bits/stdc++.h>
#include<conio.h>
#include<easyx.h>
using namespace std;
struct play{
	int x;
	int y;
	int xyq=1;
	int life=1;
};
//-----------------------------
int m[52][52];
clock_t start,finish;
double totaltime,helptime;
short flag=1;
bool gethelp=1;
clock_t h,p;
//-----------------------------
int mx=3,my=3,f=0,gid=1;
char c;
clock_t mxs,mxf;
double mxy;
//-----------------------------
play me;
//-----------------------------
play rj1,rj2;
//-----------------------------
int ojld(int a1,int b1,int a2,int b2){
	return sqrt(abs(a2-a1)*abs(a2-a1)+abs(b2-b1)*abs(b2-b1));
}
void D(){
	for(int i=1;i<=50;i++){
		for(int j=1;j<=50;j++){
			if(m[i][j]==4){
				setfillcolor(LIGHTGRAY);
				solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);//形成无边框矩形 
			}
			if(m[i][j]==1){
				m[i][j]=0;
				setfillcolor(BLACK);//me
				solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);//形成无边框矩形
			}
			else if(m[i][j]==2){
				m[i][j]=0;
				setfillcolor(GREEN);
				if(mxy<5.0&&gid==2){
					setfillcolor(DARKGRAY);//monster 
				}
				else if(me.xyq<=0){
					setfillcolor(GREEN);
				}
				solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);//形成无边框矩形 
			}
			else if(m[i][j]==3){
				m[i][j]=0;
				setfillcolor(BROWN);
				solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);//形成无边框矩形 
			}
			else if((i==45&&j>=20&&j<=30)||(j==20&&i>=45)||(j==30&&i>=45)){
				m[i][j]=4;
			}
			else if(m[i][j]==0){
				setfillcolor(WHITE);
				solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);//形成无边框矩形
			}
		}
	}
}
void mon(){
		if(gid==1){
		if(c=='1'){
			if(!f){
				//monster的追踪功能(不会斜着走) 
				int omm,omr1,omr2;
				omm=ojld(me.x,me.y,mx,my)-1;
				omr1=ojld(rj1.x,rj1.y,mx,my);
				omr2=ojld(rj2.x,rj2.y,mx,my);
				if(omm<omr1 && omm<omr2 && me.life){
					if(mx<me.x)mx++;
					else if(my<me.y)my++;
					else if(mx>me.x)mx--;
					else if(my>me.y)my--;
				}
				else if(omr1<omm && omr1<omr2 && rj1.life){
					if(mx<rj1.x)mx++;
					else if(my<rj1.y)my++;
					else if(mx>rj1.x)mx--;
					else if(my>rj1.y)my--;
				}
				else if(rj2.life){
					if(mx<rj2.x)mx++;
					else if(my<rj2.y)my++;
					else if(mx>rj2.x)mx--;
					else if(my>rj2.y)my--;
				}
				//monster的追踪功能
			}
		}
		else if(c=='2'){
			if(!f){
				//monster的追踪功能(偶尔会斜着走) 
				int omm,omr1,omr2;
				omm=ojld(me.x,me.y,mx,my)-1;
				omr1=ojld(rj1.x,rj1.y,mx,my);
				omr2=ojld(rj2.x,rj2.y,mx,my);
				if(omm<omr1 && omm<omr2 && me.life){
					if(mx<me.x)mx++;
					else if(my<me.y)my++;
					if(mx>me.x)mx--;
					else if(my>me.y)my--;
				}
				else if(omr1<omm && omr1<omr2 && rj1.life){
					if(mx<rj1.x)mx++;
					if(my<rj1.y)my++;
					if(mx>rj1.x)mx--;
					else if(my>rj1.y)my--;
				}
				else if(rj2.life){
					if(mx<rj2.x)mx++;
					if(my<rj2.y)my++;
					else if(mx>rj2.x)mx--;
					if(my>rj2.y)my--;
				}
				//monster的追踪功能 
			}
		}
		else if(c=='3'){
			if(!f){
				//monster的追踪功能(会斜着走) 
				int omm,omr1,omr2;
				omm=ojld(me.x,me.y,mx,my)-1;
				omr1=ojld(rj1.x,rj1.y,mx,my);
				omr2=ojld(rj2.x,rj2.y,mx,my);
				if(omm<omr1 && omm<omr2 && me.life){
					if(mx<me.x)mx++;
					if(my<me.y)my++;
					if(mx>me.x)mx--;
					if(my>me.y)my--;
				}
				else if(omr1<=omm && omr1<omr2 && rj1.life){
					if(mx<rj1.x)mx++;
					if(my<rj1.y)my++;
					if(mx>rj1.x)mx--;
					if(my>rj1.y)my--;
				}
				else if(rj2.life){
					if(mx<rj2.x)mx++;
					if(my<rj2.y)my++;
					if(mx>rj2.x)mx--;
					if(my>rj2.y)my--;
				}
				//monster的追踪功能
			}
		}
		f++;
		if(f>=1){
			f=0;
		}
	}
	else if(gid==0){
		mxs=clock();
		gid=2;
	}
	else if(gid==2){
		mxf=clock();
		mxy=(double)(mxf-mxs)/CLOCKS_PER_SEC;
		if(mxy>=5){
			gid=1;
		}
	}
}
void mov(){
	if(GetKeyState(70)<0&&me.xyq>=1)
		gid=0,me.xyq--;
	if(GetKeyState(32)<0)
		flag=2;
	if(GetKeyState(VK_UP)<0 || GetKeyState(87)<0)
		me.y-=1;
	if(GetKeyState(VK_DOWN)<0 || GetKeyState(83)<0)
		me.y+=1;
	if(GetKeyState(VK_LEFT)<0 || GetKeyState(65)<0)
		me.x-=1;
	if(GetKeyState(VK_RIGHT)<0 || GetKeyState(68)<0)
		me.x+=1;
	if(me.life){
		if(me.x<1) me.x=1;
		if(me.x>50)me.x=50;
		if(me.y<1) me.y=1;
		if(me.y>50)me.y=50;
	}
	else{
		if(me.x<46)me.x=46;
		if(me.x>50)me.x=50;
		if(me.y<21)me.y=21;
		if(me.y>29)me.y=29;
	}
}
void j1(){
	if(rj1.x>=50-1&&rj1.y>=50-1){//右下角 
		if(mx-rj1.x<=3){
			rj1.x-=1;
		}
		else if(my-rj1.y<=3){
			rj1.y-=1;
		}
	}
	if(rj1.x<=1-1&&rj1.y<=1+1){//左上角 
		if(rj1.x-mx>=3){
			rj1.x+=1;
		}
		else if(rj1.y-my<=3){
			rj1.y+=1;
		}
	}
	if(rj1.x>=50-1&&rj1.y<=1+1){//左下角 
		if(rj1.x-mx<=3){
			rj1.x-=1;
		}
		else if(my-rj1.y<=3){
			rj1.y+=1;
		}
	}
	if(rj1.x<=1+1&&rj1.y>=50-1){//右下角 
		if(mx-rj1.x>=3){
			rj1.x+=1;
		}
		else if(rj1.y-my<=3){
			rj1.y-=1;
		}
	}
	
	if((!me.life || !rj2.life)&&rj1.life&&(rj2.x!=43||rj2.y!=25)&&(me.x!=43||me.y!=25)){
			if(rj1.x<43) rj1.x++;
			if(rj1.x>43) rj1.x--;
			if(rj1.y<25) rj1.y++;
			if(rj1.y>25) rj1.y--;
		}
	else if(abs(mx-rj1.x)>=2 && abs(my-rj1.y)>=2 || gid!=1){
		int r1,r2;
		r1=rand()%3;
		r2=rand()%3;
		if(r1){
			rj1.x-=1;
		}
		if(r2){
			rj1.y+=1;
		}
		if(!r1){
			rj1.x+=1;
		}
		if(!r2){
			rj1.y-=1;
		}
		if((abs(mx-rj1.x)<=2||abs(my-rj1.y)<=2)&&rj1.xyq&&gid!=0&&gid!=2){
			gid=0;
			rj1.xyq--;
		}
	}
	
	if(mx<=rj1.x && rj1.x-mx<=2)rj1.x++;
	if(mx>rj1.x && mx-rj1.x<=2)rj1.x--;
	if(my<=rj1.y && rj1.y-mx<=2)rj1.y++;
	if(my>rj1.y && mx-rj1.y<=2)rj1.y--;
	
	if(rj1.life){
		if(rj1.x<1) rj1.x=1;
		if(rj1.x>50)rj1.x=50;
		if(rj1.y<1) rj1.y=1;
		if(rj1.y>50)rj1.y=50;
	}
	else {
		if(rj1.x<46) rj1.x=46;
		if(rj1.x>50) rj1.x=50;
		if(rj1.y<21) rj1.y=21;
		if(rj1.y>29) rj1.y=29;
	}
}
void j2(){
	if(rj2.x>=50-1&&rj2.y>=50-1){//右下角 
		if(mx-rj2.x<=3){
			rj2.x-=1;
		}
		else if(my-rj2.y<=3){
			rj2.y-=1;
		}
	}
	if(rj2.x<=1-1&&rj2.y<=1+1){//左上角 
		if(rj2.x-mx>=3){
			rj2.x+=1;
		}
		else if(rj2.y-my<=3){
			rj2.y+=1;
		}
	}
	if(rj2.x>=50-1&&rj2.y<=1+1){//左下角 
		if(rj2.x-mx<=3){
			rj2.x-=1;
		}
		else if(my-rj2.y<=3){
			rj2.y+=1;
		}
	}
	if(rj2.x<=1+1&&rj2.y>=50-1){//右下角 
		if(mx-rj2.x>=3){
			rj2.x+=1;
		}
		else if(rj2.y-my<=3){
			rj2.y-=1;
		}
	}
	
	if((!me.life || !rj1.life)&&rj2.life){
			if(rj2.x<43) rj2.x++;
			if(rj2.x>43) rj2.x--;
			if(rj2.y<25) rj2.y++;
			if(rj2.y>25) rj2.y--;
	}
	else if(abs(mx-rj1.x)>=1 && abs(my-rj1.y)>=1 || gid!=1){
		int r1,r2;
		r1=rand()%3;
		r2=rand()%3;
		if(r1==1){
			rj2.x++;
		}
		if(r2==1){
			rj2.y++;
		}
		if(!r1){
			rj2.x--;
		}
		if(!r2){
			rj2.y--;
		}
		if((abs(mx-rj2.x)<=2||abs(my-rj2.y)<=2)&&rj2.xyq&&gid!=0&&gid!=2){
			gid=0;
			rj2.xyq--;
		}
	}
	
	if(mx<=rj2.x && rj2.x-mx<=1)rj2.x++;
	if(my<rj2.y && rj2.y-mx<=1)rj2.y++;
	if(mx>=rj2.x && mx-rj2.x<=1)rj2.x--;
	if(my>rj2.y && mx-rj2.y<=1)rj2.y--;
	
	if(rj2.life){
		if(rj2.x<1) rj2.x=1;
		if(rj2.x>50)rj2.x=50;
		if(rj2.y<1) rj2.y=1;
		if(rj2.y>50)rj2.y=50;
	}
	else{
		if(rj2.x<46) rj2.x=46;
		if(rj2.x>50) rj2.x=50;
		if(rj2.y<21) rj2.y=21;
		if(rj2.y>29) rj2.y=29;
	}
}
void draw(){
   	FlushBatchDraw();
   	flag=1;
	//------------------------------------
   	mov();
	//------------------------------------
	mon(); 
	//------------------------------------
	j1();
	j2();
	//------------------------------------
	m[43][25]=4;
	m[me.x][me.y]=1;
	m[mx][my]=2;
	m[rj1.x][rj1.y]=3;
	m[rj2.x][rj2.y]=3;
	if((m[43][25]==3||m[43][25]==1)&&gethelp){
		h=clock();
		gethelp=0;
	}
	else if(m[43][25]!=3&&m[43][25]!=1){
		gethelp=1;
	}
	if(!gethelp){
		p=clock();
		helptime=(double)(p-h)/CLOCKS_PER_SEC;
		if(helptime>=3.0)
			me.life=rj1.life=rj2.life=1;
	}
	if(mx==43&&my==25){
		mx=0;
		if(me.x==43&&me.y==25){
			me.life=0;
		}
		if(rj1.x==43&&rj1.y==25){
			rj1.life=0;
		}
		if(rj2.x==43&&rj2.y==25){
			rj2.life=0;
		}
	}
	D();
	if(flag==1)
		Sleep(100);
	else
		Sleep(40);
}
int end(bool b){
	setbkmode(TRANSPARENT);
	setfillcolor(WHITE);//设置背景颜色
	solidrectangle(0,0,500,500);
	settextcolor(RED);//设置字体颜色
	settextstyle(100,0,"楷体");//设置字体样式;
	if(!b)
		outtextxy(180,120,"菜!");//输出字体
	else
		outtextxy(80,120,"你赢了!");//输出字体 
	settextstyle(20,0,"楷体");;
	settextcolor(BLACK);//设置字体颜色
	outtextxy(150,270,"(3秒后自动关闭)");
	FlushBatchDraw();//输出绘图
	Sleep(3000);//单位以毫秒计算
	closegraph();
}
int run(){
	initgraph(500,500);//初始一个图形区域(宽500,长500)
	setfillcolor(WHITE);//设置背景颜色
    solidrectangle(0,0,500,500);
	setbkmode(TRANSPARENT);
	settextcolor(BLACK);//设置字体颜色
	settextstyle(80,0,"楷体");//设置字体样式;
    outtextxy(60,120,"坚持90秒!");//输出字体 
    settextcolor(LIGHTGRAY);//设置字体颜色
	settextstyle(30,0,"楷体");//设置字体样式;
    outtextxy(140,270,"(按esc认输)");//输出字体 
    Sleep(2000);
	setfillcolor(WHITE);//设置背景颜色
    solidrectangle(0,0,500,500);
    start=clock();
    int ranx=rand()%50+1;
    int rany=rand()%50+1;
    while(ranx==25)
    	ranx=rand()%50+1;
	while(rany==25)
		rany=rand()%50+1;
    me.x=ranx;
    me.y=rany;
    mx=my=25;
    rj1.x=rj1.y=ranx;
    rj2.x=rj2.y=rany;
	while(1){
		draw();
		finish=clock();
		totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
		setbkmode(TRANSPARENT);
		if(GetKeyState(VK_ESCAPE))
			break;
		if(totaltime>=90.0 || !rj1.life&&!rj2.life&&!me.life)
			break;
		if(mx==me.x&&my==me.y)
			me.life=0;
		if(mx==rj1.x&&my==rj1.y)
			rj1.life=0;
		if(mx==rj2.x&&my==rj2.y)
			rj2.life=0;
	}
	end(((me.life&&rj1.life)||(me.life&&rj2.life))&&!GetKeyState(VK_ESCAPE));
}
int main(){
	srand(time(0));
	cout<<"说明:\n\n";
	Sleep(1000);
	cout<<"wasd或上下左右键移动,f键扔眩晕球(眩晕5秒),空格键2倍速(所有东西都加速!)\n\n";
	Sleep(2000);
	cout<<"空格键要长按\n\n";
	Sleep(1400);
	cout<<"站到那个灰色的点上就可以就救人了,救人要3秒\n\n";
	Sleep(1700);
	cout<<"记住,你的队友是人机,你的对手也是人机\n\n";
	Sleep(1600);
	cout<<"困难版两个眩晕球\n\n";
	Sleep(1500);
	cout<<"通关方式:90秒后和任意一名(至少)人机队友在牢外\n\n";
	Sleep(1800);
	cout<<"其他道具正在开发\n\n";
	Sleep(1500);
	cout<<"按任意键继续...";
	getch();
	system("cls") ;
	cout<<"你要简单版(monster不会斜着走)、正常版(monster偶尔会斜着走)还是困难版(monster会斜着走)?\n简单版请输入1,正常版请输入2,困难版请输入3\n";
	c=getch();
	while(c!='1'&&c!='2'&&c!='3'){
		cout<<"看清楚!";
		system("cls");
		cout<<"你要简单版(monster不会斜着走)、正常版(monster偶尔会斜着走)还是困难版(monster会斜着走)?\n简单版请输入1,正常版请输入2,困难版请输入3\n";
		c=getch();
	}
	if(c=='1')
		cout<<"您选择的是简单版";
	else if(c=='2')
		cout<<"您选择的是正常版";
	else
		cout<<"您选择的是困难版",me.xyq++,rj1.xyq++,rj2.xyq++;
	Sleep(1700);
	system("cls");
	cout<<"黑~~~白~~~配~~~!\n";
	cout<<"1.黑\n2.白\n";
	char catcher=getch();
	while(catcher!='1'&&catcher!='2'){
		cout<<"认真点!";
		system("cls");
		cout<<"1.黑\n2.白\n";
		catcher=getch();
	}
	int rj1c,rj2c;
	rj1c=rand()%2;
	rj2c=rand()%2;
	int w=0,b=0;
	rj1c==1? w++:b++;
	rj2c==1? w++:b++;
	Sleep(700);
	if(w==0 && catcher=='2'){
		cout<<"你是抓捕者!";
	}
	else if(b==0 && catcher=='1'){
		cout<<"你是抓捕者!";
	}
	else{
		cout<<"你不是抓捕者!";
		Sleep(2000);
		run();
		getch();
		return 0;
	}
	Sleep(1000);
	cout<<"\n抓捕者模式还没做好,狂按空格(space)键给作者加速!\n";
	while(char c=getch()==32){
		cout<<"加速成功!\n";
		Sleep(100);
	}
	cout<<"别乱按啊!";
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值