代码之家  ›  专栏  ›  技术社区  ›  user2963022

C#循环扫描2d数组的上、下、左、右元素

  •  3
  • user2963022  · 技术社区  · 7 年前

    我正在努力完成一个我正在写的peg纸牌游戏的条件下的游戏。

    我已经把所有的动作和片段都移除了。 每个工件作为椭圆UI元素保存在2d数组中,当获取工件时,它将替换为边界UI元素。

    我已经开始使用从 Stackoverflow post 它扫描阵列元素周围的8个相邻正方形。

       public static IEnumerable<T> AdjacentElements<T>(T[,] arr, int row, int column)
        {
            int rows = arr.GetLength(0);
            int columns = arr.GetLength(1);
    
            for (int j = row - 1; j <= row + 1; j++)
                for (int i = column - 1; i <= column + 1; i++)
                    if (i >= 0 && j >= 0 && i < columns && j < rows && !(j == row && i == column))
                        yield return arr[j, i];
        }
    }
    

    获取一个片段后调用的方法。

     var results = AdjacentElements(grid, 3, 3);
            foreach (var result in results)
    
                Debug.WriteLine(result);
    

    当它遇到一个椭圆时,它应该检查椭圆正上方、下方、左侧和右侧的正方形,目前是全部8个正方形,我只需要四个(顶部、底部、左侧和右侧)。

    目前我正在使用网格参考3,3进行测试,它按预期打印出来,但所有8个方块都是如此。

    如果四个正方形中的任何一个依次遇到椭圆,则直线上的下一个正方形应为边界,以便可能移动。

    例如:

    圆1是正在检查的椭圆。 下面、左侧和右侧的圆圈将被忽略。 当方块3为空时,选择圆环2。 这将产生一个有效的移动,因此游戏将继续。 如果没有找到有效的移动,游戏将结束。

    我不知道如何继续,我想把方法调用放在一个嵌套的for循环中,遍历每个元素,但我认为这样做效率很低。

     var results = AdjacentElements(grid, i, j);
        foreach (var result in results)
    
            //condition here
    

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  2
  •   TheGeneral    7 年前

    我想我真的不明白你想做什么。但是,可以执行嵌套循环。但有时候戳它更容易

    给定一些数组x,y

    var x = 23;
    var y = 3;
    

    Exmaple公司

    var checks = List<Point>();
    
    checks.Add(new Point(x+1,y));
    checks.Add(new Point(x-1,y));
    checks.Add(new Point(x,y+1));
    checks.Add(new Point(x,y-1));
    
    foreach(var check in checks)
       //If Bounds check
       //do what you need to do