推箱子

 

            //有一张地图
            //地图里有箱子、小人、和目标点
            //用户可以操纵这小人移动
            //小人推着箱子走,遇到墙就不能走了
            //小人把箱子推到目标点就胜利了,然后进入下一关

            //画地图(墙: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();

 

posted @ 2016-05-29 08:05  露西&哈特菲利亚  阅读(246)  评论(0编辑  收藏  举报