public bool MoveChip(IChip chipCoord) { if (chipCoord.Value == 0) { return(false); } //Проверка находятся ли координаты в одной строке или столбце с пустой ячейкой if (chipCoord.PosX != _emptyCell.PosX && chipCoord.PosY != _emptyCell.PosY) { return(false); } //Проверка является ли пустая ячейка соседней if (Math.Abs(chipCoord.PosX - _emptyCell.PosX) != 1 && Math.Abs(chipCoord.PosY - _emptyCell.PosY) != 1) { return(false); } IChip oldChipPos = chipCoord.CreateClone(); _field[_emptyCell.PosY, _emptyCell.PosX] = _field[chipCoord.PosY, chipCoord.PosX]; _field[_emptyCell.PosY, _emptyCell.PosX].SetPosition(_emptyCell); _field[oldChipPos.PosY, oldChipPos.PosX] = _emptyCell; _emptyCell.SetPosition(oldChipPos); return(true); }