protected Jump(Point2D step, GridPosition2D from, GridPosition2D to) : base(step, from, to) { }
protected DirectedMove(Point2D step, GridPosition2D from, GridPosition2D to) { Step = step; From = from; To = to; }
public bool TryMakeMove(GridPosition2D from, GridPosition2D to) { return(GetPossibleMoves(from, to).Any(TryMakeMove)); }
protected SlidingMove(Point2D step, GridPosition2D from, GridPosition2D to) : base(step, from, to) { }
protected abstract IEnumerable <DirectedMove <TGameState, TCell> > GetPossibleMoves(GridPosition2D from, GridPosition2D to);