如何更改二维数组中的值

时间:2018-04-17 16:30:47

标签: c# arrays multidimensional-array unityscript

我坚持使用带有c#的Unity框架编码的这个二维数组。我正在尝试使用智能代理创建一个Checker游戏。因此,我试图获得所有碎片并传递给Alpha Beta算法并获得最大量的对手方。但为了做到这一点,我必须检查我的板上的每一块。我在游戏中使用8by8板。所以我用了

Piece [,] pieces = new Pieces [8,8];

代码以存储碎片。现在我想换一件并取回件。 我尝试了几种方法并进行了实验,但是我找不到任何可以获取此数组并更改一个通用对象并使用更改检索列表。

请帮我解决这个问题。提前致谢。

我在这里写下了我实验的内容。关于这个问题的任何建议或我做错了什么?....

internal static void TryMoveInImaginaryWay(Piece[,] piece)
{
    int x = 0;
    int y =2;
    int x1 = 1;
    int y1 = 3;

    Moves move = new Moves();
    move.X = x;
    move.Y = y;
    move.X1 = x1;
    move.Y1 = y1;

    // Copping the pieces state
    Piece p = piece[x, y];

    //I am creating a list with those pieces
    List<Piece> temppiecelist = new List<Piece>();

    foreach (Piece pi in piece)
    {
        if (pi == p)
        {
            piece[x1, y1] = p;
            temppiecelist.Add(null);
        }
        else
        {
            temppiecelist.Add(pi);
        }
    }

    Piece[,] piek = temppiecelist; // can't convert it says Cannot Implicitly convert type "System.Collection.Generic.List<Piece>' to Piece[*,*]'"

    // I know i can't convert like this, but any ideas.
    //Piece[,] piek = new Piece[8, 8];

我在问,有没有办法改变上面的Piece [,]数组列表值。我想要与输出相同的格式。

1 个答案:

答案 0 :(得分:1)

看起来你要做的就是制作一块电路板,然后在电路板上移动。

为什么你会得到一个列表,我无法弄明白;是什么让你相信List是正确的解决方案?我很想知道;通过了解人们为何对程序编写得出不好的结论,我可以帮助他们编写更好的程序。

要制作电路板的变异副本,只需复制电路板改变副本

internal static void TryMoveInImaginaryWay(Piece[,] original)
{
    int x0 = 0;
    int y0 = 2;
    int x1 = 1;
    int y1 = 3;
    Piece[,] copy = (Piece[,])original.Clone();
    copy[x1,y1] = copy[x0,y0];
    copy[x0,y0] = null;

你已经完成了。