推箱子

 static void Main41推箱子(string[] args)
        {
            //static void Main(string[] args)
            {
                //定义地图
                #region 定义地图
                int x = 6; int y = 1; //人的初始坐标                

                int[,] map = new int[10, 10] { 
                {8,8,8,8,8,8,8,8,8,8},
                {8,0,0,0,0,8,8,0,0,8},
                {8,0,8,0,0,8,8,0,0,8},
                {8,0,8,8,0,8,8,0,0,8},
                {8,0,8,0,0,0,0,0,0,8},
                {8,0,0,0,0,8,0,0,0,8},
                {8,1,0,2,0,8,8,0,0,8},
                {8,0,0,0,0,8,0,0,8,8},
                {8,0,0,0,0,8,0,0,3,8},
                {8,8,8,8,8,8,8,8,8,8},
            };
                #endregion
                #region 显示地图
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        Console.ForegroundColor = ConsoleColor.White;
                        if (map[i, j] == 0)//0代表空地
                        {
                            Console.Write("  ");
                        }
                        else if (map[i, j] == 1)//1代表人
                        {
                            Console.Write("");
                        }
                        else if (map[i, j] == 2)//2代表箱子
                        {
                            Console.Write("");
                        }
                        else if (map[i, j] == 3)//3代表终点
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.Write("");
                            Console.ForegroundColor = ConsoleColor.White;
                        }
                        else if (map[i, j] == 8)//8代表墙壁
                        {
                            Console.Write("");
                        }
                    }
                    Console.WriteLine();
                }

                #endregion

                //推箱子开始
                while (map[8, 8] != 2)//当箱子没到终点的时候
                {

                    ConsoleKeyInfo key = Console.ReadKey();
                    //按下上键时执行的程序
                    #region 上键
                    if (key.Key.ToString().ToLower() == "uparrow")
                    {
                        if (x > 1) //如果人不在靠墙的位置
                        {
                            if (map[x - 1, y] == 0) //如果人上面是路
                            {
                                map[x - 1, y] = 1;
                                map[x, y] = 0;
                                map[8, 8] = 3;
                                x--;
                            }
                            else if (map[x - 1, y] == 3)//如果人上面是终点
                            {
                                map[x - 1, y] = 1;
                                map[x, y] = 0;
                                x--;
                            }
                            else if (map[x - 1, y] == 2 && map[x - 2, y] == 0)//如果人上面是箱子,箱子上面是路
                            {
                                map[x - 2, y] = 2;
                                map[x - 1, y] = 1;
                                map[x, y] = 0;
                                x--;
                                //a--;
                            }
                            else if (map[x - 1, y] == 2 && map[x - 2, y] == 3)//如果人上面是箱子,箱子上面是终点
                            {
                                map[x - 2, y] = 2;
                                map[x - 1, y] = 1;
                                map[x, y] = 0;
                                x--;
                                //a--;
                            }
                            else
                            {
                                Console.Write("\a");
                            }
                        }
                        else
                        {
                            Console.Write("\a");
                        }
                    }
                    #endregion
                    #region 下键
                    //按下的键为下键时执行的程序
                    else if (key.Key.ToString().ToLower() == "downarrow")
                    {
                        if (x < 8) //如果人不在靠墙的位置
                        {
                            if (map[x + 1, y] == 0) //如果人下面是路
                            {
                                map[x + 1, y] = 1;
                                map[x, y] = 0;
                                map[8, 8] = 3;
                                x++;
                            }
                            else if (map[x + 1, y] == 3)//如果人下面是终点
                            {
                                map[x + 1, y] = 1;
                                map[x, y] = 0;
                                x++;
                            }
                            else if (map[x + 1, y] == 2 && map[x + 2, y] == 0)//如果人下面是箱子,箱子下面是路
                            {
                                map[x + 2, y] = 2;
                                map[x + 1, y] = 1;
                                map[x, y] = 0;
                                x++;
                            }
                            else if (map[x + 1, y] == 2 && map[x + 2, y] == 3)//如果人下面是箱子,箱子下面是终点
                            {

                                map[x + 2, y] = 2;
                                map[x + 1, y] = 1;
                                map[x, y] = 0;
                                x++;
                            }
                            else
                            {
                                Console.Write("\a");
                            }
                        }
                        else
                        {
                            Console.Write("\a");
                        }
                    }
                    #endregion
                    #region 左键
                    //按下的键为左键时执行的程序
                    else if (key.Key.ToString().ToLower() == "leftarrow")
                    {
                        if (y > 1) //如果人不在靠墙的位置
                        {
                            if (map[x, y - 1] == 0) //如果人左面是路
                            {
                                map[x, y - 1] = 1;
                                map[x, y] = 0;
                                map[8, 8] = 3;
                                y--;
                            }
                            else if (map[x, y - 1] == 3)//如果人左边是终点
                            {
                                map[x, y - 1] = 1;
                                map[x, y] = 0;
                                y--;
                            }
                            else if (map[x, y - 1] == 2 && map[x, y - 2] == 0)//如果人左面是箱子,箱子左面是路
                            {
                                map[x, y - 2] = 2;
                                map[x, y - 1] = 1;
                                map[x, y] = 0;
                                y--;
                            }
                            else if (map[x, y - 1] == 2 && map[x, y - 2] == 3)//如果人左面是箱子,箱子左面是终点
                            {

                                map[x, y - 2] = 2;
                                map[x, y - 1] = 1;
                                map[x, y] = 0;
                                y--;
                            }
                            else
                            {
                                Console.Write("\a");
                            }
                        }
                        else
                        {
                            Console.Write("\a");
                        }
                    }
                    #endregion
                    #region 右键
                    //按下的键为右键时执行的程序s
                    else if (key.Key.ToString().ToLower() == "rightarrow")
                    {
                        if (y < 8)
                        {
                            if (map[x, y + 1] == 0)//如果人右边是空地
                            {
                                map[x, y + 1] = 1;
                                map[x, y] = 0;
                                map[8, 8] = 3;
                                y++;
                            }
                            else if (map[x, y + 1] == 3)//如果人右边是终点
                            {
                                map[x, y + 1] = 1;
                                map[x, y] = 0;
                                y++;

                            }
                            else if (map[x, y + 1] == 2 && map[x, y + 2] == 0)//如果人右边是箱子,箱子右边是空地
                            {
                                map[x, y + 2] = 2;
                                map[x, y + 1] = 1;
                                map[x, y] = 0;
                                y++;
                            }
                            else if (map[x, y + 1] == 2 && map[x, y + 2] == 3)//如果人右边是箱子,箱子右边是终点
                            {
                                map[x, y + 2] = 2;
                                map[x, y + 1] = 1;
                                map[x, y] = 0;
                                y++;
                            }
                            else
                            {
                                Console.Write("\a");
                            }
                        }
                        else
                        {
                            Console.Write("\a");
                        }
                    }
                    #endregion
                    #region 重新显示
                    Console.Clear();
                    for (int i = 0; i < 10; i++)
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            Console.ForegroundColor = ConsoleColor.White;
                            if (map[i, j] == 0)
                            {
                                Console.Write("  ");
                            }
                            else if (map[i, j] == 1)
                            {
                                Console.Write("");
                            }
                            else if (map[i, j] == 2)
                            {
                                Console.Write("");
                            }
                            else if (map[i, j] == 3)
                            {
                                Console.ForegroundColor = ConsoleColor.Red;
                                Console.Write("");
                                Console.ForegroundColor = ConsoleColor.White;
                            }
                            else if (map[i, j] == 8)
                            {
                                Console.Write("");
                            }
                        }
                        Console.WriteLine();
                    }
                    #endregion

                }
                Console.WriteLine("恭喜你,通关成功!");
                Console.ReadLine();

            }



        }

 

posted @ 2015-07-14 22:01  陌钰陌城  Views(151)  Comments(0Edit  收藏  举报