private int minimax(NeutronBoard nb, int depth)
    {
	NeutronBoard n_copy;
	int best_value=-3000;

       if (nb.whoToMove()==NeutronBoard.BLACK) {
         best_value=3000;
       }
       if ((depth==0) || (nb.isGameOver()!=NeutronBoard.NOPLAYER)) {
	 return NeutronUtil.evaluation(nb);
       }
       for (String AMove : nb.uniqueMoves()) {
          n_copy=new NeutronBoard(nb);
	  try {
	    n_copy.makeMove(AMove);
	  }
	  catch (IllegalMoveException e) { 
	      e.printStackTrace();
	      throw new RuntimeException("(033) This should never happen.");
	  }
	  if (nb.whoToMove()==NeutronBoard.WHITE) { // The max player
	   
	       best_value=Math.max(best_value,minimax(n_copy,depth-1));
	  }
          else { // The min-player
	       best_value=Math.min(best_value,minimax(n_copy,depth-1));
	  }
       } 
       return best_value;
    }