You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何生成简易地牢地图随机数组?房间数量未达预期问题排查

地牢生成器房间数量不足的排查与解决

嘿,我来帮你搞定这个问题!你遇到的核心问题是预期生成floor((x*y)/2)个房间,但实际数量有时达不到,大概率是随机赋值过程中的重复覆盖导致的,咱们一步步拆解:

最可能的原因:随机位置重复选中

如果你是通过「循环预期房间次数,每次随机选一个坐标设为2」的方式生成房间,就很容易出现重复选中同一个坐标的情况——比如某个位置已经被设成房间(值为2)了,你又随机选到它,这次操作等于没增加新房间,最终总数自然就少了。

举个例子:假设你要生成3个房间,但随机选的位置依次是(0,0)、(0,0)、(1,1),那实际只有2个房间,比预期少1个。

快速排查方法

在生成房间的逻辑里加个计数器:每次成功将0改成2时,计数器+1。最后把计数器的值和floor((x*y)/2)对比:

  • 如果计数器 < 预期值:说明确实存在重复覆盖的问题;
  • 如果计数器等于预期值但你数出来的房间少:那可能是你统计房间的方式有问题(比如漏看了某些区域)。

彻底解决的方案

换一种生成逻辑:先收集所有空单元格(值为0的位置),再从中随机挑选恰好floor((x*y)/2)个位置设为房间。这样就能100%保证房间数量符合预期。

用Python举个代码示例(你可以对应改成你用的语言):

import random

# 初始化全0地图
x_axis = 5
y_axis = 4
map_grid = [[0 for _ in range(x_axis)] for _ in range(y_axis)]

# 计算预期房间数
expected_rooms = (x_axis * y_axis) // 2

# 收集所有空单元格的坐标
empty_cells = [
    (row, col) 
    for row in range(y_axis) 
    for col in range(x_axis) 
    if map_grid[row][col] == 0
]

# 随机选中需要的房间数对应的单元格
selected_rooms = random.sample(empty_cells, expected_rooms)

# 将选中的单元格设为房间(值为2)
for row, col in selected_rooms:
    map_grid[row][col] = 2

其他可能的小问题

如果上面的方法解决不了,再检查这两个点:

  • 地图初始化是否正确:确保你一开始生成的是全0的二维数组,有没有不小心混入了非0的值?
  • 坐标范围是否正确:随机选坐标时,x的范围是不是0到x_axis-1,y是0到y_axis-1?如果边界写错(比如写成1到x_axis),会导致可用单元格总数减少,预期房间数也会跟着变少。

内容的提问来源于stack exchange,提问作者user9431569

火山引擎 最新活动