将地雷的邻居坐标存储在列表中

时间:2019-04-14 04:49:44

标签: list tuples

我希望能够在扫雷应用程序中存储代表地雷邻居的坐标对(x,y)。 HW Instructions

我设置了一个if语句来检查是否首先存在地雷。我开始创建邻居坐标列表。

 private List<Tuple<int,int>> getneighbors(int x, int y)
    {
        if (isMinePresent(x,y) == true)
        {
            List<Tuple<int, int>> neighbors = new List<Tuple<int, int>> () {x+1,y},{x+1,y+1} //etc;

            {

            }

        }
    }
}

我想列出几对坐标的列表-每个坐标代表一个邻居。不幸的是,我遇到一个错误:“ C#不包含带有2个参数的构造函数。”

1 个答案:

答案 0 :(得分:0)

  

此方法获取坐标并返回所有有效的相邻坐标。

这里需要回答的问题是如何确定有效邻居是什么?为此,需要一点逻辑-正方形在其行,前一行和下一行具有邻居。可能最多可能有8个邻居。

看看这个Stackblitz并试一试。我用TypeScript编写的,但是这些概念直接适用于C#。

如果邻居的坐标在起始坐标之一之内但不超出范围,则将其定义为“有效”。

getNeighbors(inX: number, inY: number) {

    // Get proper bounds
    var lowerX = Math.max(0, inX-1);
    var upperX = Math.min(inX+1, this.size);
    var lowerY = Math.max(0, inY-1);
    var upperY = Math.min(inY+1, this.size);

    var xCoords = Enumerable.rangeTo(lowerX, upperX);
    var yCoords = Enumerable.rangeTo(lowerY, upperY);          

    var result = new Array<Coordinate>();
    xCoords.forEach(x => {
       yCoords.forEach(y => {
         if (x !== inX || y !== inY) {
           result.push({x, y});
         }
       });
    });

    return result;
  }