Ejemplo n.º 1
0
        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);
        }