Проблема с алгоритмом массива - PullRequest
0 голосов
/ 23 марта 2011

У меня есть этот метод:

public bool CantMoveIfCreatedCheck(Pieces[,] pieces, int rowStart, int columnStart, 
int rowEnd, int columnEnd)

 {
    pieces[rowEnd, columnEnd] = pieces[rowStart, columnStart];
    // shift one piece to another location
        pieces[rowStart, columnStart] = null;

    if (whitePiece)
    {
        for (int z1 = 0; z1 < 9; z1++)
        {  //Find Threatening piece
            for (int j = 0; j < 9; j++)
            {
                if (pieces != null && pieces[whitekingRow, whitekingColumn] != null))// i have some check algorithm
                {
                    canCheck = true;
                    chess.YouWillBeCheckedCantMove();
                }
            }
        }
    }
    pieces[rowStart, columnStart] = pieces[rowEnd, columnEnd];// shift it back to the end location
    pieces[rowEnd, columnEnd] = null;

   return canCheck;   
}

Что я пытаюсь сделать здесь, это на мгновение изменить расположение шахматных фигур внутри массива и сдвинуть их обратно сразу после окончания двух циклов.

Но поскольку все работает с массивами / объектами по ссылке, перемещение фрагмента в одном месте массива в другое место массива создает проблемы.есть ли способ как-то изменить массив на другой, не влияя на исходный массив

Например, создав temperoryArray[,]=pieces[,]; (у меня это не сработало, потому что он скопировал ссылки и оказал влияние на массив частей)

Есть ли альтернативный способ?

1 Ответ

3 голосов
/ 23 марта 2011

Чтобы скопировать массив во временный массив, вам нужно будет глубоко копировать объекты внутри массива вместо поверхностного копирования (просто с помощью присваивания) ссылок. Вот хороший пост о глубоком копировании в C #.

Поскольку у вас есть массив объектов (на самом деле это массив ссылок), присваивание просто копирует ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...