扫雷器地雷生成算法
Minesweeper mine generation algorithm
我正在制作一个扫雷克隆体。我目前的地雷生成算法只是:选择一个坐标,如果没有地雷,则放置地雷,否则重试。我认为这不是一个有效的算法,尤其是在高密度雷区。我正在查看其他一些选项,例如:Fisher-Yates shuffle 等,但我认为对于更大的网格来说它有很长的 运行 时间。我正在考虑使用链表。有什么建议么?
如果您有一个 list/array 可以在固定时间内获取列表大小的地方,您可以尝试以下操作:
list = List of all fields
N = number of mines
N.times do
index = random(list.size)
pick list[index]
list.remove(index)
end
这样:
- 您不需要打乱整个列表
- 您避免选择相同的字段 2 次
简而言之,它将只是从列表中绘制随机字段并将其从列表中删除以避免下次绘制时发生冲突。
我正在制作一个扫雷克隆体。我目前的地雷生成算法只是:选择一个坐标,如果没有地雷,则放置地雷,否则重试。我认为这不是一个有效的算法,尤其是在高密度雷区。我正在查看其他一些选项,例如:Fisher-Yates shuffle 等,但我认为对于更大的网格来说它有很长的 运行 时间。我正在考虑使用链表。有什么建议么?
如果您有一个 list/array 可以在固定时间内获取列表大小的地方,您可以尝试以下操作:
list = List of all fields
N = number of mines
N.times do
index = random(list.size)
pick list[index]
list.remove(index)
end
这样:
- 您不需要打乱整个列表
- 您避免选择相同的字段 2 次
简而言之,它将只是从列表中绘制随机字段并将其从列表中删除以避免下次绘制时发生冲突。