推箱子是个数字会动二维数组,声明一个[8,8]的二维数组,设计地图
设计地图:空地为0,墙为1,箱子=2,人=3,目标=4,完成=5。
For嵌套for循环打印数组
把数字换成另一种方式显示出来,在声明一张新的地图出来,作为新的位置。
每一次程序上不知道是向上还是向下,在套个for循环,打印新的位置,
for (;;)
{
//打印新地图
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[i, j] == 0)
{
Console.Write(" ");
}
if (map[i, j] == 1)
{
Console.Write("■");
}
if (map[i, j] == 2)
{
Console.Write("□");
}
if (map[i, j] == 3)
{
Console.Write("♀");
}
if (map[i, j] == 4)
{
Console.Write("☆");
}
if (map[i, j] == 5)
{
Console.Write("★");
}
}
Console.WriteLine();
}
}
获取按键信息ConsoleKeyInfo,清屏
向上[y-1,x],向下[y+1,x]以此类推,要注意人的位置,这里的人的位置[4,4],要改人的位置到数组改,
向上[y-1,x]:向前移动一格,有两种可能,一个是目的地,一个是空格,
判断按得按键是否为自己所用的按键,判断向上是空地还是目的地,
判断map[y - 1, x] == 0 || map[y - 1, x] == 4
,
判断map0[y, x] == 4目的地就map0[y-1,x] = 3 , map0[y,x] = 4 y--,空地就map0[y-1,x] = 3 , map0[y,x] = 0 y--,墙就跳出循环。到箱子。
判断箱子是否到目的地map[y - 1, x] == 2 || map[y - 1, x] == 5
,在判断箱子是否前到目的地或者到墙或者前进一格map[y - 2, x] == 1 || map[y - 2, x] == 2 || map[y - 2, x] == 5
,分两种情况:第一种:箱子的下一个目标为空地,在分两种情况,一种是目标点,一种是不是目标点,那么目标点的位移map[y - 2, x] = 2;,map[y - 1, x] = 3;map[y, x] = 4; y--;
位移到目标点位置,不是目标点位移map[y - 2, x];map[y - 1, x] = 3;map[y, x] = 0;y--
;移到空地。
第二种:箱子的下一个目标的位置为目标点map[y - 2, x] == 4
,在有两种情况,一种到达了目标点map[y - 2, x] = 5map[y - 1, x] = 3;map[y, x] = 4;y--;
一种不到达目标点
map[y - 2, x] = 5;map[y - 1, x] = 3;map[y, x] = 0;y--;