From 09310370365220bc9b9c560d8947cd7abc36d14f Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Tue, 22 Sep 2026 08:35:11 +0800 Subject: feat(mapgen): 512x384 沿河民居加密到 18 座且门全部可达(P24) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Params.ExtraRiversideHouses(默认 0);paramsForSize 仅对 >256x192 设为 10, 从既有路网泊松散布 3x2 民居并接门入网(structureRng 确定性),512x384 共 18 座。 - 64x48/256x192 仍 4 座、checksum 6042052/1284656962 不变(新增用例锁定)。 - 新增 512 民居数量/可达/确定性用例;Desktop 130 -> 134。 --- src/LivingVillage.Desktop.Tests/MapGenTests.fs | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/LivingVillage.Desktop.Tests') diff --git a/src/LivingVillage.Desktop.Tests/MapGenTests.fs b/src/LivingVillage.Desktop.Tests/MapGenTests.fs index 4d11dd1..4a09865 100644 --- a/src/LivingVillage.Desktop.Tests/MapGenTests.fs +++ b/src/LivingVillage.Desktop.Tests/MapGenTests.fs @@ -229,6 +229,38 @@ type MapGenTests () = Assert.IsTrue(visited.[y * map.Width + x], sprintf "bridge tile (%d,%d) unreachable at 512x384" x y) Assert.IsTrue(map.Buildings.Length >= map.Rivers.Length, "riverside building per band at 512x384") + // ---- P24:512x384 沿河民居加密(默认图不受影响) ---- + + [] + member _.ExtraHouseDensityOnlyEnabledForLargeMaps () = + Assert.AreEqual(0, (MapGen.paramsForSize 64 48 (uint64 1)).ExtraRiversideHouses) + Assert.AreEqual(0, (MapGen.paramsForSize 256 192 (uint64 1)).ExtraRiversideHouses) + Assert.IsTrue((MapGen.paramsForSize 512 384 (uint64 1)).ExtraRiversideHouses > 0) + + [] + member _.LargeMapHasAtLeastTwelveHousesWithReachableDoors () = + let map = MapGen.generateWithSize 512 384 (uint64 4242) + Assert.IsTrue(map.Buildings.Length >= 12, sprintf "512x384 must place >=12 houses, saw %d" map.Buildings.Length) + let startX, startY = map.Spawns.Head + let visited = MapGen.floodFill map startX startY + for building in map.Buildings do + Assert.IsTrue(MapGen.isWalkable map building.DoorX building.DoorY, sprintf "door (%d,%d) must be walkable" building.DoorX building.DoorY) + Assert.IsTrue(visited.[building.DoorY * map.Width + building.DoorX], sprintf "door (%d,%d) unreachable" building.DoorX building.DoorY) + Assert.IsTrue(map.ReachabilityOk, "512x384 reachability must hold with extra houses") + + [] + member _.LargeMapHousePlacementIsDeterministic () = + let a = MapGen.generateWithSize 512 384 (uint64 4242) + let b = MapGen.generateWithSize 512 384 (uint64 4242) + Assert.AreEqual(a.Buildings.Length, b.Buildings.Length) + Assert.IsTrue(a.Buildings = b.Buildings) + Assert.AreEqual(MapGen.serialize a, MapGen.serialize b) + + [] + member _.DefaultSizeHouseCountUnchanged () = + Assert.AreEqual(4, (MapGen.generateWithSize 64 48 (uint64 4242)).Buildings.Length) + Assert.AreEqual(4, (MapGen.generateWithSize 256 192 (uint64 4242)).Buildings.Length) + /// 锁定当前默认尺寸的生成结果,防止 P23 参数适配无意改变 64x48 / 256x192。 [] member _.DefaultSizeChecksumsArePinned () = -- cgit v1.2.3