推箱子游戏
2025-08-06 16:31:31
发布于:广东
有什么建议或者好地图请在评论区说出来😁
#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(x==0) {
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(peo==0) {
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<<endl;
}
go(px,py);
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(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*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<<"关卡"<<id<<endl;
//输出地图
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<<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();
}
全部评论 2
牛逼
22小时前 来自 广东
1nb
21小时前 来自 浙江
0
有帮助,赞一个