public bool IsAvailableMove(Corner start, Corner end)
 {
     return(IsAvailableMove(new Move(new Line(start, end))));
 }
        Box CreateBox(IMove move, BoxDirection direction, Player player)
        {
            bool   wouldBox = false;
            Corner ul = null, ur = null, ll = null, lr = null;

            switch (direction)
            {
            case BoxDirection.Up:
            {
                if (!(move.Line as Line).Vertical)
                {
                    ll = move.Line.Start as Corner;
                    ul = GetCornerFromDirection(ll, BoxDirection.Up);
                    lr = move.Line.End as Corner;
                    ur = GetCornerFromDirection(lr, BoxDirection.Up);
                }
            }
            break;

            case BoxDirection.Down:
            {
                if (!(move.Line as Line).Vertical)
                {
                    ul = move.Line.Start as Corner;
                    ur = move.Line.End as Corner;
                    ll = GetCornerFromDirection(ul, BoxDirection.Down);
                    lr = GetCornerFromDirection(ur, BoxDirection.Down);
                }
            }
            break;

            case BoxDirection.Left:
            {
                if ((move.Line as Line).Vertical)
                {
                    ur = move.Line.Start as Corner;
                    lr = move.Line.End as Corner;
                    ul = GetCornerFromDirection(ur, BoxDirection.Left);
                    ll = GetCornerFromDirection(lr, BoxDirection.Left);
                }
            }
            break;

            case BoxDirection.Right:
            {
                if ((move.Line as Line).Vertical)
                {
                    ul = move.Line.Start as Corner;
                    ll = move.Line.End as Corner;
                    ur = GetCornerFromDirection(ul, BoxDirection.Right);
                    lr = GetCornerFromDirection(ll, BoxDirection.Right);
                }
            }
            break;

            default:
                throw new ArgumentException("Direction must be one of Up, Down, Left, Right");
            }

            Box box = null;

            if (ul != null && ur != null && ll != null && lr != null)
            {
                wouldBox = MakesBox(ul, ur, ll, lr, move as Move);
                if (wouldBox)
                {
                    box = new Box(ul, ur, lr, ll, player, this);
                }
            }

            return(box);
        }