//有一张地图
//地图里有箱子、小人、和目标点
//用户可以操纵这小人移动
//小人推着箱子走,遇到墙就不能走了
//小人把箱子推到目标点就胜利了,然后进入下一关
//画地图(墙:1,箱子:4,小人:5,目标点:3)
//1.1画地图
#region
int[,] dt = new int[10, 10]
{
//0,1,2,3,4,5,6,7,8,9,0,
{0,0,0,0,0,0,0,0,0,0},//0
{0,0,0,1,1,1,0,0,0,0},//1
{0,0,0,1,3,1,0,0,0,0},//2
{0,0,0,1,2,1,1,1,1,0},//3
{0,1,1,1,4,2,4,3,1,0},//4
{0,1,3,2,4,5,1,1,1,0},//5
{0,1,1,1,1,4,1,0,0,0},//6
{0,0,0,0,1,3,1,0,0,0},//7
{0,0,0,0,1,1,1,0,0,0},//8
{0,0,0,0,0,0,0,0,0,0},//9
};
#endregion
int x = 5, y = 5;
while (true)
{
Console.Clear();
//1.2打印地图
#region
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (dt[i, j] == 0)
{
Console.Write(" ");//空余地图
}
else if (dt[i, j] == 1)
{
Console.Write("■");//墙
}
else if (dt[i, j] == 2)
{
Console.Write(" ");//墙中空地
}
else if (dt[i, j] == 3)
{
Console.Write("☆");//目标点
}
else if (dt[i, j] == 4)
{
Console.Write("□");//箱子
}
else if (dt[i, j] == 5)
{
Console.Write("♀");//小人
}
else if (dt[i, j] == 6)
{
Console.Write("★");//胜利
}
}
Console.WriteLine();
}
#endregion
if (dt[2, 4] == 6 && dt[4, 7] == 6 && dt[5, 2] == 6 && dt[7, 5] == 6)
{
Console.WriteLine("恭喜过关!");
break;
}
ConsoleKeyInfo info = Console.ReadKey();
//2.1记录小人的初始位置
if (info.Key.ToString() == "UpArrow")
{
if (dt[y - 1, x] == 1 || dt[y - 1, x] == 3)//小人的下一步是墙或者是目标点,不能动
{ }
else if (dt[y - 1, x] == 4)//小人的下一步是箱子
{
if (dt[y - 2, x] == 1)//小人的下两步是墙,就不能动了
{ }
else if (dt[y - 2, x] == 3)
{
//小人箱子换位置,箱子到小人后面
int z = dt[y, x];
dt[y, x] = dt[y - 1, x];
dt[y - 1, x] = z;
y--;
dt[y + 1, x] = 2;//小人当前的上一个位置变成空地
dt[y - 1, x] = 6;//小人当前的下一个位置(即目标点)变成胜利形状
}
else
{
//小人箱子换位置,箱子到小人后面
int z = dt[y, x];
dt[y, x] = dt[y - 1, x];
dt[y - 1, x] = z;
y--;
//小人当前位置与上一步的箱子位置互换
z = dt[y - 1, x];
dt[y - 1, x] = dt[y + 1, x];
dt[y + 1, x] = z;
}
}
else if (dt[y - 1, x] == 2)
{
int z = dt[y, x];
dt[y, x] = dt[y - 1, x];
dt[y - 1, x] = z;
y--;
}
}
else if (info.Key.ToString() == "DownArrow")
{
if (dt[y + 1, x] == 1 || dt[y + 1, x] == 3)
{ }
else if (dt[y + 1, x] == 4)
{
if (dt[y + 2, x] == 1)//小人的下两步是墙,就不能动了
{ }
else if (dt[y + 2, x] == 3)
{
//小人箱子换位置,箱子到小人上面
int z = dt[y, x];
dt[y, x] = dt[y + 1, x];
dt[y + 1, x] = z;
y++;
dt[y - 1, x] = 2;
dt[y + 1, x] = 6;
}
else
{
//小人箱子换位置,箱子到小人后面
int z = dt[y, x];
dt[y, x] = dt[y + 1, x];
dt[y + 1, x] = z;
y++;
//小人当前位置与上一步的箱子位置互换
z = dt[y + 1, x];
dt[y + 1, x] = dt[y - 1, x];
dt[y - 1, x] = z;
}
}
else if (dt[y + 1, x] == 2)
{
int z = dt[y, x];
dt[y, x] = dt[y + 1, x];
dt[y + 1, x] = z;
y++;
}
}
else if (info.Key.ToString() == "LeftArrow")
{
if (dt[y, x - 1] == 1 || dt[y, x - 1] == 3)
{ }
else if (dt[y, x - 1] == 4)
{
if (dt[y, x - 2] == 1)//小人的下两步是墙,就不能动了
{ }
else if (dt[y, x - 2] == 3)
{
//小人箱子换位置,箱子到小人左面
int z = dt[y, x];
dt[y, x] = dt[y, x - 1];
dt[y, x - 1] = z;
x--;
dt[y, x + 1] = 2;
dt[y, x - 1] = 6;
}
else
{
//小人箱子换位置,箱子到小人左面
int z = dt[y, x];
dt[y, x] = dt[y, x - 1];
dt[y, x - 1] = z;
x--;
//小人当前位置与上一步的箱子位置互换
z = dt[y, x - 1];
dt[y, x - 1] = dt[y, x + 1];
dt[y, x + 1] = z;
}
}
else if (dt[y, x - 1] == 2)
{
int z = dt[y, x];
dt[y, x] = dt[y, x - 1];
dt[y, x - 1] = z;
x--;
}
}
else if (info.Key.ToString() == "RightArrow")
{
if (dt[y, x + 1] == 1 || dt[y, x + 1] == 3)
{ }
else if (dt[y, x + 1] == 4)
{
if (dt[y, x + 2] == 1)//小人的下两步是墙,就不能动了
{ }
else if (dt[y, x + 2] == 3)
{
//小人箱子换位置,箱子到小人左面
int z = dt[y, x];
dt[y, x] = dt[y, x + 1];
dt[y, x + 1] = z;
x++;
dt[y, x - 1] = 2;
dt[y, x + 1] = 6;
}
else
{
//小人箱子换位置,箱子到小人右面
int z = dt[y, x];
dt[y, x] = dt[y, x + 1];
dt[y, x + 1] = z;
x++;
//小人当前位置与上一步的箱子位置互换
z = dt[y, x + 1];
dt[y, x + 1] = dt[y, x - 1];
dt[y, x - 1] = z;
}
}
else if (dt[y, x + 1] == 2)
{
int z = dt[y, x];
dt[y, x] = dt[y, x + 1];
dt[y, x + 1] = z;
x++;
}
}
}
Console.ReadKey();