推箱子 只有一个地图 初练

namespace 自己琢磨推箱子
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义一个地图
            int x=2,y=1;//小人的位置 
           
            int temp = 0;
            int[,] map = new int[10, 10]
            {
              {1,1,1,1,1,1,1,1,1,1},
              {1,0,0,0,1,0,0,0,9,1},
              {1,8,3,0,1,0,0,0,0,1},
              {1,0,0,0,1,0,0,0,0,1},
              {1,0,0,0,1,0,0,0,0,1},
              {1,0,0,0,1,1,1,0,0,1},
              {1,0,0,0,0,0,0,0,0,1},
              {1,0,0,0,0,0,0,0,0,1},
              {1,0,0,0,0,0,1,0,0,1},
              {1,1,1,1,1,1,1,1,1,1},
            };
            //下面开始将小人移动,编辑移动指令算法,简单地说就是位置交换
             while (true)
            {   //读取输入的键
                ConsoleKeyInfo s=Console.ReadKey();
                if (s.Key.ToString() =="RightArrow")
                { if(map[x,y+1]==0)  //如果小人的下一步是空格,则两个元素交换,只有满足这一个条件两个元素才会交换,否则就不会变
                 {
                 temp=map[x,y];
                map[x, y] = map[x,y+1];
                    map[x,y+1]=temp;
                   y++;
                 }
                if(map[x,y+1]==3&&map[x,y+2]==0)  //如果小人的下一步是箱子,并且箱子的下一步是空格,则三个元素互相交换
                 {
                    temp = map[x, y + 2];
                    map[x, y + 2] = map[x, y + 1];
                    map[x, y + 1] = temp;
                    temp = map[x, y + 1];
                    map[x, y + 1] = map[x, y];
                    map[x, y] = temp;
                    y++;
                    if (map[x, y + 2] == 9)  //在满足如果小人的下一步是箱子,并且箱子的下一步是空格,则三个元素互相交换的条件下,
                                             //如果小人的下一步是箱子,并且箱子的下一步是终点。把五角星变成箱子,把箱子变成小人。
                    {
                        map[x, y + 2] = 3;
                        map[x, y + 1] = 8;
                        map[x, y] = 0;
                        temp = 6;
                    }
                 }
                }
                if (s.Key.ToString() == "LeftArrow")
                {   if(map[x,y-1]==0)
                 {
                     temp = map[x, y];
                    map[x, y] = map[x, y-1 ];
                    map[x, y -1] = temp;
                    y--;
                 }
                    if(map[x,y-1]==3&&map[x,y-2]==0)
                    {
                        temp = map[x, y - 2];
                        map[x, y - 2] = map[x, y - 1];
                        map[x, y - 1] = temp;
                        temp = map[x, y - 1];
                        map[x, y - 1] = map[x, y];
                        map[x, y] = temp;
                        y--;
                      
                    if (map[x, y - 2] == 9)
                        {
                            map[x, y - 2] = 3;
                            map[x, y - 1] = 8;
                            map[x, y] = 0;
                            temp = 6;
                        }
                    }
                }
                if (s.Key.ToString() == "DownArrow")
                {
                    if (map[x+1, y] == 0)
                    {temp = map[x, y];
                    map[x, y] = map[x+1, y ];
                    map[x+1, y] = temp;
                    x++;
                    }
                    if(map[x+1,y]==3&&map[x+2,y]==0)
                    {
                        temp = map[x + 2, y];
                        map[x + 2, y] = map[x + 1, y];
                        map[x + 1, y] = temp;
                        temp = map[x + 1, y];
                        map[x + 1, y] = map[x, y];
                        map[x, y] = temp;
                        x++;
                        if(map[x+2,y]==9)
                        {
                            map[x+2, y] = 3;
                            map[x+1, y ] = 8;
                            map[x, y] = 0;
                            temp = 6;
                        }
                    }
                }
                if (s.Key.ToString() == "UpArrow")
                {
                    if(map[x-1,y]==0)
                    {temp = map[x, y];
                    map[x, y] = map[x - 1, y];
                    map[x - 1, y] = temp;
                    x--;
                    }
                    if (map[x-1, y] == 3 && map[x-2, y] == 0)
                    {
                        temp = map[x-2, y];
                        map[x-2, y] = map[x-1, y ];
                        map[x-1, y] = temp;
                        temp = map[x-1, y ];
                        map[x-1, y] = map[x, y];
                        map[x, y] = temp;
                       x--;

                        if (map[x-2, y] == 9)
                        {
                            map[x-2, y] = 3;
                            map[x-1, y] = 8;
                            map[x, y] = 0;
                            temp = 6;
                        }
                    }
                }
              Console.Clear();      //把之前的地图清空,下面开始重新打印地图
            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    if (map[i,j]==1)
                    {
                        Console.Write("■");
                    }
                    else if (map[i, j] == 0)
                    {
                        Console.Write("  ");
                    }
                    else if (map[i, j] == 8)
                    {
                        Console.Write("♀");
                    }
                    else if (map[i, j] == 9)
                    {
                        Console.Write("★");
                    }
                    else if (map[i,j] == 3)
                    {
                        Console.Write("□");
                    }
                }
                Console.WriteLine();
            }
            if (temp == 6)
            {
                Console.WriteLine("恭喜您过关了!");
                Console.WriteLine("按任意键进入下一关!");
                Console.ReadKey();
            }
          }
        }  
    }
}

你可能感兴趣的:(地图)