@Override
    public void reportMove(Move move) {
        Square endSquare = state.getSquare(move.getDestinationRow(), move.getDestinationColumn());
        Square startSquare = state.getSquare(move.getStartRow(), move.getStartColumn());

        if (startSquare.getOccupier() instanceof EnemyPiece) {
            EnemyPiece piece = (EnemyPiece) startSquare.getOccupier();
            ProbabilityDistribution dist = piece.getDistribution();
            state = state.placePiece(move.getStartRow(), move.getStartColumn(), piece);
            ArrayList<EnemyPiece> enemyArmy = null;
            ArrayList<ProbabilityDistribution> distributions;

            if (isScoutMove(move)) {
                try {
                    dist.setProb(Rank.SCOUT, 1);
                    normalize(dist, Rank.SCOUT);
                    enemyArmy = getArmies();
                    distributions = getDistributions(enemyArmy);
                    reCalibrateBeliefState(Rank.FLAG, distributions, dist);
                    reCalibrateBeliefState(Rank.BOMB, distributions, dist);
                } catch (Exception ex) {
                    Logger.getLogger(UTCPlayer.class.getName()).log(Level.SEVERE, null, ex);
                }

            } else {
                try {
                    dist.setProb(Rank.FLAG, 0);
                    normalize(dist, Rank.FLAG);
                    dist.setProb(Rank.BOMB, 0);
                    normalize(dist, Rank.BOMB);
                    enemyArmy = getArmies();
                    distributions = getDistributions(enemyArmy);
                    reCalibrateBeliefState(Rank.FLAG, distributions, dist);
                    reCalibrateBeliefState(Rank.BOMB, distributions, dist);
                } catch (Exception ex) {
                    Logger.getLogger(UTCPlayer.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            ArrayList<? extends Piece> blueArmy, redArmy;
            if (color == color.BLUE) {
                blueArmy = army;
                redArmy = enemyArmy;
            } else {
                blueArmy = enemyArmy;
                redArmy = army;
            }
            state = new GameState(state.getToMove(), blueArmy, redArmy);
        }
        System.out.println("before Move: \n" + state);
        if (endSquare.isOccupied()) {
            tempCaptured = endSquare.getOccupier();
        }
        //if()
        super.reportMove(move);
        System.out.println("After move: \n" + state);

    }