Python &引用;“解除我的封锁”;拼图表示法

Python &引用;“解除我的封锁”;拼图表示法,python,python-2.7,Python,Python 2.7,我正在尝试实现一个解决“解锁我”难题的程序。对于那些不知道的人来说,“解锁我”是一个滑动块拼图,你有一个带有1x1、1x2、2x1和2x2盒子的板,目标是通过一个开口将红色盒子移出板 我的问题是我如何代表一个董事会成员国?我在网上搜索了一下,找到了一个这样代表国家的建议 例如,本委员会: 代表: 我能理解这种表示法是如何工作的。当我想移动其中一个盒子时,问题就出现了。我如何检查方框是否为1x1、1x2、2x1或2x2,以检查想要的移动是否可行 关于如何做到这一点,或者任何其他“更简单”的表述,有

我正在尝试实现一个解决“解锁我”难题的程序。对于那些不知道的人来说,“解锁我”是一个滑动块拼图,你有一个带有1x1、1x2、2x1和2x2盒子的板,目标是通过一个开口将红色盒子移出板

我的问题是我如何代表一个董事会成员国?我在网上搜索了一下,找到了一个这样代表国家的建议

例如,本委员会:

代表:

我能理解这种表示法是如何工作的。当我想移动其中一个盒子时,问题就出现了。我如何检查方框是否为1x1、1x2、2x1或2x2,以检查想要的移动是否可行

关于如何做到这一点,或者任何其他“更简单”的表述,有什么想法吗?

我会:

  • 网格宽度
  • 格栅高度
  • 方框列表,以及每个方框的:
    • 长方体的尺寸(不必是正方形或矩形)
      • 箱子的宽度
      • 箱子的高度
      • 框边界内占用的每个单元格
    • 左上角单元格的位置,so坐标(x,y)
    • 方框名称(例如,“A”、“B”、“C”)
如果这是一个解锁难题,您需要将方框滑出网格,您还需要:

  • 具有出口的栅格单元的坐标
  • 该单元的出口位置(例如,“北”、“东”等)。当出口位于角单元格中时,这是必要的
这将允许您根据需要执行任何计算。给定长方体所在位置的左上角单元格、长方体的尺寸以及长方体中占用的单元格,可以计算是否发生碰撞


上述表示法还支持任意形状,而不仅仅是矩形和正方形。

您可以始终拥有一个与“网格”尺寸相同的数组,出口的特殊值为-1,空正方形为0,每个块都有块的编号


然后,您可以使用一个检查函数,该函数接受块编号和方向,并针对每个当前单元,将块编号作为值,检查相邻单元是否具有相同的块编号,或者是否只有正方形和矩形。无论如何,假设我有左上角的单元格坐标,我如何检查它是1x1、1x2、2x1还是2x2?听起来像是一个巨大的“如果”语句。哦,现在我看到你被编辑了,我想我明白了。解锁我是一个5x5网格。假设屏幕是400x400px,我会说每个单元是80px。因此,左上角水平列出的1x2区块为(160,80)。也许可以在(159,79)上进行检测,看看物体是否存在?@FortMauris:检测应该在抽象坐标上进行,所以在5x5网格中。它不应该使用屏幕像素坐标进行,因为这可能会在以后由于任意原因而改变。