“解除我的封锁”难题表示
2 个回答
0
你可以创建一个和“网格”大小一样的数组,出口用一个特殊的值 -1 表示,空白的格子用 0 表示,每个方块则用它的编号来表示。
然后,你可以写一个检查函数,这个函数接收一个方块编号和一个方向。对于每个当前单元格,如果它的值是这个方块编号,就检查它旁边的单元格,看看是不是同样的方块编号,或者是小于 1 的值。
移动函数会把值按照需要的方向移动,并把原来的位置设置为 0。只要注意操作的顺序,你可以先把第一个需要移动的单元格设置为目标值,然后把当前的格子设置为 0。这样只需要很少的条件判断和几个循环。
3
我会这样做:
- 网格的宽度
- 网格的高度
- 盒子的列表,每个盒子包括:
- 盒子的尺寸(不一定是正方形或长方形)
- 盒子的宽度
- 盒子的高度
- 盒子内占用的每个单元格
- 左上角单元格的位置,也就是坐标(x, y)
- 盒子的名称(例如,“A”、“B”、“C”)
如果这是一个需要将盒子滑出网格的解谜游戏,你还需要:
- 出口所在的网格单元格的坐标
- 该单元格出口的位置(例如,“北”、“东”等)。当出口位于角落单元格时,这一点是必要的。
这样你就可以进行必要的计算了。给定盒子所在的左上角单元格、盒子的尺寸以及盒子内占用的单元格,你可以计算是否发生了碰撞。
以上的表示方式也支持任意形状,而不仅仅是矩形和正方形。