专栏文章

C++之逃离后室游戏

休闲·娱乐参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioe8qyg
此快照首次捕获于
2025/12/02 17:46
3 个月前
此快照最后确认于
2025/12/02 17:46
3 个月前
查看原文
这,就是C++的尽头?
传统wsad上下左右移动,躲避‘G’的抓捕,拿到钥匙‘K’,然后用子弹(小键盘8246对应子弹上下左右)消灭‘G’,最后从门‘D’逃脱,简单小游戏,水作不易之作,求赞
CPP
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
char mapa[11][11];
bool canmove(int x,int y){
	if(x>0&&x<11&&y>0&&y<11&&mapa[x][y]!='#')return true;
	return false;
}
void writemap(){
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
		    mapa[i][j]='.';
		}
	} 
	int startx,starty,keyx,keyy,badx,bady,doorx,doory;
	startx=rand()%10+1;
	starty=rand()%10+1;
	mapa[startx][starty]='S';
	do{
		keyx=rand()%10+1;
		keyy=rand()%10+1;
	}while(keyx==startx&&keyy==starty);
	mapa[keyx][keyy]='K';
	do{
		badx=rand()%10+1;
		bady=rand()%10+1;
	}while((badx==startx&&bady==starty)||(badx==keyx&&bady==keyy));
	mapa[badx][bady]='B';
	do{
		doorx=rand()%10+1;
		doory=rand()%10+1;
	}while((doorx==startx&&doory==starty)||(doorx==keyx&&doory==keyy)||(doorx==badx&&doory==bady));
	mapa[doorx][doory]='D';
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			int b=rand()%8+1;
			if(b==1)mapa[i][j]='#';
		}
	}
}
int main(){
	srand(time(NULL));
	system("cls");
	writemap();
	int x,y,ex,ey,gx,gy,gx2,gy2,zx,zy;
	int usez=0;
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			if(mapa[i][j]=='S'){
				x=i;
				y=j;
			}
			else if(mapa[i][j]=='D'){
				ex=i;
				ey=j;
			}else if(mapa[i][j]=='B'){
				gx=i;
				gx2=i;
				gy=j;
				gy2=j;
			}
		}
	}
	bool havekey=0;
	int dead1=0,dead2=0;
	int gmove=0;
	while((x!=ex||y!=ey||havekey!=1||dead1!=5||dead2!=5)&&(x!=gx||y!=gy||dead1!=5)&&(x!=gx2||y!=gy2||dead2!=5)){
		if(!usez){
			zx=x;
			zy=y;
		}
		for(int i=1;i<=10;i++){
			for(int j=1;j<=10;j++){
				if(i==x&&j==y)cout<<'O';
				else if(i==zx&&j==zy)cout<<'*';
				else if((i==gx&&j==gy&&dead1!=5)||(i==gx2&&j==gy2&&dead2!=5))cout<<'G';
				else cout<<mapa[i][j];
			}
			cout<<endl;
		}
		if(_kbhit()){
			char oct=_getch();
			switch(oct){
				case 'a':
					if(canmove(x,y-1))y--;
					cout<<"左"<<endl;
					break;
				case 'd':
					if(canmove(x,y+1))y++;
					cout<<"右"<<endl;
					break;
				case 'w':
					if(canmove(x-1,y))x--;
					cout<<"上"<<endl;
					break;
			    case 's':
				    if(canmove(x+1,y))x++;
				    cout<<"下"<<endl;
				    break;
				case '8':
					if(!usez)usez=1;
					cout<<"biu"<<endl;
					break;
				case '2':
					usez=2;
					if(!usez)cout<<"biu"<<endl;
					break;
				case '4':
					if(!usez)usez=3;
					cout<<"biu"<<endl;
					break;
				case '6':
					if(!usez)usez=4;
					cout<<"biu"<<endl;
					break;
		    }
	    }
	    if(gmove%5==0){
	    	int t=rand()%400+1;
	    	if(t>=1&&t<=100){
	    		if(canmove(gx,gy-1)&&mapa[gx][gy-1]!='S')gy--;
			}
			if(t>=101&&t<=200){
				if(canmove(gx,gy+1)&&mapa[gx][gy+1]!='S')gy++; 
			}
			if(t>=201&&t<=300){
				if(canmove(gx-1,gy)&&mapa[gx-1][gy]!='S')gx--;
			}
			if(t>=301&&t<=400){
				if(canmove(gx+1,gy)&&mapa[gx+1][gy]!='S')gx++;
			}
			t=rand()%400+1;
	    	if(t>=1&&t<=100){
	    		if(canmove(gx2,gy2-1)&&mapa[gx2][gy2-1]!='S')gy2--;
			}
			if(t>=101&&t<=200){
				if(canmove(gx2,gy2+1)&&mapa[gx2][gy2+1]!='S')gy2++; 
			}
			if(t>=201&&t<=300){
				if(canmove(gx2-1,gy2)&&mapa[gx2-1][gy2]!='S')gx2--;
			}
			if(t>=301&&t<=400){
				if(canmove(gx2+1,gy2)&&mapa[gx2+1][gy2]!='S')gx2++;
			}
		}
		Sleep(50);
		system("cls");
		gmove++;
		if(gmove%2==0&&usez){
			if(usez==1)zx--;
			if(usez==2)zx++;
			if(usez==3)zy--;
			if(usez==4)zy++;
			if(zx==gx&&zy==gy&&dead1!=5)dead1++;
			if(zx==gx2&&zx==gy2&&dead2!=5)dead2++;
			if(mapa[zx][zy]=='#'||zx<1||zx>10||zy<1||zy>10)usez=0;
		}
		if(mapa[x][y]=='K'){
		   havekey=1;
		   cout<<"钥匙"<<endl;
		}
		if(mapa[x][y]=='D'&&havekey!=1){
			cout<<"上锁的门"<<endl;
		}
	}
	if(x==ex&&y==ey)cout<<"获胜"<<endl;
	else cout<<"失败"<<endl;
	return 0;
}
违规紫衫
如果你感兴趣的话也可以看看我的其他作品
求关QAQ

评论

0 条评论,欢迎与作者交流。

正在加载评论...