# include & ltstdio.h & gt
# include & ltconio.h & gt
# include & ltstdlib.h & gt
# include & ltwindows.h & gt
int m = 0;?//m代表哪壹級。
結構映射{ short a[9][11];};
結構映射map[5]={ 0,0,0,0,0,0,0,0,0,0,0,0,?//***5級,每級9行。
0,1,1,1,1,1,1,1,0,0,0,
0,1,0,0,0,0,0,1,1,1,0,
1,1,4,1,1,1,0,0,0,1,0, ?//0空地,1墻
?1,5,0,0,4,0,0,4,0,1,0, ?//4是盒子,5是人。
1,0,3,3,1,0,4,0,1,1,0, ?//3是目的地
1,1,3,3,1,0,0,0,1,0,0, ?//7表示盒子在目的地(4+3)
0,1,1,1,1,1,1,1,1,0,0, ?//8是目的地的人(5+3)
?0,0,0,0,0,0,0,0,0,0,0,
?0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,0,0,0,0,0,
0,0,1,5,0,1,1,1,0,0,0,
0,0,1,0,4,0,0,1,0,0,0,
?0,1,1,1,0,1,0,1,1,0,0,
0,1,3,1,0,1,0,0,1,0,0,
0,1,3,4,0,0,1,0,1,0,0,
0,1,3,0,0,0,4,0,1,0,0,
?0,1,1,1,1,1,1,1,1,0,0,
?0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,0,
0,0,1,1,0,0,1,0,5,1,0,
0,0,1,0,0,0,1,0,0,1,0,
?0,0,1,4,0,4,0,4,0,1,0,
0,0,1,0,4,1,1,0,0,1,0,
1,1,1,0,4,0,1,0,1,1,0,
1,3,3,3,3,3,0,0,1,0,0,
?1,1,1,1,1,1,1,1,1,0,0,
?0,1,1,1,1,1,1,1,1,1,0,
0,1,0,0,1,1,0,0,0,1,0,
0,1,0,0,0,4,0,0,0,1,0,
0,1,4,0,1,1,1,0,4,1,0,
?0,1,0,1,3,3,3,1,0,1,0,
1,1,0,1,3,3,3,1,0,1,1,
1,0,4,0,0,4,0,0,4,0,1,
1,0,0,0,0,0,1,0,5,0,1,
?1,1,1,1,1,1,1,1,1,1,1,
?0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,
0,1,1,1,0,0,0,0,1,0,0,
1,1,3,0,4,1,1,0,1,1,0,
?1,3,3,4,0,4,0,0,5,1,0,
1,3,3,0,4,0,4,0,1,1,0,
1,1,1,1,1,1,0,0,1,0,0,
0,0,0,0,0,1,1,1,1,0,0,
?0,0,0,0,0,0,0,0,0,0,0 };
void DrMap()?//畫壹張地圖
{控制臺_光標_信息光標_信息={1,0 };//隱藏光標設置
SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE),& ampcursor _ info);
Printf("\n\n \t\t\b推框");
printf(" \ n \ t ");
for(int I = 0;我& lt9;i++)
{ for(int j = 0;j & lt11;j++)
{開關(映射[m].a[i][j])
{案例0:?printf("?);打破;
案例1:?printf("■");打破;
案例三:?printf("◎";打破;
案例四:?printf("□");打破;
案例五:?printf("♂";打破;//5是人
案例七:?printf("□");打破;?//4+3盒子在目的地。
案例八:?printf("♂";打破;//目的地5+3人
}
}
printf(" \ n \ t ");
}
}
void gtxy(int x,int y)?//控制光標位置的函數
{ COORD coord
坐標。X = x
坐標。Y = y
SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),coord);
}
void start()?//開始遊戲
{ int r,c;//r,c用來記錄人的下標。
for(int I = 0;我& lt9;i++)
{ for(int j = 0;j & lt11;j++)
{if (map[m].a[I][j]= = 5 | |地圖[m]。a[I][j]= = 8){ r = I;?c = j;}} //i j人的下標
}
char鍵;?
key = getch();
開關(鑰匙)
{大小寫‘W’:
案例“w”:
案例72:
if(映射[m].a[r - 1][c] == 0||地圖[m]。a [r - 1][c] == 3)
{ gtxy(2*c+8,r-1+3);printf("♂";?// gtxy(2*c+8,r-1+3)是輸出到指定位置的字符。
?if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r-1][c]+= 5;?地圖[m]。a[r][c]-= 5;}
不然呢?if(映射[m].a [r - 1][c] == 4 ||地圖[m]。a [r - 1][c] == 7)
?{ if (map[m].a [r - 2][c] == 0 ||映射[m]。a[r-2][c]= 3)
{ gtxy(2*c+8,r-2+3);printf("□");gtxy(2*c+8,r-1+3);printf("♂";
?if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r-2][c]+= 4;?地圖[m]。a[r-1][c]+= 1;
地圖[m]。a[r][c]-= 5;}
}破;
案例:
案例:
案例80:
if(映射[m].a [r + 1][c] == 0 ||地圖[m]。a [r + 1][c] == 3)
{ gtxy(2*c+8,r+1+3);printf("♂";
if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r+1][c]+= 5;?地圖[m]。a[r][c]-= 5;}
else if (map[m].a [r + 1][c] == 4 ||地圖[m]。a [r+ 1][c] == 7)
{ if (map[m].a [r + 2][c] == 0 ||映射[m]。a [r + 2][c] == 3)
?{ gtxy(2*c+8,r+2+3);printf("□");gtxy(2*c+8,r+1+3);printf("♂";
if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r+2][c]+= 4;地圖[m]。a[r+1][c]+= 1;
地圖[m]。a[r][c]-= 5;}
}破;
案例“A”:
案例“a”:
案例75:
if(映射[m].a [r ][c - 1] == 0 ||地圖[m]。a [r ][c - 1] == 3)
?{ gtxy(2*(c-1)+8,r+3);printf("♂";
if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
地圖[m]。a[r][c-1]+= 5;地圖[m]。a[r][c]-= 5;}
else if (map[m].a [r][c - 1] == 4 ||地圖[m]。a [r][c - 1] == 7)
?{if (map[m].a [r ][c - 2] == 0 ||映射[m]。a [r ][c - 2] == 3)
{ gtxy(2*(c-2)+8,r+3);printf("□");gtxy(2*(c-1)+8,r+3);printf("♂";
?if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r][c-2]+= 4;地圖[m]。a[r][c-1]+= 1;
?地圖[m]。a[r][c]-= 5;}
}破;
案例“D”:
案例“d”:
案例77:
if(映射[m].a [r][c + 1] == 0 ||地圖[m]。a [r][c + 1] == 3)
{ gtxy(2*(c+1)+8,r+3);printf("♂";
if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
if(映射[m].a[r ][c] == 8) {gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r][c+1]+= 5;?地圖[m]。a[r][c]-= 5;}
?else if (map[m].a [r][c + 1] == 4 ||地圖[m]。a [r][c + 1] == 7)
?{ if (map[m].a [r][c + 2] == 0 ||映射[m]。a [r][c + 2] == 3)
{ gtxy(2*(c+2)+8,r+3);printf("□");gtxy(2*(c+1)+8,r+3);printf("♂";
?if(映射[m].a[r ][c] == 5){gtxy(2*c+8,r+3);printf("?);}
?if(映射[m].a[r ][c] == 8){gtxy(2*c+8,r+3);printf("◎";}
?地圖[m]。a[r][c+2]+= 4;地圖[m]。a[r][c+1]+= 1;
?地圖[m]。a[r][c]-= 5;}
}破;
}
}
int ifwan()?//是否完成(1為0和否)
{ if(m==0){if(map[m].a[5][2]= = 7 & amp;& amp地圖[m]。a[5][3]= = 7 & amp;& amp
?地圖[m]。a[6][2]= = 7 & amp;& amp地圖[m]。a[6][3]==7)返回1;}
if(m==1){if(map[m].a[5][2]= = 7 & amp;& amp地圖[m]。a[6][2]= = 7 & amp;& amp
?地圖[m]。a[7][2]==7)返回1;}
if(m==2){if(map[m].a[7][1]= = 7 & amp;& amp地圖[m]。a[7][2]= = 7 & amp;& amp地圖[m]。a[7][3]= = 7 & amp;& amp
?地圖[m]。a[7][4]= = 7 & amp;& amp地圖[m]。a[7][5]==7)返回1;}
if(m==3){if(map[m].a[4][4]= = 7 & amp;& amp地圖[m]。a[4][5]= = 7 & amp;& amp地圖[m]。a[4][6]= = 7 & amp;& amp
地圖[m]。a[5][4]= = 7 & amp;& amp地圖[m]。a[5][5]= = 7 & amp;& amp地圖[m]。a[5][6]==7)返回1;}
if(m==4){if(map[m].a[3][2]= = 7 & amp;& amp地圖[m]。a[4][1]= = 7 & amp;& amp地圖[m]。a[4][2]= = 7 & amp;& amp
地圖[m]。a[5][1]= = 7 & amp;& amp地圖[m]。a[5][2]==7)返回1;}
返回0;
}
int main()?//主函數
{ while (1)
?{ system(" cls ");
dr map();
while (1)
{ start();
?if(if wan()){ printf(" \ 007 ");打破;}//完成後響鈴。
?}
m+= 1;
}
?返回0;
}