请给我一个从频繁更新的二维数组中返回索引的任务。实际上是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返回为空。我尝试了很多操作但无济于事。请问哪里出错了?我该如何最好地处理这个?非常感谢任何帮助建议或替代方案。谢谢
答案 0 :(得分:0)
这有点猜测,但我认为你有一个逻辑错误:
num
应该返回&#34;空&#34;行{{1}}中的单元格。如果找不到,它会逐行搜索,直到找到一个空单元格。
问题是,来电者不知道原始搜索是否失败。返回的索引完全有可能代表与要求完全不同的行的单元格。这可能就是你看到&#34;被占用的原因。单元格返回为&#34;为空&#34;。
这是一个类比:
你正在纽约旅行。你去机场预订航班(我知道,没有人这样做了)。你要求第7行的所有空座位(因为你喜欢第7行)。客户服务代理查找第7行并发现没有空座位。而不是告诉你,而是开始查看所有其他行,并在第15行找到一个空座位(C)。所以她告诉你&#34;座位C是空的&#34;。问题是,你认为她在谈论第7行!您没有迹象表明第7行已满或她指的是哪一行。调用者需要遍历其他行(以便它知道空单元格所在的行),或者该方法需要具有某种反馈,指示哪些行为空单元格是的。