一个控制台游戏
时间:2023-10-06 19:37:02
-
#include
#include #include #include #include #include using namespace std; #include #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) #define max 101 #define back 489 #define f1 367 #define f2 364 #define f3 244 #define xue 100 #define rbp 80 #define sxue 20 #define bxue 500 #define ss 200 #include #define co(NONAME) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),NONAME) int l1=xue,l2=xue; char ma[max][max]; int i11,j11,i2,j2,w1=0,w2=0,ww=0,row1=0,row2=0,yjsd=1,dshn=1,cshn=1,wudi=1,zjzr=1,sszw=1; string imt[10000001]; int imtu[10000001]; int ki=0; int c1=1,c2=1; int Bl=bxue,Bi,Bj,Br=1,Bs=1,wB=0,ti; struct pd { int s; int io,jo; }k[10000001]; struct wq { int lo; int io,jo; }k1[10000001]; int kw=0; int kn=0; int stop() { while(1) { if(_kbhit()) if(getch()==' ')break; } } int out() { int u1=0,u2=0; if(i11>=max)i11=max-1,u1=1; if(i2>=max)i2=max-1,u2=1; if(j11>=max)j11=max-1,u1=1; if(j2>=max)j2=max-1,u2=1; if(i11<=0)i11=1,u1=1; if(i2<=0)i2=1,u2=1; if(j11<=0)j11=1,u1=1; if(j2<=0)j2=1,u2=1; if(ma[i11][j11]!=' '&&ma[i11][j11]!=' '&&ma[i11][j11]!='!') { if(c1==1)i11 ; if(c1==2)j11 ; if(c1==3)i11--; if(c1==4)j11--; u1=1; } if(ma[i2][j2]!=' '&&ma[i2][j2]!='?') { if(c2==1)i2 ; if(c2==2)j2 ; if(c2==3)i2--; if(c2==4)j2--; u2=1; } ma[i11][j11]='!'; ma[i2][j2]='?'; if(KEY_DOWN('Q')&&!row1) { getch(); if(c1==1)ma[i11-1][j11]=' ' ; if(c1==2)ma[i11][j11-1]=' ' ; if(c1==3)ma[i11 1][j11]=' ' ; if(c1==4)ma[i11][j11 1]=' ' ; } if(KEY_DOWN('U')&&!row2) { getch(); if(c2==1)ma[i2-1][j2]=' ' ; if(c2==2)ma[i2][j2-1]=' ' ; if(c2==3)ma[i2 1][j2]=' ' ; if(c2==4)ma[i2][j2 1]=' ' ; } if(ma[i11][j11]==' ')l1-=10; if(ma[i2][j2]==' ')l2-=10; if(l1<0&&!row1) imt[ ki]="Player被拳头打死!row1) imt[ ki]="Player被拳头打死!",imtu[ki]=clock()/1000,row1=rbp,w2 ,W_minopen("3.sound"); if(l2<0&&!row2) imt[ ki]="Player被拳头打死!",imtu[ki]=clock()/1000,row2=rbp,w1 ,W_minopen("3.sound"); if(u1||u2)W_minopen("4.sound"); if(u1) { l1-=2; if(l1<=0&&!row1) imt[ ki]="Player掉出这个世界!",imtu[ki]=clock()/1000,row1=rbp,w2 ; } if(u2) { l2-=2; if(l2<=0&&!row2) imt[ ki]="Player掉出这个世界!",imtu[ki]=clock()/1000,row2=rbp,w1 ; } int i,j; W_cls; co(back); cout<<"█████████████████████ ██████████████████████"< =max||j<=0||j>=max)co(f2),cout<<"▓▓",co(f1); else cout< =max||j<=0||j>=max)co(f2),cout<<"▓▓",co(f1); else cout< 0&&k[j].io 0&&k[j].jo 0)k1[i].io++; else if(day1<0&&ma[k1[i].io][k1[i].jo-1]==' ')k1[i].jo--; else if(ma[k1[i].io][k1[i].jo+1]==' '&&day1>0)k1[i].jo++; } } else { if(abs(dax2)<=9&&abs(day2)<=9) { if(dax2<0&&ma[k1[i].io-1][k1[i].jo]==' ')k1[i].io--; else if(ma[k1[i].io+1][k1[i].jo]==' '&&dax2>0)k1[i].io++; else if(day2<0&&ma[k1[i].io][k1[i].jo-1]==' ')k1[i].jo--; else if(ma[k1[i].io][k1[i].jo+1]==' '&&day2>0)k1[i].jo++; } } ma[k1[i].io][k1[i].jo]='@'; } } int sf=1; int BOSS() { if(Br)return 0; if(sf==-1) { sf=1; return 0; } sf=-1; if(ma[Bi][Bj]==' ')Bl-=10; int dax1=i11-Bi,day1=j11-Bj,dax2=i2-Bi,day2=i2-Bj; int u=0,u1=1; ma[Bi][Bj]=' '; if(abs(dax1)+abs(day1)<=abs(dax2)+abs(day2)) { if(abs(dax1)<=9&&abs(day1)<=9) { u1=0; if(dax1<0&&ma[Bi-1][Bj]==' ')Bi--; else if(ma[Bi+1][Bj]!='+'&&dax1>0)Bi++; if(day1<0&&ma[Bi][Bj-1]==' ')Bj; else if(ma[Bi][Bj+1]==' '&&day1>0)Bj; } } else { if(abs(dax2)<=9&&abs(day2)<=9) { u1=0; if(dax2<0&&ma[Bi-1][Bj]==' ')Bi--; else if(ma[Bi+1][Bj]==' '&&dax2>0)Bi++; if(day2<0&&ma[Bi][Bj-1]==' ')Bj--; else if(ma[Bi][Bj]==' '&&day2>0)Bj++; } } if(abs(dax1)+abs(day1)<=3&&!row1)l1-=20,u=1; if(abs(dax2)+abs(day2)<=3&&!row2)l2-=20,u=1; if(u)W_minopen("4.sound"); if(i11==Bi&&abs(day1)<=20&&!row1) { u1=0; if(i11 Bi) { k[++kn].io=Bi,k[kn].jo=Bj; k[kn].s=4; } } if(i2==Bi&&abs(day2)<=20&&!row2) { u1=0; if(i2 Bi) { k[++kn].io=Bi,k[kn].jo=Bj; k[kn].s=4; } } if(j11==Bj&&abs(dax1)<=20&&!row1) { u1=0; if(j11 Bj) { k[++kn].io=Bi,k[kn].jo=Bj; k[kn].s=3; } } if(j2==Bj&&abs(dax2)<=20&&!row2) { u1=0; if(j2 Bj) { k[++kn].io=Bi,k[kn].jo=Bj; k[kn].s=3; } } if(u1) { int s=rand()%4+1; switch(s) { case 1:if(ma[Bi-1][Bj]==' ')Bi--;break; case 2:if(ma[Bi][Bj-1]==' ')Bj--;break; case 3:if(ma[Bi+1][Bj]==' ')Bi++;break; case 4:if(ma[Bi][Bj+1]==' ')Bj++;break; } } if(l1<0&&!row1) imt[++ki]="Player1被BOSS击杀了!",imtu[ki]=clock()/1000,row1=rbp,w2++; if(l2<0&&!row2) imt[++ki]="Player2被BOSS击杀了!",imtu[ki]=clock()/1000,row2=rbp,w1++; ma[Bi][Bj]='|'; } int impto() { int i; for(i=(ki-5>1?ki-5:1);i<=ki;i++) { printf("\n%4ds:",imtu[i]);cout< kw)WRONG_ else k1[i].lo=0,imt[++ki]="杀死一只僵尸~",imtu[ki]=clock()/1000,ww++; break; case 'p':if(i==1)imt[++ki]="Player1消失了~",imtu[ki]=clock()/1000,row1=rbp,w2++; else if(i==2)imt[++ki]="Player2消失了~",imtu[ki]=clock()/1000,row2=rbp,w1++; else WRONG_ break; case 'b':Bl=-1,imt[++ki]="BOSS被推出了游戏~",imtu[ki]=clock()/1000,Br=ss,wB++;break; } } int move(char sb,int u,int i,int j) { switch(sb) { case 'w':if(u>kw||k1[u].lo<=0)WRONG_ else k1[u].io=j,k1[u].jo=i,imt[++ki]="一只僵尸逃跑了~",imtu[ki]=clock()/1000; break; case 'p':if(u==1)i11=j,j11=i,imt[++ki]="Player1瞬移了~",imtu[ki]=clock()/1000; else if(u==2)i2=j,j2=i,imt[++ki]="Player2瞬移了~",imtu[ki]=clock()/1000; else WRONG_ break; case 'b':Bi=j,Bj=i,imt[++ki]="BOSS飞走了~",imtu[ki]=clock()/1000;break; } } int rock(int i,int j) { if(i>=max||i<=0||j>=max||j<=0)WRONG_ int u=0; if(i==j11&&j==i11&&!row1)l1-=5,u=1; else if(i==j2&&j==i2&&!row2)l2-=5,u=1; else if(i==Bj&&j==Bi&&!Br)Bl-=5,u=1; else ma[j][i]='+'; if(l1<=0&&!row1) imt[++ki]="Player1被石头砸死了!",imtu[ki]=clock()/1000,row1=rbp,w2++; if(l2<=0&&!row2) imt[++ki]="Player2被石头砸死了!",imtu[ki]=clock()/1000,row2=rbp,w1++; if(Bl<=0&&!Br) imt[++ki]="BOSS深埋地底!",imtu[ki]=clock()/1000,Br=ss,wB++; if(u)W_minopen("4.sound"); } int clean(int i,int j) { if(i>=max||i<=0||j>=max||j<=0)WRONG_ ma[i][j]=' '; } int around(char sb,int u) { int ii,jj; switch(sb) { case 'w':if(u>kw||k1[u].lo<=0)WRONG_ else ii=k1[u].io,jj=k1[u].jo,imt[++ki]="僵尸迷路了~",imtu[ki]=clock()/1000; break; case 'p':if(u==1)ii=i11,jj=j11,imt[++ki]="Player1被包围了~",imtu[ki]=clock()/1000; else if(u==2)ii=i2,jj=j2,imt[++ki]="Player2被包围了~",imtu[ki]=clock()/1000; else WRONG_ break; case 'b':ii=Bi,jj=Bj,imt[++ki]="BOSS被困住了~",imtu[ki]=clock()/1000;break; } if(ii+1<=max)ma[ii+1][jj]='+'; if(ii-1>0)ma[ii-1][jj]='+'; if(jj+1<=max)ma[ii][jj+1]='+'; if(jj-1>0)ma[ii][jj-1]='+'; } int full(char sb,int u,int i) { int cc1,ww,cc2,bb; if(i>0) { cc1=i; cc2=i; ww=i; bb=i; } else if(!i) { cc1=cc2=xue; ww=sxue; bb=bxue; } else { cc1=l1-i; cc2=l2-i; ww=k1[u].lo-i; bb=Bl-i; } switch(sb) { case 'w':if(u>kw||k1[u].lo<=0)WRONG_ else k1[u].lo=ww,imt[++ki]="僵尸出现了一些神奇的变化~",imtu[ki]=clock()/1000; break; case 'p':if(u==1)l1=cc1,imt[++ki]="Player1喝下了药水~",imtu[ki]=clock()/1000; else if(u==2)l2=cc2,imt[++ki]="Player2喝下了药水~",imtu[ki]=clock()/1000; else WRONG_ break; case 'b': Bl=ww,imt[++ki]="BOSS变异了~",imtu[ki]=clock()/1000;break; } } int again(char sb,int i) { switch(sb) { case 'w':if(i>kw||i<1)WRONG_ else k1[i].lo=sxue,imt[++ki]="僵尸卷土重来~",imtu[ki]=clock()/1000,k1[i].io=rand()%(max-1),k1[i].jo=rand()%(max-1),k1[i].lo=sxue,ma[k1[i].io][k1[i].jo]='@'; break; case 'p':if(i==1)row1=0,imt[++ki]="Player1恢复了~",imtu[ki]=clock()/1000,i11=rand()%(max-1),j11=rand()%(max-1),l1=xue,ma[i11][j11]='!'; else if(i==2)row2=0,imt[++ki]="Player2恢复了~",imtu[ki]=clock()/1000,i2=rand()%(max-1),j2=rand()%(max-1),l2=xue,ma[i2][j2]='?'; else WRONG_ break; case 'b':Br=0,imt[++ki]="BOSS被唤醒了~",imtu[ki]=clock()/1000,Bi=rand()%(max-1),Bj=rand()%(max-1),Bl=bxue,ma[Bi][Bj]='|';break; } } int find(char sb,int i) { if(sb=='w') { if(i>kw||i<1)WRONG_ printf("\n僵尸%d号 %6d◆ ",i,k1[i].lo); if(k1[i].lo>0)printf("位于(%3d,%3d) 存活中-",k1[i].jo,k1[i].io); else printf("已死亡"); }else if(sb=='p') { if(i==1) { printf("PLAYER1 (%3d,%3d) 得分:%3d",j11,i11,w1); if(row1)printf(" %d秒后复活",row1/1000); else printf(" %6d◆",l1); } if(i==2) { printf("PLAYER2 (%3d,%3d) 得分:%3d",j2,i2,w2); if(row2)printf(" %d秒后复活",row2/1000); else printf(" %6d◆",l2); } }else if(sb=='b') { printf("BOSS (%3d,%3d)",Bj,Bi); if(Br)printf(" %d秒后复活",Br/1000); else printf(" %6d◆",Bl); }else WRONG_ } int row(char sb,int u,int i) { int cc1,cc2,bb; if(i>0) { cc1=i; cc2=i; bb=i; } else if(!i) { cc1=cc2=rbp; bb=ss; } else { cc1=row1-i; cc2=row2-i; bb=Bl-i; } switch(sb) { case 'p':if(u==1)row1=cc1,imt[++ki]="Player1被封印了~",imtu[ki]=clock()/1000; else if(u==2)row1=cc2,imt[++ki]="Player2被封印了~",imtu[ki]=clock()/1000; else WRONG_ break; case 'b': Bl=ww,imt[++ki]="BOSS变异了~",imtu[ki]=clock()/1000;break; } } int forl() { string cmdu,ml1="kill",ml2="move",ml3="rock",ml4="around",ml5="full",ml6="again",ml7="out",ml8="find",ml9="clean",ml10="row"; char ca1,ca2; int in1,in2,in3,in4,i,j,in5,in6; string st1,st2; cin>>cmdu; if(cmdu==ml1) { cin>>ca1>>in1>>in2; if((ca1=='p')&&(in1>2||in2>2)||(ca1=='w')&&(in1>kw||in2>kw)||in1<1||in2<1)WRONG_ for(i=in1;i<=in2;i++)kill(ca1,i); }else if(cmdu==ml2) { cin>>ca1>>in1>>in2>>in3>>in4; if((ca1=='p')&&(in1>2||in2>2)||(ca1=='w')&&(in1>kw||in2>kw)||in1<1||in2<1)WRONG_ for(i=in1;i<=in2;i++)move(ca1,i,in3,in4); }else if(cmdu==ml3) { cin>>in1>>in2>>in3>>in4>>in5; if(in1>=max||in1<=0||in2>=max||in2<=0||in3>=max||in3<=0||in4>=max||in4<=0||in5<=0)WRONG_ if(in1>in3) { in6=in1; in1=in3; in3=in6; } if(in2>in4) { in6=in2; in2=in4; in4=in6; } for(i=in1;i<=in3;i++) for(j=in2;j<=in4;j++) for(in6=1;in6<=in5;in6++) rock(i,j); imt[++ki]="天降巨石~",imtu[ki]=clock()/1000; }else if(cmdu==ml4) { cin>>ca1>>in1>>in2; if((ca1=='p')&&(in1>2||in2>2)||(ca1=='w')&&(in1>kw||in2>kw)||in1<1||in2<1)WRONG_ for(i=in1;i<=in2;i++)around(ca1,i); }else if(cmdu==ml5) { cin>>ca1>>in1>>in2>>in3; if((ca1=='p')&&(in2>2||in3>2)||(ca1=='w')&&(in2>kw||in3>kw)||in2<1||in3<1)WRONG_ for(i=in2;i<=in3;i++)full(ca1,i,in1); }else if(cmdu==ml6) { cin>>ca1>>in1>>in2; if((ca1=='p')&&(in1>2||in2>2)||(ca1=='w')&&(in1>kw||in2>kw)||in1<1||in2<1)WRONG_ for(i=in1;i<=in2;i++)again(ca1,i); }else if(cmdu==ml7) { cin>>st1>>in1; for(i=1;i<=in1;i++) imt[++ki]=st1,imtu[ki]=clock()/1000; }else if(cmdu==ml8) { cin>>ca1>>in1>>in2; if((ca1=='p')&&(in1>2||in2>2)||(ca1=='w')&&(in1>kw||in2>kw)||in1<1||in2<1)WRONG_ for(i=in1;i<=in2;i++)find(ca1,i); stop(); }else if(cmdu==ml9) { cin>>in1>>in2>>in3>>in4; if(in1>=max||in1<=0||in2>=max||in2<=0||in3>=max||in3<=0||in4>=max||in4<=0)WRONG_ if(in1>in3) { in6=in1; in1=in3; in3=in6; } if(in2>in4) { in6=in2; in2=in4; in4=in6; } for(i=in1;i<=in3;i++) for(j=in2;j<=in4;j++) clean(j,i); imt[++ki]="某些东西消失了~",imtu[ki]=clock()/1000; }else if(cmdu==ml10) { cin>>ca1>>in1>>in2>>in3; if((ca1=='p')&&(in2>2||in3>2)||(ca1=='w')&&(in2>kw||in3>kw)||in2<1||in3<1)WRONG_ for(i=in2;i<=in3;i++)row(ca1,i,in1); } } int cmd() { printf("\n命令:"); string cmdu,ml1="kill",ml2="move",ml3="rock",ml4="around",ml5="full",ml6="again",ml7="out",ml8="for",ml9="find",ml10="clean",ml11="row",ml12="now",ml13="first"; char ca1,ca2; int in1,in2,in3,in4; string st1,st2; cin>>cmdu; if(cmdu=="exit")return 1; if(cmdu==ml1) { cin>>ca1>>in1; kill(ca1,in1); }else if(cmdu==ml2) { cin>>ca1>>in1>>in2>>in3; move(ca1,in1,in2,in3); }else if(cmdu==ml3) { cin>>in1>>in2; rock(in1,in2); imt[++ki]="天降巨石~",imtu[ki]=clock()/1000; }else if(cmdu==ml4) { cin>>ca1>>in1; around(ca1,in1); }else if(cmdu==ml5) { cin>>ca1>>in1>>in2; full(ca1,in1,in2); }else if(cmdu==ml6) { cin>>ca1>>in1; again(ca1,in1); }else if(cmdu==ml7) { cin>>st1; imt[++ki]=st1,imtu[ki]=clock()/1000; }else if(cmdu==ml8) { forl(); }else if(cmdu==ml9) { cin>>ca1; if(ca1=='w') { cin>>in1; if(in1>0)find(ca1,in1); else printf("共生成僵尸%d只-",kw); } if(ca1=='p') { cin>>in1; if(in1>0)find(ca1,in1); else printf("共杀死僵尸%d只-",ww); } if(ca1=='b') { cin>>in1; if(in1>0)find(ca1,in1); else printf("共被击败%d次-",wB); } }else if(cmdu==ml10) { cin>>in1>>in2; clean(in2,in1); imt[++ki]="某些东西消失了~",imtu[ki]=clock()/1000; }else if(cmdu==ml11) { cin>>ca1>>in1>>in2; row(ca1,in1,in2); }else if(cmdu==ml12) { system("cls"); for(int i=1;i<=ki;i++) { printf("%4ds:",imtu[i]);cout< =5&&dshn)imt[++ki]="弑尸大神*",dshn=0,imtu[ki]=clock()/1000; if(ww>=10&&cshn)imt[++ki]="弑尸超神*",cshn=0,imtu[ki]=clock()/1000; if(ww>=20&&wudi)imt[++ki]="天下无敌*",wudi=0,imtu[ki]=clock()/1000; if(wB>=2&&zjzr)imt[++ki]="终结之人*",zjzr=0,imtu[ki]=clock()/1000; if(wB>=5&&sszw)imt[++ki]="手速之王*",sszw=0,imtu[ki]=clock()/1000; if(row1&&row2&&yjsd)imt[++ki]="一箭双雕*",yjsd=0,imtu[ki]=clock()/1000; if(row1>1)row1--; else if(row1==1)l1=xue,row1=0,yjsd=1,imt[++ki]="PLAYER1再生~",imtu[ki]=clock()/1000,ma[i11][j11]='+',i11=rand()%(max-1)+1,j11=rand()%(max-1)+1,ma[i11][j11]='!'; if(row2>1)row2--; else if(row2==1)l2=xue,row2=0,yjsd=1,imt[++ki]="PLAYER2再生~",imtu[ki]=clock()/1000,ma[i11][j11]='+',i2=rand()%(max-1)+1,j2=rand()%(max-1)+1,ma[i11][j11]='?'; if(Br>1)Br--; else if(Br==1)Bl=bxue,Br=0,imt[++ki]="BOSS回来了~",imtu[ki]=clock()/1000,Bi=rand()%(max-1)+1,Bj=rand()%(max-1)+1,ma[Bi][Bj]='@'; if(clock()-ti<=100)Sleep(100-clock()+ti); } Sleep(100); system("cls"); system("color F0"); printf("本局回顾:"); for(i=1;i<=ki;i++) { printf("\n%4ds:",imtu[i]);cout< w2)printf("MVP:PLAYER1"); else if(w1 #include #include #include