protected void simBoard(BoardNode bn, Board b, int playerToMove, final int currentPlayer, int row, int column, final boolean firstWon, final Point startPoint) throws CloneNotSupportedException{
        Board lb=(Board) b.clone();
//        System.out.println("In simBoard. Level="+bn.getLevel());
//        System.out.println(decisionTree.getNodesOfLevel(1).size());
        if(!(lb.placeBall(playerToMove, row, column) && asses.isPlayerWinning(lb, playerToMove) && playerToMove==currentPlayer)){
            for (int a_row = 0; a_row < lb.getSize(); a_row++) {
                for (int a_column = 0; a_column < lb.getSize(); a_column++) {
                    if (!asses.isPlayerWinning(lb, playerToMove) && lb.isMovePossible(a_row, a_column)) {
                        BoardNode bnp = new BoardNode(new Point(a_row, a_column));
                        bn.addChild(bnp);
                        simBoard(bnp, lb, 1 + ((playerToMove) % np), currentPlayer, a_row, a_column, firstWon, startPoint);                     
                    } else {
                        if(asses.isPlayerWinning(lb, playerToMove)){
                            bn.setWin(playerToMove);
                        }
                    }
                }
            }           
        }
        lb=null;
    }