游戏的游玩方法在代码里,一定要看好啊!!!
加入了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;
}