C语言 推箱子小游戏(多年前入门时所写)



#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
/*
r 目的地
O 箱子
I 人
X 墙
  路 (空格)
W 上
A 左
D 右
S 下
*/
void menu();
int level1();
int level2();
void swap();
int opera();
void dituprint();


void menu()
{
cout<<"                     推箱子"<<endl;
cout<<"             1.新游戏              2.选关   "<<endl;
cout<<"             0.退出"<<endl;
}
void xuanguan()
{
int choice_level;
while(1)
{
cout<<"请选择关卡:"<<endl;
cin>>choice_level;
switch(choice_level)
{
case 1:
level1();
break;
case 2:
level2();
break;
default:
cout<<"输入有误   请重新选择关卡!";
}
}
}
void swap(char *a,char *b)
{
system("cls");
char ch;
ch=*a;
*a=*b;
*b=ch;
}
void dituprint(char *p)
{
//system("cls");
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
cout<<setw(2)<<p[i*9+j];
cout<<endl;
}
}
int opera(char *p,int *ren,int xzs)  //xzs 箱子数   ren 存有人与箱子目标的位置
{
dituprint(p);
while(1)
{
while(1)
{
for(int i=1,panduan=0;i<=xzs;i++)
{
if(p[ren[i]]=='O')
{
panduan+=1;
cout<<"panduan="<<panduan<<endl;
}  //判断当前有几个已经推到目的地了
if(panduan==xzs)
{
cout<<"恭喜你 过关啦! ";
getchar();
return 0;
}
}
char ch;
cout<<"你的按键为:";
cin>>ch;
switch(ch)
{
case 'w':
{
if(p[ren[0]]=='r')     //当前人所在的位置为箱子最终要到的目的地的话
{
if(p[ren[0]-9]=='r')       //要移到的位置是箱子最终目的地
{
ren[0]-=9;
p[ren[0]]='I';
p[ren[0]+9]='r';
break;
}
if(p[ren[0]-9]=='X')      //碰到墙了
{
cout<<"人碰到墙了  换其他按键1哇>>>>>";
break;
}
if(p[ren[0]-9]==' ')      //可以通过
{
ren[0]-=9;
p[ren[0]]='I';
p[ren[0]-9]='r';
break;
}
if(p[ren[0]-9]=='O')      //碰到箱子
{
if(p[ren[0]-18]=='X'||'O')
cout<<"箱子碰到墙了  换其他按键1哇>>>>>";break;
if(p[ren[0]-18]=='r')
{
p[ren[0]-18]='O';
p[ren[0]-9]='I';
p[ren[0]]='r';
ren[0]-=9;
break;
}
if(p[ren[0]-18]=='O')
cout<<"推不动哎  换其他按键1哇>>>>>";break;
if(p[ren[0]-18]==' ')
{
swap(p[ren[0]-9],p[ren[0]-18]);
swap(p[ren[0]],p[ren[0]-9]);
p[ren[0]]='r';
ren[0]-=9;
break;
}
}
}
else
{
if(p[ren[0]-9]=='X')
{
cout<<"人碰到墙了  换其他按键哇2>>>>>";
break;
}
if(p[ren[0]-9]==' ')
{
swap(p[ren[0]],p[ren[0]-9]);
ren[0]-=9;
break;
}
if(p[ren[0]-9]=='O')
{
//遇到箱子代码
if(p[ren[0]-18]=='O'||p[ren[0]-18]=='X')
{
cout<<"走不动了   换按其他键哇......."<<endl;
break;
}
if(p[ren[0]-18]=='r')
{
p[ren[0]-18]='O';
p[ren[0]-9]='I';
p[ren[0]]=' ';
ren[0]-=9;
break;
}
if(p[ren[0]-18]==' ')
{
p[ren[0]-18]='O';
p[ren[0]-9]='I';
p[ren[0]]=' ';
ren[0]-=9;
break;
}
}
}
}
break;
case 'a':
{
if(p[ren[0]]=='r')     //当前人所在的位置为箱子最终要到的目的地的话
{
if(p[ren[0]-1]=='r')       //要移到的位置是箱子最终目的地
{
ren[0]-=1;
p[ren[0]]='I';
p[ren[0]+1]='r';
break;
}
if(p[ren[0]-1]=='X')      //碰到墙了
{
cout<<"人碰到墙了  换其他按键1哇>>>>>";
break;
}
if(p[ren[0]-1]==' ')      //可以通过
{
ren[0]-=1;
p[ren[0]]='I';
p[ren[0]+9]='r';
break;
}
if(p[ren[0]-1]=='O')      //碰到箱子
{
if(p[ren[0]-2]=='X'||'O')
cout<<"箱子碰到墙了  换其他按键1哇>>>>>";break;
if(p[ren[0]-2]=='r')
{
p[ren[0]-2]='O';
p[ren[0]-1]='I';
p[ren[0]]='r';
ren[0]-=1;
break;
}
if(p[ren[0]-2]=='O')
cout<<"推不动哎  换其他按键1哇>>>>>";break;
if(p[ren[0]-2]==' ')
{
swap(p[ren[0]-1],p[ren[0]-2]);
swap(p[ren[0]],p[ren[0]-1]);
p[ren[0]]='r';
ren[0]-=1;
break;
}
}
}
else
{
if(p[ren[0]-1]=='X')
{
cout<<"人碰到墙了  换其他按键哇2>>>>>";
break;
}
if(p[ren[0]-1]==' ')
{
swap(p[ren[0]],p[ren[0]-1]);
ren[0]-=1;
break;
}
if(p[ren[0]-1]=='O')
{
//遇到箱子代码
if(p[ren[0]-2]=='O'||p[ren[0]-2]=='X')
{
cout<<"走不动了   换按其他键哇......."<<endl;
break;
}
if(p[ren[0]-2]=='r')
{
p[ren[0]-2]='O';
p[ren[0]-1]='I';
p[ren[0]]=' ';
ren[0]-=1;
break;
}
if(p[ren[0]-2]==' ')
{
p[ren[0]-2]='O';
p[ren[0]-1]='I';
p[ren[0]]=' ';
ren[0]-=1;
break;
}
}
}
}
break;
case 's':
{
if(p[ren[0]]=='r')     //当前人所在的位置为箱子最终要到的目的地的话
{
if(p[ren[0]+9]=='r')       //要移到的位置是箱子最终目的地
{
ren[0]+=9;
p[ren[0]]='I';
p[ren[0]-9]='r';
break;
}
if(p[ren[0]+9]=='X')      //碰到墙了
{
cout<<"人碰到墙了  换其他按键1哇>>>>>";
break;
}
if(p[ren[0]+9]==' ')      //可以通过
{
ren[0]+=9;
p[ren[0]]='I';
p[ren[0]+9]='r';
break;
}
if(p[ren[0]+9]=='O')      //碰到箱子
{
if(p[ren[0]+18]=='X'||'O')
cout<<"箱子碰到墙了  换其他按键1哇>>>>>";break;
if(p[ren[0]+18]=='r')
{
p[ren[0]+18]='O';
p[ren[0]+9]='I';
p[ren[0]]='r';
ren[0]+=9;
break;
}
if(p[ren[0]+18]=='O')
cout<<"推不动哎  换其他按键1哇>>>>>";break;
if(p[ren[0]+18]==' ')
{
swap(p[ren[0]+9],p[ren[0]+18]);
swap(p[ren[0]],p[ren[0]-9]);
p[ren[0]]='r';
ren[0]+=9;
break;
}
}
}
else
{
if(p[ren[0]+9]=='X')
{
cout<<"人碰到墙了  换其他按键哇2>>>>>";
break;
}
if(p[ren[0]+9]==' ')
{
swap(p[ren[0]],p[ren[0]+9]);
ren[0]+=9;
break;
}
if(p[ren[0]+9]=='O')
{
//遇到箱子代码
if(p[ren[0]+18]=='O'||p[ren[0]+18]=='X')
{
cout<<"走不动了   换按其他键哇......."<<endl;
break;
}
if(p[ren[0]+18]=='r')
{
p[ren[0]+18]='O';
p[ren[0]+9]='I';
p[ren[0]]=' ';
ren[0]+=9;
break;
}
if(p[ren[0]+18]==' ')
{
p[ren[0]+18]='O';
p[ren[0]+9]='I';
p[ren[0]]=' ';
ren[0]+=9;
break;
}
}
}
}
break;
case 'd':
{
if(p[ren[0]]=='r')     //当前人所在的位置为箱子最终要到的目的地的话
{
if(p[ren[0]+1]=='r')       //要移到的位置是箱子最终目的地
{
ren[0]+=1;
p[ren[0]]='I';
p[ren[0]-1]='r';
break;
}
if(p[ren[0]+1]=='X')      //碰到墙了
{
cout<<"人碰到墙了  换其他按键1哇>>>>>";
break;
}
if(p[ren[0]+1]==' ')      //可以通过
{
ren[0]+=1;
p[ren[0]]='I';
p[ren[0]+1]='r';
break;
}
if(p[ren[0]+1]=='O')      //碰到箱子
{
if(p[ren[0]+2]=='X'||'O')
cout<<"箱子碰到墙了  换其他按键1哇>>>>>";break;
if(p[ren[0]+2]=='r')
{
p[ren[0]+2]='O';
p[ren[0]+1]='I';
p[ren[0]]='r';
ren[0]+=1;
break;
}
if(p[ren[0]+2]=='O')
cout<<"推不动哎  换其他按键1哇>>>>>";break;
if(p[ren[0]+2]==' ')
{
swap(p[ren[0]+1],p[ren[0]+2]);
swap(p[ren[0]],p[ren[0]-1]);
p[ren[0]]='r';
ren[0]+=1;
break;
}
}
}
else
{
if(p[ren[0]+1]=='X')
{
cout<<"人碰到墙了  换其他按键哇2>>>>>";
break;
}
if(p[ren[0]+1]==' ')
{
swap(p[ren[0]],p[ren[0]+1]);
ren[0]+=1;
break;
}
if(p[ren[0]+1]=='O')
{
//遇到箱子代码
if(p[ren[0]+2]=='O'||p[ren[0]+2]=='X')
{
cout<<"走不动了   换按其他键哇......."<<endl;
break;
}
if(p[ren[0]+2]=='r')
{
p[ren[0]+2]='O';
p[ren[0]+1]='I';
p[ren[0]]=' ';
ren[0]+=1;
break;
}
if(p[ren[0]+2]==' ')
{
p[ren[0]+2]='O';
p[ren[0]+1]='I';
p[ren[0]]=' ';
ren[0]+=1;
break;
}
}
}
}
break;
default:cout<<"操作错误! 请确认后再重新操作......."<<endl;
}
dituprint(p);
}
/*int panduan=0;
for(int i=1;i<xzs;i++)
{
if(p[ren[i]]=='O')panduan++;
}
if(panduan=(xzs-1)){getchar();break;}*/
}
return 0;
}
int level1()
{
cout<<"第一关"<<endl;
char ditu1[9*9]={
'0','1','2','3','4','5','6','7','8',
'1',' ',' ','X','X','X',' ',' ',' ',
'2',' ',' ','X','r','X',' ',' ',' ',
'3',' ',' ','X',' ','X','X','X','X',
'4','X','X','X','O',' ','O','r','X',
'5','X','r',' ','O','I','X','X','X',
'6','X','X','X','X','O','X',' ',' ',
'7',' ',' ',' ','X','r','X',' ',' ',
'8',' ',' ',' ','X','X','X',' ',' '};
int ren1[5]={50,22,47,43,68};
opera(ditu1,ren1,4);
level2();
return 0;
}
int level2()
{
cout<<"     欢迎来到第二关"<<endl;
char ditu1[9*9]={
'0','1','2','3','4','5','6','7','8',
'1',' ',' ','X','X','X',' ',' ',' ',
'2',' ',' ','X','r','X',' ',' ',' ',
'3',' ',' ','X',' ','X','X','X','X',
'4','X','X','X','O',' ','O','r','X',
'5','X','r',' ','O','I','X','X','X',
'6','X','X','X','X','O','X',' ',' ',
'7',' ',' ',' ','X','r','X',' ',' ',
'8',' ',' ',' ','X','X','X',' ',' '};
int ren1[5]={50,22,47,43,68};
opera(ditu1,ren1,4);
level1();
return 0;
}
int main()
{
int choice;
menu();
while(1)
{
cin>>choice;
switch(choice)
{
case 0:
exit(0);
case 1:
{
level1();
break;
}
case 2:
{
xuanguan();
break;
}
default:
{
cout<<"操作错误! 请确认正确后操作......."<<endl;
}
}
}
getchar();
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值