大家好,我是阳了个阳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》哦!