| 240 | * @param block |
| 241 | */ |
| 242 | const genLevelRelation = (block: BlockType) => { |
| 243 | // 确定该块附近的格子坐标范围 |
| 244 | const minX = Math.max(block.x - 2, 0); |
| 245 | const minY = Math.max(block.y - 2, 0); |
| 246 | const maxX = Math.min(block.x + 3, boxWidthNum - 2); |
| 247 | const maxY = Math.min(block.y + 3, boxWidthNum - 2); |
| 248 | // 遍历该块附近的格子 |
| 249 | let maxLevel = 0; |
| 250 | for (let i = minX; i < maxX; i++) { |
| 251 | for (let j = minY; j < maxY; j++) { |
| 252 | const relationBlocks = chessBoard[i][j].blocks; |
| 253 | if (relationBlocks.length > 0) { |
| 254 | // 取当前位置最高层的块 |
| 255 | const maxLevelRelationBlock = |
| 256 | relationBlocks[relationBlocks.length - 1]; |
| 257 | // 排除自己 |
| 258 | if (maxLevelRelationBlock.id === block.id) { |
| 259 | continue; |
| 260 | } |
| 261 | maxLevel = Math.max(maxLevel, maxLevelRelationBlock.level); |
| 262 | block.higherThanBlocks.push(maxLevelRelationBlock); |
| 263 | maxLevelRelationBlock.lowerThanBlocks.push(block); |
| 264 | } |
| 265 | } |
| 266 | } |
| 267 | // 比最高层的块再高一层(初始为 1) |
| 268 | block.level = maxLevel + 1; |
| 269 | }; |
| 270 | |
| 271 | /** |
| 272 | * 点击块事件 |