从多维数组中选择值为0的索引不起作用

时间:2015-07-22 15:12:17

标签: c# arrays multidimensional-array

请给我一个从频繁更新的二维数组中返回索引的任务。实际上是2048年比赛的任务。什么时候,添加一个随机的麻木,我希望它随机添加到自由/空的瓷砖应有的位置。那就是我的情况下数组值为0的地方。

private static int[][] addTile()
 {
            rd = new Random();
            int px, py;
            px = rd.Next(0, 4);
            py = rd.Next(0, 4);

            List<int> availableInd =  randPosition(py);
            int r = rd.Next(0, availableInd.Count);
            int newPx = availableInd[0];
            if (Tiles[py][newPx] == 0)
            {
                Tiles[py][newPx] = rd.Next(0, 20) == 0 ? rd.Next(0, 15) == 0 ? 8 : 4 : 2;
            }
            else
            {
                py = py; // I put a break here
            }
} 

我的randPosition()方法类似于fflg;

public static List<int> randPosition(int num)
        {
            List<int> indexes = new List<int>();

            //  var emptyTiles = arr.Where(x => x == 0).ToList();
            indexes = Tiles[num].Select((s, index) => new { s, index })
                      .Where(x => x.s == 0)
                      .Select(x => x.index)
                      .ToList();

            if (indexes.Count > 0)
                return indexes;

            //Incase The above fails. I would seach row by row
            //for an empty tile
            for (int c = 0; c < Tiles.Count(); c++)
            {
                indexes = Tiles[c].Select((s, index) => new { s, index })
                      .Where(x => x.s == 0)
                      .Select(x => x.index)
                      .ToList();

                if (indexes.Count > 0)
                    break;
            }


            return indexes;
        }

首先我实际生成我的y轴,然后将其传递给randPosition以检查所述轴中是否存在空单元格。如果有,获取单元格的索引。如果没有,我然后在下面逐行搜索以确保只返回空的图块。但是,当我把休息放在第一种方法的else时,我意识到仍然占用的tile / cells返回为空。我尝试了很多操作但无济于事。请问哪里出错了?我该如何最好地处理这个?非常感谢任何帮助建议或替代方案。谢谢

1 个答案:

答案 0 :(得分:0)

这有点猜测,但我认为你有一个逻辑错误:

num应该返回&#34;空&#34;行{{1}}中的单元格。如果找不到,它会逐行搜索,直到找到一个空单元格。

问题是,来电者不知道原始搜索是否失败。返回的索引完全有可能代表与要求完全不同的行的单元格。这可能就是你看到&#34;被占用的原因。单元格返回为&#34;为空&#34;。

这是一个类比:

你正在纽约旅行。你去机场预订航班(我知道,没有人这样做了)。你要求第7行的所有空座位(因为你喜欢第7行)。客户服务代理查找第7行并发现没有空座位。而不是告诉你,而是开始查看所有其他行,并在第15行找到一个空座位(C)。所以她告诉你&#34;座位C是空的&#34;。问题是,你认为她在谈论第7行!您没有迹象表明第7行已满或她指的是哪一行。

调用者需要遍历其他行(以便它知道空单元格所在的行),或者该方法需要具有某种反馈,指示哪些行为空单元格是的。