推箱子这一关怎么破?

推箱子这一关怎么破?,第1张

用蠢行线路画需要的纸张太多,一张图加文字看你能不能看明白吧。

假设从左到右的三个箱子号码为1、2、3,三个目的地号码为4、5、6,其他需要用的几个地方分别按标的数字编码。

首先把3号箱子推到7号位置,这样利用了右下角唯一的空地,可以进行周转。然后把1号箱子推到11号位早如置,这样是为了随时保证整个地图是可以转圈畅通的,然后把1号箱子再推到8号位置。继续把2号箱子推到9号位置,把1号箱子推到原来2号箱子的位置,这样图仍然是畅通的。把2号箱子推到10号位置,然后推到5号目的地,这是三个目的地中最难的,先解决它。继续把1号箱子推到9号位置,然后推到最顶陆档启上,然后推到4号目的地。此时全图仍然是畅通的,可以把最后的3号箱子推到6号目的地了。完成。

下面是stopheart版主在魔方吧推箱子子论坛发表的:

箱子的技巧:

1、推箱子要掌握好次序-井然有序

2、发现空位,用改行来倒腾(腾挪)箱子

3、.建立通路,不要轻易封死一个通路

4、死锁问题,死锁的含义是推到箱子就动不了,

或无论如何也无法将箱子推到目标点。

要过关, 当然和改是无论如何你也不想看到死锁的情况出现。

5、耐核棚哗心

给你一个TC版本的吧郑做兆宴,VC版本的CSDN上可以下载:

#include <dos.h>

#include <stdio.h>

#include <ctype.h>

#include <喊猜衡conio.h>

#include <bios.h>

#include <alloc.h>

typedef struct winer

{

int x,y

struct winer *p

}winer

char status [20][20]

char far *printScreen=(char far* )0xB8000000

void putoutChar(int y,int x,char ch,char fc,char bc)

void printWall(int x, int y)

void printBox(int x, int y)

void printBoxDes(int x, int y)

void printDestination(int x, int y)

void printDestination1(int x,int y,winer **win,winer **pw)

void printMan(int x, int y)

void init()

winer *initStep1()

winer *initStep2()

winer *initStep3()

winer *initStep4()

void moveBoxSpacetoSpace(int x ,int y, char a)

void moveBoxDestoSpace(int x ,int y, char a)

void moveBoxSpacetoDes(int x, int y, char a)

void moveBoxDestoDes(int x, int y, char a)

int judge(int x, int y)

void move(int x, int y, char a)

void reset(int i)

void putoutChar(int y,int x,char ch,char fc,char bc)

{

printScreen[(x*160)+(y<<1)+0]=ch

printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc

}

void printWall(int x,int y)

{

putoutChar(y-1,x-1,219,GREEN,BLACK)

status[x][y]='w'

}

void printBox(int x,int y)

{

putoutChar(y-1,x-1,10,WHITE,BLACK)

status[x][y]='b'

}

void printDestination1(int x,int y,winer **win,winer **pw)

{

winer *qw

putoutChar(y-1,x-1,003,YELLOW,BLACK)

status[x][y]='m'

if(*win==NULL)

{

*win=*pw=qw=(winer* )malloc(sizeof(winer))

(*pw)->x=x

(*pw)->y=y

(*pw)->p=NULL

}

else

{

qw=(winer* )malloc(sizeof(winer))

qw->x=x

qw->y=y

(*pw)->p=qw

(*pw)=qwqw->p=NULL

}

}

void printDestination(int x,int y)

{

putoutChar(y-1,x-1,003,YELLOW,BLACK)

status[x][y]='m'

}

void printMan(int x,int y)

{

gotoxy(y,x)

_AL=02

_CX=01

_AH=0xa

geninterrupt(0x10)

}

void printBoxDes(int x,int y)

{

putoutChar(y-1,x-1,10,YELLOW,BLACK)

status[x][y]='i'

}

void init()

{

int i,j

for(i=0i<20i++)

for(j=0j<20j++)

status[i][j]=0

_AL=3

_AH=0

geninterrupt(0x10)

gotoxy(41,4)

printf(" --------- up")

gotoxy(41,6)

printf(" --------- down")

gotoxy(41,8)

printf(" --------- left")

gotoxy(41,10)

printf(" --------- right")

gotoxy(40,12)

printf("Space ----- reset")

gotoxy(40,14)

printf("Esc ------- quit")

gotoxy(18,24)

printf("CopyRight: 2008 LuoFuxing")

gotoxy(40,4)

_CX=01

_AH=0xa

_AL=24

geninterrupt(0x10)

gotoxy(40,6)

_CX=01

_AH=0xa

_AL=25

geninterrupt(0x10)

gotoxy(40,8)

_CX=01

_AH=0xa

_AL=27

geninterrupt(0x10)

gotoxy(40,10)

_CX=01

_AH=0xa

_AL=26

geninterrupt(0x10)

}

winer *initStep1()

{

int x

int y

winer *win=NULL

winer *pw

gotoxy(25,2)

printf("Level 1")

for(x=1,y=5y<=9y++)

printWall(x+4,y+10)

for(y=5,x=2x<=5x++)

printWall(x+4,y+10)

for(y=9,x=2x<=5x++)

printWall(x+4,y+10)

for(y=1,x=3x<=8x++)

printWall(x+4,y+10)

for(x=3,y=3x<=5x++)

printWall(x+4,y+10)

for(x=5,y=8x<=9x++)

printWall(x+4,y+10)

for(x=7,y=4x<=9x++)

printWall(x+4,y+10)

for(x=9,y=5y<=7y++)

printWall(x+4,y+10)

for(x=8,y=2y<=3y++)

printWall(x+4,y+10)

printWall(5+4,4+10)

printWall(5+4,7+10)

printWall(3+4,2+10)

printBox(3+4,6+10)

printBox(3+4,7+10)

printBox(4+4,7+10)

printDestination1(4+4,2+10,&win,&pw)

printDestination1(5+4,2+10,&win,&pw)

printDestination1(6+4,2+10,&win,&pw)

printMan(2+4,8+10)

return win

}

winer *initStep2()

{

int x

int y

winer *win=NULL

winer *pw

gotoxy(25,2)

printf("Level 2")

for(x=1,y=4y<=7y++)

printWall(x+4,y+10)

for(x=2,y=2y<=4y++)

printWall(x+4,y+10)

for(x=2,y=7x<=4x++)

printWall(x+4,y+10)

for(x=4,y=1x<=8x++)

printWall(x+4,y+10)

for(x=8,y=2y<=8y++)

printWall(x+4,y+10)

for(x=4,y=8x<=8x++)

printWall(x+4,y+10)

for(x=4,y=6x<=5x++)

printWall(x+4,y+10)

for(x=3,y=2x<=4x++)

printWall(x+4,y+10)

for(x=4,y=4x<=5x++)

printWall(x+4,y+10)

printWall(6+4,3+10)

printBox(3+4,5+10)

printBox(6+4,6+10)

printBox(7+4,3+10)

printDestination1(5+4,7+10,&win,&pw)

printDestination1(6+4,7+10,&win,&pw)

printDestination1(7+4,7+10,&win,&pw)

printMan(2+4,6+10)

return win

}

winer *initStep3()

{

int x

int y

winer *win=NULL

winer *pw

gotoxy(25,2)

printf("Level 3")

for(x=1,y=2y<=8y++)

printWall(x+4,y+10)

for(x=2,y=2x<=4x++)

printWall(x+4,y+10)

for(x=4,y=1y<=3y++)

printWall(x+4,y+10)

for(x=5,y=1x<=8x++)

printWall(x+4,y+10)

for(x=8,y=2y<=5y++)

printWall(x+4,y+10)

for(x=5,y=5x<=7x++)

printWall(x+4,y+10)

for(x=7,y=6y<=9y++)

printWall(x+4,y+10)

for(x=3,y=9x<=6x++)

printWall(x+4,y+10)

for(x=3,y=6y<=8y++)

printWall(x+4,y+10)

printWall(2+4,8+10)

printWall(5+4,7+10)

printBox(6+4,3+10)

printBox(4+4,4+10)

printBox(5+4,6+10)

printDestination1(2+4,5+10,&win,&pw)

printDestination1(2+4,6+10,&win,&pw)

printDestination1(2+4,7+10,&win,&pw)

printMan(2+4,4+10)

return win

}

winer *initStep4()

{

int x

int y

winer *win=NULL

winer *pw

gotoxy(23,2)

printf("The Last Level")

for(x=1,y=1y<=6y++)

printWall(x+4,y+10)

for(x=2,y=7y<=8y++)

printWall(x+4,y+10)

for(x=2,y=1x<=7x++)

printWall(x+4,y+10)

for(x=7,y=2y<=4y++)

printWall(x+4,y+10)

for(x=6,y=4y<=9y++)

printWall(x+4,y+10)

for(x=3,y=9x<=5x++)

printWall(x+4,y+10)

for(x=3,y=3y<=4y++)

printWall(x+4,y+10)

printWall(3+4,8+10)

printBox(3+4,5+10)

printBox(4+4,4+10)

printBox(4+4,6+10)

printBox(5+4,5+10)

printBox(5+4,3+10)

printDestination1(3+4,7+10,&win,&pw)

printDestination1(4+4,7+10,&win,&pw)

printDestination1(5+4,7+10,&win,&pw)

printDestination1(4+4,8+10,&win,&pw)

printDestination1(5+4,8+10,&win,&pw)

printMan(2+4,2+10)

return win

}

void moveBoxSpacetoSpace(int x,int y,char a)

{

switch(a)

{

case 'u':

status[x-1][y]=0

printf(" ")

printBox(x-2,y)

printMan(x-1,y)

status[x-2][y]='b'

break

case 'd':

status[x+1][y]=0

printf(" ")

printBox(x+2,y)

printMan(x+1,y)

status[x+2][y]='b'

break

case 'l':

status[x][y-1]=0

printf(" ")

printBox(x,y-2)

printMan(x,y-1)

status[x][y-2]='b'

break

case 'r':

status[x][y+1]=0

printf(" ")

printBox(x,y+2)

printMan(x,y+1)

status[x][y+2]='b'

break

default:

break

}

}

void moveBoxDestoSpace(int x,int y,char a)

{

switch(a)

{

case 'u':

status[x-1][y]='m'

printf(" ")

printBox(x-2,y)

printMan(x-1,y)

status[x-2][y]='b'

break

case 'd':

status[x+1][y]='m'

printf(" ")

printBox(x+2,y)

printMan(x+1,y)

status[x+2][y]='b'

break

case 'l':

status[x][y-1]='m'

printf(" ")

printBox(x,y-2)

printMan(x,y-1)

status[x][y-2]='b'

break

case 'r':

status[x][y+1]='m'

printf(" ")

printBox(x,y+2)

printMan(x,y+1)

status[x][y+2]='b'

break

default:

break

}

}

void moveBoxSpacetoDes(int x,int y,char a)

{

switch(a)

{

case 'u':

status[x-1][y]=0

printf(" ")

printBoxDes(x-2,y)

printMan(x-1,y)

status[x-2][y]='i'

break

case 'd':

status[x+1][y]=0

printf(" ")

printBoxDes(x+2,y)

printMan(x+1,y)

status[x+2][y]='i'

break

case 'l':

status[x][y-1]=0

printf(" ")

printBoxDes(x,y-2)

printMan(x,y-1)

status[x][y-2]='i'

break

case 'r':

status[x][y+1]=0

printf(" ")

printBoxDes(x,y+2)

printMan(x,y+1)

status[x][y+2]='i'

break

default:

break

}

}

void moveBoxDestoDes(int x,int y,char a)

{

switch(a)

{

case 'u':

status[x-1][y]='m'

printf(" ")

printBoxDes(x-2,y)

printMan(x-1,y)

status[x-2][y]='i'

break

case 'd':

status[x+1][y]='m'

printf(" ")

printBoxDes(x+2,y)

printMan(x+1,y)

status[x+2][y]='i'

break

case 'l':

status[x][y-1]='m'

printf(" ")

printBoxDes(x,y-2)

printMan(x,y-1)

status[x][y-2]='i'

break

case 'r':

status[x][y+1]='m'

printf(" ")

printBoxDes(x,y+2)

printMan(x,y+1)

status[x][y+2]='i'

break

default:

break

}

}

int judge(int x,int y)

{

int i

switch(status[x][y])

{

case 0:

i=1

break

case 'w':

i=0

break

case 'b':

i=2

break

case 'i':

i=4

break

case 'm':

i=3

break

default:

break

}

return i

}

void move(int x,int y,char a)

{

switch(a)

{

case 'u':

if(!judge(x-1,y))

{

gotoxy(y,x)

break

}

else if(judge(x-1,y)==1||judge(x-1,y)==3)

{

if(judge(x,y)==3)

{

printDestination(x,y)

printMan(x-1,y)

break

}

else

{

printf(" ")

printMan(x-1,y)

break

}

}

else if(judge(x-1,y)==2)

{

if(judge(x-2,y)==1)

{

moveBoxSpacetoSpace(x,y,'u')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x-1)

}

else if(judge(x-2,y)==3)

{

moveBoxSpacetoDes(x,y,'u')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x-1)

}

else

gotoxy(y,x)

break

}

else if(judge(x-1,y)==4)

{

if(judge(x-2,y)==1)

{

moveBoxDestoSpace(x,y,'u')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x-1)

}

else if(judge(x-2,y)==3)

{

moveBoxDestoDes(x,y,'u')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x-1)

}

else

gotoxy(y,x)

break

}

case 'd':

if(!judge(x+1,y))

{

gotoxy(y,x)

break

}

else if(judge(x+1,y)==1||judge(x+1,y)==3)

{

if(judge(x,y)==3)

{

printDestination(x,y)

printMan(x+1,y)

break

}

else

{

printf(" ")

printMan(x+1,y)

break

}

}

else if(judge(x+1,y)==2)

{

if(judge(x+2,y)==1)

{

moveBoxSpacetoSpace(x,y,'d')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x+1)

}

else if(judge(x+2,y)==3)

{

moveBoxSpacetoDes(x,y,'d')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x+1)

}

else

gotoxy(y,x)

break

}

else if(judge(x+1,y)==4)

{

if(judge(x+2,y)==1)

{

moveBoxDestoSpace(x,y,'d')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x+1)

}

else if(judge(x+2,y)==3)

{

moveBoxDestoDes(x,y,'d')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y,x+1)

}

else

gotoxy(y,x)

break

}

case 'l':

if(!judge(x,y-1))

{

gotoxy(y,x)

break

}

else if(judge(x,y-1)==1||judge(x,y-1)==3)

{

if(judge(x,y)==3)

{

printDestination(x,y)

printMan(x,y-1)

break

}

else

{

printf(" ")

printMan(x,y-1)

break

}

}

else if(judge(x,y-1)==2)

{

if(judge(x,y-2)==1)

{

moveBoxSpacetoSpace(x,y,'l')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y-1,x)

}

else if(judge(x,y-2)==3)

{

moveBoxSpacetoDes(x,y,'l')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y-1,x)

}

else

gotoxy(y,x)

break

}

else if(judge(x,y-1)==4)

{

if(judge(x,y-2)==1)

{

moveBoxDestoSpace(x,y,'l')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y-1,x)

}

else if(judge(x,y-2)==3)

{

moveBoxDestoDes(x,y,'l')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y-1,x)

}

else

gotoxy(y,x)

break

}

case 'r':

if(!judge(x,y+1))

{

gotoxy(y,x)

break

}

else if(judge(x,y+1)==1||judge(x,y+1)==3)

{

if(judge(x,y)==3)

{

printDestination(x,y)

printMan(x,y+1)

break

}

else

{

printf(" ")

printMan(x,y+1)

break

}

}

else if(judge(x,y+1)==2)

{

if(judge(x,y+2)==1)

{

moveBoxSpacetoSpace(x,y,'r')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y+1,x)

}

else if(judge(x,y+2)==3)

{

moveBoxSpacetoDes(x,y,'r')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y+1,x)

}

else

gotoxy(y,x)

break

}

else if(judge(x,y+1)==4)

{

if(judge(x,y+2)==1)

{

moveBoxDestoSpace(x,y,'r')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y+1,x)

}

else if(judge(x,y+2)==3)

{

moveBoxDestoDes(x,y,'r')

if(judge(x,y)==3)

printDestination(x,y)

gotoxy(y+1,x)

}

else

gotoxy(y,x)

break

}

default:

break

}

}

void reset(int i)

{

switch(i)

{

case 0:

init()

initStep1()

break

case 1:

init()

initStep2()

break

case 2:

init()

initStep3()

break

case 3:

init()

initStep4()

break

default:

break

}

}

void main()

{

int key

int x

int y

int s

int i=0

winer *win

winer *pw

_AL=3

_AH=0

geninterrupt(0x10)

init()

win=initStep1()

do{

_AH=3

geninterrupt(0x10)

x=_DH+1

y=_DL+1

while(bioskey(1)==0)

key=bioskey(0)

switch(key)

{

case 0x4800:

move(x,y,'u')

break

case 0x5000:

move(x,y,'d')

break

case 0x4b00:

move(x,y,'l')

break

case 0x4d00:

move(x,y,'r')

break

case 0x3920:

reset(i)

break

default:

break

}

s=0

pw=win

while(pw)

{

if(status[pw->x][pw->y]=='m')

s++

pw=pw->p

}

if(s==0)

{

free(win)

gotoxy(15,20)

printf("congratulate! You have done this step!")

getch()

i++

switch(i)

{

case 1:

init()

win=initStep2()

break

case 2:

init()

win=initStep3()

break

case 3:

init()

win=initStep4()

break

case 4:

gotoxy(15,21)

printf("Congratulation! \n")

gotoxy(15,22)

printf("You have done all the steps, You are very clever!")

key=0x011b

getch()

break

default:

break

}

}

}while(key!=0x011b)

_AL=3

_AH=0

geninterrupt(0x10)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12379498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存