c语言推箱子程序报告,C语言 推箱子小游戏(多年前入门时所写)

#include

#include

#include

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<

cout<

cout<

}

void xuanguan()

{

int choice_level;

while(1)

{

cout<

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<

cout<

}

}

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<

} //判断当前有几个已经推到目的地了

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<>>>>";

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<>>>>";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<>>>>";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<>>>>";

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<

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<>>>>";

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<>>>>";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<>>>>";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<>>>>";

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<

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<>>>>";

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<>>>>";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<>>>>";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<>>>>";

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<

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<>>>>";

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<>>>>";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<>>>>";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<>>>>";

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<

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<

}

dituprint(p);

}

/*int panduan=0;

for(int i=1;i

{

if(p[ren[i]]=='O')panduan++;

}

if(panduan=(xzs-1)){getchar();break;}*/

}

return 0;

}

int level1()

{

cout<

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<

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<

}

}

}

getchar();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值