8x8网格随机生长算法异常:左右列无法正常扩展
问题根源
核心错误就在方向随机生成的代码里:你写的rand.Next(1,4),这个方法的第二个参数是不包含的上限,也就是说它只会生成1、2、3这三个数,永远碰不到4。而左方向对应的是case4,等于所有单元格永远不会尝试向左扩展!
这直接对应你遇到的两个异常:
- 最右列的6:根本没机会向左扩张到其他列,自然困在最右列
- 最左列的4:其他单元格永远不会尝试向左进入它的区域,所以4的区域只能上下扩展,完全占满左列,不让别的数值进来
修复方法
把方向随机的代码改成rand.Next(1,5),让它能生成1到4的所有方向:
switch (rand.Next(1, 5)) // 把4改成5,范围覆盖1-4
额外优化提示
- 别用字符串传坐标了,用C#的元组更高效,不用拆字符串:
调用时直接用:private (int row, int col) CellToCoords(int cell) { int col = cell % size; if (col == 0) col = size; int row = (cell - col) / size + 1; return (row, col); }var (row, col) = CellToCoords(cell); - 可以优化随机选择的单元格,只从已经着色的单元格里挑,避免每次循环选到空白单元格做无用功,加快填充速度。
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

