推箱子
2025-08-13 19:10:51
发布于:广东
#include<iostream>//推箱子 2.0
#include<windows.h>
#include<string>
#include<conio.h>
using namespace std;
#define cls system("cls");
char map[100][100];//地图
int mapn,mapm;//地图长宽
int get;
int id=1;//关卡数
void print(string s) {
for(int i=0; i<s.size(); i++) {
cout<<s[i];
Sleep(30);
}
}
void guize();
void go(int& px,int& py);
void game_start();
void game() {
print("请输入地图的长和宽");
cin>>mapn>>mapm;
w2:
print("请输入地图");
cout<<endl;
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
cin>>map[i][j];
}
}
int x=0,z=0,peo=0,px=0,py=0;
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
if(map[i][j]'.')z++;
if(map[i][j]'')x++;
if(map[i][j]=='@') {
peo++;
px=i;
py=j;
}
if(map[i][j]!='-'&&map[i][j]!='#'&&map[i][j]!='@'&&map[i][j]!=''&&map[i][j]!='.'&&map[i][j]!=''&&
map[i][j]!='0') {
print("请好好输入");
Sleep(500);
cls;
goto w2;
}
}
}
Sleep(300);
cls;
if(x0) {
print("这个地图没有箱子");
Sleep(700);
cls;
goto w2;
}
if(x!=z) {
print("这个地图的箱子数量和终点数量不对应");
Sleep(800);
cls;
goto w2;
}
if(peo>1) {
print("一个地图只能有1个人");
Sleep(800);
cls;
goto w2;
}
if(peo0) {
print("一个地图必须有1个人");
Sleep(800);
cls;
goto w2;
}
bool yn=0;
cls;
while(yn==0) {
//输出地图
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
switch(map[i][j]) {
case '-':
cout<<' '<<' ';
break;
case '#':
cout<<"墙";
break;
case '':
cout<<"箱";
break;
case '@':
cout<<"人";
break;
case '.':
cout<<"终";
break;
case '*':
cout<<"好";
break;
case '0':
cout<<"人";
break;
}
}
cout<
}
}
}
if(!x) {
yn=1;
}
}
Sleep(600);
cls;
print("恭喜你,你获胜了");
Sleep(1000);
cls;
}
int main() {
print("欢迎来到推箱子");
Sleep(2000);
cls;
w1:
print("1:查看规则 2:关卡模式 3.输入地图");
cin>>get;
switch(get) {
case 1:
cls;
guize();
goto w1;
break;
case 2:
cls;
Sleep(500);
game_start();
goto w1;
break;
case 3:
cls;
Sleep(500);
game();
goto w1;
break;
default:
cls;
print("请好好输入");
Sleep(1000);
cls;
goto w1;
}
}
void guize() {
print("输入地图规则:\n");
Sleep(500);
print("先输入地图长宽(100
print(".代表终点,代表箱子已经在位置上,0代表人站在终点上)\n");
Sleep(600);
print("其他规则自己搜\n");
Sleep(500);
print("注意:都是英文的");
Sleep(1000);
print("\n\n按任意键继续..");
getch();
cls;
return;
}
void go(int& px,int& py) {
char get=getch();
switch(get) {
case 'w': {
//移动
if(map[px-1][py]'-'&&map[px][py]'@') {
map[px][py]='-';
px-=1;
map[px][py]='@';
} else if(map[px-1][py]'-'&&map[px][py]'0') {
map[px][py]='.';
map[px-1][py]='@';
px-=1;
} else if(map[px-1][py]'.'&&map[px][py]'@') {
map[px-1][py]='0';
map[px][py]='-';
px-=1;
} else if(map[px-1][py]'.'&&map[px][py]'0') {
map[px-1][py]='0';
map[px][py]='.';
px-=1;
}
//推箱子
else if(map[px-1][py]''&&map[px-2][py]=='-'&&map[px][py]=='@') {
map[px-2][py]='';
map[px-1][py]='@';
map[px][py]='-';
px-=1;
} else if(map[px-1][py]''&&map[px-2][py]=='-'&&map[px][py]=='0') {
map[px-2][py]='';
map[px-1][py]='@';
map[px][py]='.';
px-=1;
} else if(map[px-2][py]'.'&&map[px-1][py]''&&map[px][py]=='@') {
map[px-2][py]='*';
map[px-1][py]='@';
map[px][py]='-';
px-=1;
} else if(map[px-2][py]=='.'&&map[px-1][py]==''&&map[px][py]=='0') {
map[px-2][py]='';
map[px-1][py]='@';
map[px][py]='.';
px-=1;
} else if(map[px-1][py]'*'&&map[px-2][py]'-'&&map[px][py]'@') {
map[px-1][py]='0';
map[px-2][py]='';
map[px][py]='-';
px-=1;
} else if(map[px-1][py]=='*'&&map[px-2][py]=='-'&&map[px][py]=='0') {
map[px-1][py]='0';
map[px-2][py]='';
map[px][py]='.';
px-=1;
}
cls;
break;
}
case 's': {
//移动
if(map[px+1][py]'-'&&map[px][py]'@') {
map[px][py]='-';
px+=1;
map[px][py]='@';
} else if(map[px+1][py]'-'&&map[px][py]'0') {
map[px][py]='.';
map[px+1][py]='@';
px+=1;
} else if(map[px+1][py]'.'&&map[px][py]'@') {
map[px+1][py]='0';
map[px][py]='-';
px+=1;
} else if(map[px+1][py]'.'&&map[px][py]'0') {
map[px+1][py]='0';
map[px][py]='.';
px+=1;
}
//推箱子
else if(map[px+1][py]''&&map[px+2][py]=='-'&&map[px][py]=='@') {
map[px+2][py]='';
map[px+1][py]='@';
map[px][py]='-';
px+=1;
} else if(map[px+1][py]''&&map[px-2][py]=='-'&&map[px][py]=='0') {
map[px+2][py]='';
map[px+1][py]='@';
map[px][py]='.';
px+=1;
} else if(map[px+2][py]'.'&&map[px+1][py]''&&map[px][py]=='@') {
map[px+2][py]='*';
map[px+1][py]='@';
map[px][py]='-';
px+=1;
} else if(map[px+1][py]=='*'&&map[px+2][py]=='-'&&map[px][py]=='@') {
map[px][py]='-';
map[px+1][py]='0';
map[px+2][py]='';
px+=1;
} else if(map[px+1][py]''&&map[px+2][py]'-'&&map[px][py]'0') {
map[px+1][py]='0';
map[px+2][py]='';
map[px][py]='.';
px+=1;
} else if(map[px+2][py]=='.'&&map[px+1][py]==''&&map[px][py]=='0') {
map[px+2][py]='';
map[px+1][py]='@';
map[px][py]='.';
px+=1;
}
cls;
break;
}
case 'a': {
//移动
if(map[px][py-1]'-'&&map[px][py]'@') {
map[px][py]='-';
py-=1;
map[px][py]='@';
} else if(map[px][py-1]'-'&&map[px][py]'0') {
map[px][py]='.';
map[px][py-1]='@';
py-=1;
} else if(map[px][py-1]'.'&&map[px][py]'@') {
map[px][py-1]='0';
map[px][py]='-';
py-=1;
} else if(map[px][py-1]'.'&&map[px][py]'0') {
map[px][py-1]='0';
map[px][py]='.';
py-=1;
}
//推箱子
else if(map[px][py-1]''&&map[px][py-2]=='-'&&map[px][py]=='@') {
map[px][py-2]='';
map[px][py-1]='@';
map[px][py]='-';
py-=1;
} else if(map[px][py-1]''&&map[px][py-2]=='-'&&map[px][py]=='0') {
map[px][py-2]='';
map[px][py-1]='@';
map[px][py]='.';
py-=1;
} else if(map[px][py-2]'.'&&map[px][py-1]''&&map[px][py]=='@') {
map[px][py-2]='*';
map[px][py-1]='@';
map[px][py]='-';
py-=1;
} else if(map[px][py-1]=='*'&&map[px][py-2]=='-'&&map[px][py]=='@') {
map[px][py-1]='0';
map[px][py-2]='';
map[px][py]='-';
py-=1;
} else if(map[px][py-1]'*'&&map[px][py-2]'-'&&map[px][py]'0') {
map[px][py-1]='0';
map[px][py-2]='';
map[px][py]='.';
py-=1;
} else if(map[px][py-2]=='.'&&map[px][py-1]==''&&map[px][py]'0') {
map[px][py-2]='';
map[px][py-1]='@';
map[px][py]='.';
py-=1;
}
cls;
break;
}
case 'd': {
//移动
if(map[px][py+1]'-'&&map[px][py]'@') {
map[px][py]='-';
py+=1;
map[px][py]='@';
} else if(map[px][py+1]'-'&&map[px][py]'0') {
map[px][py]='.';
map[px][py+1]='@';
py+=1;
} else if(map[px][py+1]'.'&&map[px][py]'@') {
map[px][py+1]='0';
map[px][py]='-';
py+=1;
} else if(map[px][py+1]'.'&&map[px][py]'0') {
map[px][py+1]='0';
map[px][py]='.';
py+=1;
}
//推箱子
else if(map[px][py+1]''&&map[px][py+2]=='-'&&map[px][py]=='@') {
map[px][py+2]='';
map[px][py+1]='@';
map[px][py]='-';
py+=1;
} else if(map[px][py+1]''&&map[px][py+2]=='-'&&map[px][py]=='0') {
map[px][py+2]='';
map[px][py+1]='@';
map[px][py]='.';
py+=1;
} else if(map[px][py+2]'.'&&map[px][py+1]''&&map[px][py]=='@') {
map[px][py+2]='*';
map[px][py+1]='@';
map[px][py]='-';
py+=1;
} else if(map[px][py+1]=='*'&&map[px][py+2]=='-'&&map[px][py]=='@') {
map[px][py+1]='0';
map[px][py+2]='';
map[px][py]='-';
py+=1;
} else if(map[px][py+1]==''&&map[px][py+2]'-'&&map[px][py]'0') {
map[px][py+1]='0';
map[px][py+2]='';
map[px][py]='.';
py+=1;
} else if(map[px][py+2]=='.'&&map[px][py+1]==''&&map[px][py]'0') {
map[px][py+2]='';
map[px][py+1]='@';
map[px][py]='.';
py+=1;
}
cls;
break;
}
default:
go(px,py);
}
}
void game_start() {
int px=0,py=0;
switch(id) {
case 1: {
px=5;
py=2;
mapm=mapn=7;
string s="########-----##-----##-.--##@.--##-----########";
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
map[i][j]=s[j+(i-1)7-1];
}
}
break;
}
case 2: {
px=5;
py=2;
mapm=8,mapn=6;
string s="#####--##------##-#-##-##-###-##@--##.#########";
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
map[i][j]=s[j+(i-1)*8-1];
}
}
break;
}
case 3: {
px=py=2;
mapn=13;
mapm=11;
string s="########---#@-----##--#-..-#-#-..-##-####--##--#---#.-###---###--#---#.-##-####--##-..-##-..-#-#------##--########---";
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
map[i][j]=s[j+(i-1)*11-1];
}
}
break;
}
default: {
print("你已经完成了所有关卡,去创造属于你自己的关卡吧!");
Sleep(500);
print("按任意键继续...");
getch();
return;
}
}
int yn=0;
while(yn==0) {
cout<<"关卡"<
break;
case '@':
cout<<"人";
break;
case '.':
cout<<"终";
break;
case '*':
cout<<"好";
break;
case '0':
cout<<"人";
break;
}
}
cout<<endl;
}
go(px,py);
int x=0;
for(int i=1; i<=mapn; i++) {
for(int j=1; j<=mapm; j++) {
if(map[i][j]
x++;
}
}
}
if(!x) {
yn=1;
}
}
Sleep(500);
id++;
game_start();
}
(在集训营电脑发现的)
这里空空如也
有帮助,赞一个