Beispiel #1
0
        // Mueve un bloque, según las normas que diga el gestor
        public MovableBlock Move(MovableBlock block)
        {
            if (block == null)
            {
                throw new ArgumentNullException(nameof(block));
            }
            if (!CanMove(block))
            {
                throw new InvalidOperationException("The required movement is not possible");
            }

            Position originPosition = block.position;

            Debug.Log(ToString() + " moves " + block.ToString() + ".");
            var targetPosition = puzzle.MoveByDefault(block.position);

            // Si hemos tenido éxito ha cambiado la matrix lógica del puzle... pero no ha cambiado la posición (lógica), ni la mía ni la del hueco. Toca hacerlo ahora
            block.position = targetPosition;
            MovableBlock targetBlock = board.GetBlock(targetPosition);

            targetBlock.position = originPosition;

            UpdateInfo();

            return(targetBlock);
        }