推箱子 只有一个地图 初练

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();
            }
          }
        }  
    }
}

时间: 2024-08-04 02:57:16

推箱子 只有一个地图 初练的相关文章

hdu1254推箱子

推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6089    Accepted Submission(s): 1743 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子

推箱子(嵌套搜索,bfs中有dfs)

推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6416    Accepted Submission(s): 1834 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,

hdu 1254(推箱子游戏bfs+状态标记)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5181    Accepted Submission(s): 1439 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N

使用 C# 开发智能手机软件:推箱子(三)

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第三篇.在这篇文章中,介绍 Common/Block.cs 源程序文件. 1 namespace Skyiv.Ben.PushBox.Common 2 { 3   /// <summary> 4   /// 基本单元格: 地 槽 墙 砖 箱子 工人 5   /// </summary> 6   static class Block 7   { 8     public const byte Land = 0;

C++学习(九)之 项目 推箱子游戏

游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4.如何绘制地图 通过数组来存储绘制 数组中 0表示空地 1表示墙 2表示人 3表示箱子 4表示目的地 移动时 人在目的地上:人+目的地=2+4=6 箱子在目的地上:箱子+目的地=3+4+7 (⊙o⊙)-额  大概就这样吧 (其实就是自己做的时候的一些笔记,以后用的时候再看吧) 1 //事先先改多字节

搜索 [HDU 1254] 推箱子

推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5343    Accepted Submission(s): 1503 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子

hdu1254推箱子 (嵌套广搜)

推箱子 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 10 Accepted Submission(s) : 4Problem Description推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上

hdu1254推箱子 (BFS+BFS+状态压缩)

推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5089 Accepted Submission(s): 1421 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱

HDU 1254 (经典游戏)推箱子 BFS+dfs

Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上(如图2)那么箱子就不能再被移动了,如果箱子被推到一面墙上,那么箱子只能沿着墙移动. 现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格. Input 输入数据的第一行是一个整数T(1<=T<=20),代表测试