fix(map-gen/maze): 增加迷宫房间向外生长时的 Levels.txt 全局边界(SizeX/SizeY)硬性约束 #48

Closed
opened 2026-09-17 05:20:39 +00:00 by troytt · 1 comment
Owner

背景与现状

在 src/game/maze.ts:984 中,checkRoomNotOverlapping 仅检查候选房间与已有房间两两之间是否重叠,没有任何关于关卡全局尺寸上限的校验。最终在 stamp() 阶段,仅简单计算所有放置房间的外接矩形(minX..maxX, minY..maxY)并动态构建画布。

暗黑2原版逻辑(Oracle / Ground Truth)

  • 原版中,随机迷宫同样严格受 Levels.txt 中的 SizeX 与 SizeY 关卡外接边界约束。
  • 房间向外延伸生长时,若其边界超出关卡所分配的全局网格矩形,该生长尝试会被立刻拒绝,引擎会重新尝试其他父房间。

差异点与缺陷表现

  • 当前 TS 实现可能导致个别种子生成的迷宫呈现极端单向长条状、或者总体跨度远超原版限制的畸形地图,影响小地图视野与内存占用。

解决建议与改造方案

  1. 在 linkMazeRooms 判定中加入关卡最大包围盒(request.sectionSize * MaxSections 或 Levels.txt.SizeX/SizeY)约束。
  2. 越界房间直接判定为放置失败,促使迷宫在有限的矩形空间内紧凑聚拢生长。
## 背景与现状 在 `src/game/maze.ts:984` 中,`checkRoomNotOverlapping` 仅检查候选房间与已有房间两两之间是否重叠,没有任何关于关卡全局尺寸上限的校验。最终在 `stamp()` 阶段,仅简单计算所有放置房间的外接矩形(`minX..maxX`, `minY..maxY`)并动态构建画布。 ## 暗黑2原版逻辑(Oracle / Ground Truth) - 原版中,随机迷宫同样严格受 `Levels.txt` 中的 `SizeX` 与 `SizeY` 关卡外接边界约束。 - 房间向外延伸生长时,若其边界超出关卡所分配的全局网格矩形,该生长尝试会被立刻拒绝,引擎会重新尝试其他父房间。 ## 差异点与缺陷表现 - 当前 TS 实现可能导致个别种子生成的迷宫呈现极端单向长条状、或者总体跨度远超原版限制的畸形地图,影响小地图视野与内存占用。 ## 解决建议与改造方案 1. 在 `linkMazeRooms` 判定中加入关卡最大包围盒(`request.sectionSize * MaxSections` 或 `Levels.txt.SizeX/SizeY`)约束。 2. 越界房间直接判定为放置失败,促使迷宫在有限的矩形空间内紧凑聚拢生长。
Author
Owner

修复完成并验证通过

  • 关联分支: fix/issue-48
  • 提交记录: 801afd7
  • 核心改动:
    1. 引入 checkRoomWithinBounds 检查,严格约束迷宫扩张尺寸不超过 Levels.txt 的 SizeX / SizeY;
    2. 统计并透传 boundsRejected 裁剪计数;
    3. 新增 tests/maze-bounds.test.ts(5/5 单测通过),全量 635 项测试通过,tsc 0 报错。
### 修复完成并验证通过 - **关联分支**: `fix/issue-48` - **提交记录**: `801afd7` - **核心改动**: 1. 引入 `checkRoomWithinBounds` 检查,严格约束迷宫扩张尺寸不超过 `Levels.txt` 的 `SizeX / SizeY`; 2. 统计并透传 `boundsRejected` 裁剪计数; 3. 新增 `tests/maze-bounds.test.ts`(5/5 单测通过),全量 635 项测试通过,`tsc` 0 报错。
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#48
No description provided.