C++之警察抓小偷

本文分享了一段用C++编写的模拟警察抓小偷的游戏代码,包括地图生成、玩家操作和小偷移动逻辑。开发者阳了个阳C++在度假期间创作此游戏,提醒读者注意代码可能存在bug,并推荐改进版本《C++之警察抓小偷2.0》。
摘要由CSDN通过智能技术生成

大家好,我是阳了个阳C++,这几天去了海南玩,顺便写了一个警察抓小偷的代码,希望大家喜欢。

很抱歉通知大家,接下来我可能要断更很长一段时间,毕竟马上就要快开学了(唉……学生党一枚)

那么话不多说,代码奉上:

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
char street[11][12][12]; 
void first(){//用随机数设置楼房 
	for(int i=1;i<=10;i++){
		for(int j=1;j<=50;j++){
			int x=rand()%11+1;
			int y=rand()%11+1;
			if(x==6&&y==6){
				j--;
				continue;
			} 
			if(street[i][x][y]!='#'){
				street[i][x][y]='#';
			}else{
				j--;
			}
		}
	}
}
int main(){
	first();
	for(int i=1;i<=10;i++){//地图初始化 
		for(int x=1;x<=11;x++){
			for(int y=1;y<=11;y++){
				if(street[i][x][y]!='#'){
					street[i][x][y]='.';
				}
			}
		}
		street[i][6][6]='!';
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
	cout<<"游戏:警察抓小偷\n\n";
	Sleep(2000);
	cout<<"作者:阳了个阳C++\n\n";
	Sleep(2000);
	cout<<"进入游戏请按y\n\n";
	string key1;
	cin>>key1;
	while(key1!="y"){
		cout<<"进入游戏请按y\n\n" ;
		cin>>key1;
	} 
	cout<<"你是一位警官\n\n";
	Sleep(1500);
	cout<<"一天,你接到报案,在某街区发现一名小偷\n\n";
	Sleep(1500);
	cout<<"你立刻带人赶往街区\n\n";
	Sleep(1500);
	cout<<"该街区是一个11*11的地图\n\n";
	Sleep(2000);
	cout<<"地图上有一些楼房\n\n"; 
	Sleep(2000);
	cout<<"你可以选择地图边上的任意一个位置作为大本营\n\n";
	Sleep(2000);
	cout<<"你可以向其他方格部署警力\n\n";
	Sleep(2000);
	cout<<"但请注意,你想要部署警力的格子必须与已部署警力的格子相邻\n\n";
	Sleep(3000);
	cout<<"小偷的初始位置会在地图的正中心\n\n";
	Sleep(2000);
	cout<<"他每一步会移动到上下左右四个格子里的任意一格\n\n";
	Sleep(2000);
	cout<<"如果小偷到达了地图的边界,则小偷获胜\n\n";
	Sleep(2000);
	cout<<"如果警察抓住了小偷,则警察胜利\n\n";
	Sleep(2000);
	cout<<"如果你准备好了,请输入start\n\n";
	string key2;
	cin>>key2;
	while(key2!="start"){
		cout<<"如果你准备好了,请输入start\n\n";
		cin>>key2;
	}
	int n=1;
	while(n<=10){
		int X=6,Y=6;
		for(int x=1;x<=11;x++){//输出地图 
			for(int y=1;y<=11;y++){
				char tmp=street[n][x][y];
				if(tmp=='.'){
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
				}
				if(tmp=='#'){
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
				}
				if(tmp=='@'){
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);
				}
				if(tmp=='!'){
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);
				}
				cout<<tmp<<" ";
			}
			cout<<"\n";
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
		cout<<"请输入你的大本营的坐标:\n\n";
		int homex,homey;
		cin>>homex>>homey;
		while(street[n][homex][homey]=='#'||homex!=1&&homex!=11&&homey!=1&&homey!=11){
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
			cout<<"大本营的坐标不能是楼房,而且必须在地图边上\n\n";
			cin>>homex>>homey;
		}
		street[n][homex][homey]='@';
		while(1){
			for(int x=1;x<=11;x++){//输出地图 
				for(int y=1;y<=11;y++){
					char tmp=street[n][x][y];
					if(tmp=='.'){
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
					}
					if(tmp=='#'){
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
					}
					if(tmp=='@'){
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);
					}
					if(tmp=='!'){
						SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);
					}
					cout<<tmp<<" ";
				}
				cout<<"\n";
			}
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
			cout<<"请输入你要部署警力的坐标:\n\n";
			int x,y;
			cin>>x>>y;
			while(street[n][x][y-1]!='@'&&street[n][x][y+1]!='@'&&street[n][x+1][y]!='@'&&street[n][x-1][y]!='@'||street[n][x][y]=='#'){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
				cout<<"你想要部署警力的格子必须与已部署警力的格子相邻,并且不能是楼房\n\n";
				cin>>x>>y;
			} 
			if(x==X&&y==Y){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
				cout<<"小偷被你抓住了!恭喜你!\n\n";
				Sleep(1000);
				cout<<"如果想要继续下一局,请按y\n\n";
				string key4;
				cin>>key4;
				if(key4=="y") break;
				else return 0;
			} 
			street[n][x][y]='@';
			int rnd=rand()%8+1;
			if(rnd==1){//判断小偷的移动
				if(street[n][X-1][Y]=='.'){
					X-=1;
					street[n][X][Y]='!';
					street[n][X+1][Y]='.'; 
				}else{
					rnd+=1;
				} 
			}
			if(rnd==2){//判断小偷的移动
				if(street[n][X+1][Y]=='.'){
					X+=1;
					street[n][X][Y]='!';
					street[n][X-1][Y]='.';
				}else{
					rnd+=1;
				} 
			}
			if(rnd==3){//判断小偷的移动
				if(street[n][X][Y+1]=='.'){
					Y+=1;
					street[n][X][Y]='!';
					street[n][X][Y-1]='.';
				}else{
					rnd+=1;
				} 
			}
			if(rnd==4){//判断小偷的移动
				if(street[n][X][Y-1]=='.'){
					Y-=1;
					street[n][X][Y]='!';
					street[n][X][Y+1]='.';
				}else{
					rnd+=1;
				} 
			}
			if(X==1||X==11||Y==1||Y==11){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
				cout<<"很遗憾!小偷逃脱了!\n\n";
				Sleep(1000);
				cout<<"游戏结束";
				return 0; 
			}
		}
		n++;
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
	cout<<"恭喜你!你抓住了所有小偷!";
	return 0;
} 

如果有问题,希望大佬多多指正

觉得代码好玩的话,就请给我一个点赞和关注吧,你们的支持是我最大的动力!

后记:这篇代码是有bug的,想看更好的代码的同学可以去看一下《C++之警察抓小偷2.0》哦!

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值