推箱子 复杂版(多个箱子)

多个箱子:

namespace ConsoleApplication1
{
    class Program
    {
        private static void ditu(int[, ,] dt, int i)
        {
            for (int j = 0; j < 10; j++)
            {
                for (int k = 0; k < 10; k++)
                {
                    if (dt[i, j, k] == 0)
                    {
                        Console.Write("  ");
                    }
                    else if (dt[i, j, k] == 1)
                    {
                        Console.Write("■");
                    }
                    else if (dt[i, j, k] == 2)
                    {
                        Console.Write("□");
                    }
                    else if (dt[i, j, k] == 3)
                    {
                        Console.Write("★");
                    }
                    else if (dt[i, j, k] == 4)
                    {
                        Console.Write("♀");
                    }
                }
                Console.Write("\n");
            }
        }
        static void Main(string[] args)
        {
             int x = 1, y = 1, i = 0;
            int[, ,] dt = new int[3, 10, 10]  //定义一个二维数组用于接收地图
                {
                   {
                     {1,1,1,1,1,1,1,1,1,1},
                     {1,4,0,1,0,0,0,0,0,1},
                     {1,0,0,0,0,0,2,0,3,1},
                     {1,0,1,1,0,1,0,0,0,1},
                     {1,0,0,0,0,0,0,0,0,1},
                     {1,3,1,1,1,1,1,2,1,1},
                     {1,2,1,0,0,0,0,0,0,1},
                     {1,0,0,0,0,1,1,0,0,1},
                     {1,1,0,1,0,0,0,3,0,1},
                     {1,1,1,1,1,1,1,1,1,1},
                   },
                   {
                     {1,1,1,1,1,1,1,1,1,1},
                     {1,1,1,1,4,0,1,0,3,1},
                     {1,1,1,3,0,0,2,0,0,1},
                     {1,1,0,0,2,0,1,0,0,1},
                     {1,0,0,0,1,1,1,0,0,1},
                     {1,0,1,1,0,0,0,0,0,1},
                     {1,0,0,0,0,2,0,0,1,1},
                     {1,0,3,0,0,0,1,1,1,1},
                     {1,0,0,0,0,1,1,1,1,1},
                     {1,1,1,1,1,1,1,1,1,1},
                   },
                   {
                      {1,1,1,1,1,1,1,1,1,1},
                      {1,1,0,0,4,0,0,3,1,1},
                      {1,1,0,2,0,0,0,2,3,1},
                      {1,1,0,0,2,1,1,0,0,1},
                      {1,1,0,1,0,0,0,3,0,1},
                      {1,0,3,0,0,0,1,0,1,1},
                      {1,0,0,1,1,2,0,0,1,1},
                      {1,3,2,0,0,0,2,0,1,1},
                      {1,1,3,0,0,0,0,0,1,1},
                      {1,1,1,1,1,1,1,1,1,1},

                  }
                };
            try
            {
                int count = 0;//临时变量
                int xzs = 0;//箱子数
                for (int j = 0; j < 10; j++)
                {
                    for (int k = 0; k < 10; k++)
                    {
                        if (dt[i, j, k] == 3)
                        {
                            xzs++;
                        }
                    }
                }
                while (true)
                {
                    int temp = 0;
                    ConsoleKeyInfo s = Console.ReadKey();  //s用于接收用户输入的键
                    if (s.Key.ToString() == "DownArrow")
                    {
                        if (dt[i, x + 1, y]!=1)
                        {

                        if (dt[i, x + 1, y] == 0)//如果小人的下一步是0(空格),则两个元素交换  (下同)
                        {
                            temp = dt[i, x, y];
                            dt[i, x, y] = dt[i, x + 1, y];
                            dt[i, x + 1, y] = temp;
                            x++;
                        }
                        else if (dt[i, x + 1, y] == 2 && dt[i, x + 2, y] == 0)//如果小人的下一步是箱子,箱子的下一步是空格,则三个元素进行交换 (下同)
                        {
                            temp = dt[i, x + 2, y];
                            dt[i, x + 2, y] = dt[i, x + 1, y];
                            dt[i, x + 1, y] = temp;
                            temp = dt[i, x + 1, y];
                            dt[i, x + 1, y] = dt[i, x, y];
                            dt[i, x, y] = temp;
                            x++;
                        }
                        else if (dt[i, x + 2, y] == 3 && dt[i, x + 1, y] == 2) //如果小人的下面第二个元素是“★”
                        {
                            dt[i, x + 2, y] = 2;//让五角星变成箱子
                            dt[i, x + 1, y] = 4;// 让箱子变成小人
                            dt[i, x, y] = 0;    //让小人变成空格
                            x++;
                            count++;  //给临时变量赋值作为跳出循环的条件,当count等于xzs时跳出循环
                        }
                        }
                    }
                    else if (s.Key.ToString() == "UpArrow")
                    {
                        if (dt[i, x - 1, y] != 1)
                        {
                            if (dt[i, x - 1, y] == 0)
                            {
                                temp = dt[i, x - 1, y];
                                dt[i, x - 1, y] = dt[i, x, y];
                                dt[i, x, y] = temp;
                                x--;
                            }
                            else if (dt[i, x - 1, y] == 2 && dt[i, x - 2, y] == 0)
                            {
                                temp = dt[i, x - 2, y];
                                dt[i, x - 2, y] = dt[i, x - 1, y];
                                dt[i, x - 1, y] = temp;
                                temp = dt[i, x, y];
                                dt[i, x, y] = dt[i, x - 1, y];
                                dt[i, x - 1, y] = temp;
                                x--;
                            }
                            else if (dt[i, x - 2, y] == 3 && dt[i, x - 1, y] == 2) //如果小人的下面第二个元素是“★”
                            {
                                dt[i, x - 2, y] = 2; //让五角星变成箱子
                                dt[i, x - 1, y] = 4;// 让箱子变成小人
                                dt[i, x, y] = 0;    //让小人变成空格
                                x--;
                                count++;  //给临时变量赋值作为跳出循环的条件,当count等于xzs时跳出循环
                            }
                        }
                    }
                     else if (s.Key.ToString() == "LeftArrow")
                    {
                        if (dt[i, x, y - 1] != 1)
                        {
                            if (dt[i, x, y - 1] == 0)
                            {
                                temp = dt[i, x, y - 1];
                                dt[i, x, y - 1] = dt[i, x, y];
                                dt[i, x, y] = temp;
                                y--;
                            }
                            else if (dt[i, x, y - 1] == 2 && dt[i, x, y - 2] == 0)
                            {
                                temp = dt[i, x, y - 2];
                                dt[i, x, y - 2] = dt[i, x, y - 1];
                                dt[i, x, y - 1] = temp;
                                temp = dt[i, x, y];
                                dt[i, x, y] = dt[i, x, y - 1];
                                dt[i, x, y - 1] = temp;
                                y--;
                            }
                            else if (dt[i, x, y - 2] == 3 && dt[i, x, y - 1] == 2) //如果小人的下面第二个元素是“★”
                            {
                                dt[i, x, y - 2] = 2; //让五角星变成箱子
                                dt[i, x, y - 1] = 4;// 让箱子变成小人
                                dt[i, x, y] = 0;    //让小人变成空格
                                y--;
                                count++;  //给临时变量赋值作为跳出循环的条件,当count等于xzs时跳出循环
                            }
                        }
                    }
                    else if (s.Key.ToString() == "RightArrow")
                    {
                        if (dt[i, x, y + 1] != 1)
                        {
                            if (dt[i, x, y + 1] == 0)
                            {
                                temp = dt[i, x, y + 1];
                                dt[i, x, y + 1] = dt[i, x, y];
                                dt[i, x, y] = temp;
                                y++;
                            }
                            else if (dt[i, x, y + 1] == 2 && dt[i, x, y + 2] == 0)
                            {
                                temp = dt[i, x, y + 2];
                                dt[i, x, y + 2] = dt[i, x, y + 1];
                                dt[i, x, y + 1] = temp;
                                temp = dt[i, x, y + 1];
                                dt[i, x, y + 1] = dt[i, x, y];
                                dt[i, x, y] = temp;
                                y++;
                            }
                            else if (dt[i, x, y + 2] == 3 && dt[i, x, y + 1] == 2) //如果小人的下面第二个元素是“★”
                            {
                                dt[i, x, y + 2] = 2; //让五角星变成箱子
                                dt[i, x, y + 1] = 4;// 让箱子变成小人
                                dt[i, x, y] = 0;    //让小人变成空格
                                y++;
                                count++; //给临时变量赋值作为跳出循环的条件,当count等于xzs时跳出循环
                            }
                        }
                    }
                    else
                    {

                    }
                    Console.Clear();  //清屏

                    ditu(dt, i);// 调用ditu函数打印地图
                    if (count==xzs)
                    {
                        Console.WriteLine("恭喜你过关了!");
                        Console.WriteLine("按任意键进入下一关!");
                        Console.ReadKey();
                        x = 1; y = 4;//初始化小人的位置
                        i++;
                        count = 0;
                        xzs = 0;
                        for (int j = 0; j < 10; j++)
                        {
                            for (int k = 0; k < 10; k++)
                            {

                                if (dt[i, j, k] == 3)
                                {
                                    xzs++;
                                }

                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
               // Console.WriteLine("恭喜你全部过关了!");
                Console.ReadKey();
            }

          }
      }
    }
时间: 2024-10-13 07:10:58

推箱子 复杂版(多个箱子)的相关文章

信鸽推送 C#版SDK

信鸽官方sdk没提供C#版的DEMO,考虑到应该有其他.NET的也会用到信鸽,下面是我在使用信鸽过程中写的demo.有什么不对的地方,欢迎各位大牛指导. 使用过程中主要是有2个问题: 1.参数组装,本demo使用Dictionary进行组装和排序; 2.生成 sign(签名) 下文贴出单个设备推送的代码(忽略大多数辅组实体的代码,下面会贴上源代码) 1.Android 消息实体类 Message public class Message { public Message() { this.tit

百度链接提交-主动推送Python版

百度目前提供自动提交链接和手动提交链接两种方式,其中自动提交又分为主动推送.自动推送和sitemap三种形式,按百度的说法,主动推送的效果最好,百度站长平台后台也提供了curl.php.ruby的推送示例代码但没有提供python代码,网上很少有现成的python版本主动推送代码(仅有的也有点小问题,需要修改一下),现将目前我正在使用的主动推送python代码贴出. #encoding:utf-8 import httplib def tuisong(): filecontents = open

BM递推杜教版

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (long long i=a;i<n;i++) #define per(i,a,n) for (long long i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #def

BM递推杜教版【扩展】

也就是模数不是质数的时候, //下面的板子能求质数和非质数,只需要传不同的参数. #include <cstdio> #include <cstdlib> #include <cassert> #include <cstring> #include <bitset> #include <cmath> #include <cctype> #include <unordered_map> #include <

jQuery版推箱子游戏详解和源码

前言 偶然间看到很多用js写游戏的感觉很炫酷的样子,所以就想试试,就看了一些资料和某前端站点的视屏.于是乎就自己动手实践了一下,上推箱子截图 感觉很丑陋,但是功能是实现了.再说貌似大多都是这样的吧,这一关其实还是有点难度的,我做完之后想检测一下下一关正确么,居然还玩了以后才通关. 如果你看到这张图让你想起了你童年的回忆,说明你老了,这里可以试玩一下(很遗憾没有链接地址,最后又源码可以下载). css布局 主要考虑的是地图是怎么动态生成的,地图中有灰色的,还有墙,箱子,蓝色,红色背景,人物.先看c

suseoj 1212: 推箱子问题(bfs)

1212: 推箱子问题 时间限制: 1 Sec  内存限制: 128 MB提交: 60  解决: 13[提交][状态][讨论版][命题人:liyuansong] 题目描述 码头仓库是划分为n×m个格子的矩形阵列.有公共边的格子是相邻格子.当前仓库中有的格子是空闲的,有的格子则已经堆放了沉重的货物.由于堆放的货物很重,单凭仓库管理员的力量是无法移动的.仓库管理员有一项任务:要将一个小箱子推到指定的格子上去.管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子.管理员站在与箱子相对的空闲格子上时,

搜索 [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的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子

推箱子(嵌套搜索,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的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,

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的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子