anchor.diff:      if (!board.isLegalMove(loc, card, playedDir)) {
         return false;
       }
  +    
  +    //TODO add validity check for payment path, if required
   
       board.playCardToStation(loc, card, playedDir, player.playerNum);
   
  
positive.code:   bool playCard(Player player, Card card, BoardLoc loc, CardDirection playedDir,
        [PaymentPath path]) {
      //validity checks
      if (activePlayer != player) {
        return false;
      }
  
negative.code:       return true;
      }
    }
    
    void makeSelection(Player player, Card card) {
      round.makeSelection(player, card);
    }
    
    bool playCard(Player player, Card card, BoardLoc loc, CardDirection playedDir,
        [PaymentPath path]) {
      //play card in round
      round.playCard(player, card, loc, playedDir, path);
      //TODO detect end of game
      //TODO detect end of round and wait for new round
    }
  }
  
  class Round {
    //TODO move round class to its own file
    final Board board = new Board();
    RoundState roundState = RoundState.make_selections;
    final Map<int, PlayerRoundData> roundData = {};
  