use list not array for directions
introduce MoveEvaluator to calculate all possible moves for a piece on the board