二维数组及做推箱子

 //定义地图
            #region 定义地图

            int x=6; int y=1; //人的初始坐标
            int a=6; int b=3; //箱子的初始坐标

            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)
                    {
                        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 

            //推箱子开始
            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();

 

转载于:https://www.cnblogs.com/franky2015/p/4645677.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值