Mam klasę o nazwie pokładzie. Posiada wiele kolumn i można dodać kamienie do kolumny, dzwoniąc do addstonetocolumn (kolumna C). Metoda nie powinna modyfikować OBJET SECT, ale tworzyć tylko nowy obiekt zarządowy z dodatkowym kamieniem, ale w jakiś sposób również się zmieniają.

Heres mój odpowiedni kod:

public Board AddStoneToColumn(int column)
{
    Board resultBoard = new Board(this);
    Boolean isPlaced = false;
    for (int i = 0; i < height; i++)
    {
        if (resultBoard.GetStone(column, i) == StoneEnum.EMPTY)
        {
            resultBoard.SetExactCoords(column, i, turn);
            isPlaced = true;
            break;
        }
    }

    if (!isPlaced)
    {
        throw new InvalidOperationException("Spalte voll");
    }

    if (turn == StoneEnum.BLUE)
        resultBoard.turn = StoneEnum.RED;
    if (turn == StoneEnum.RED)
        resultBoard.turn = StoneEnum.BLUE;
    return resultBoard;
}

private void SetExactCoords(int x, int y, StoneEnum stone)
{
    if (stone == StoneEnum.EMPTY)
        throw new NotSupportedException("Empty stone ??");
    this.stones[x, y] = stone;
}

public Board(Board board)
{
    this.stones = board.stones;
    this.turn = board.turn;
}
-1
J. Krueger 22 luty 2019, 16:42

2 odpowiedzi

Najlepsza odpowiedź

Tylko kopiujesz odniesienia do konstruktora klonowania, nie tworząc kopii danych. Będziesz musiał zduplikować te tablice / kolekcje.

3
Daniel A. White 22 luty 2019, 13:44

Może możesz użyć struktury zamiast klasy?

Ale dla twojego przykładu użyłbym ICLONELEBLESE interfejs.

Ponadto można oglądać to dyskusja również.

0
Silviu 22 luty 2019, 14:00