public int[] minimax( Partida partida, EstatCasella estat_casella, int profunditat_maxima )
	{
		int[] millor_moviment = {
				-1,
				-1
		};
		int maxim_actual;
		int maxim = Integer.MIN_VALUE;
		Tauler tauler = partida.getTauler();
		int mida = tauler.getMida();
		int profunditat = 0;
		EstatCasella fitxa_jugador = EstatCasella.JUGADOR_B;
		if ( estat_casella == EstatCasella.JUGADOR_A )
		{
			fitxa_jugador = EstatCasella.JUGADOR_A;
		}

		for ( int fila = 0; fila < mida; ++fila )
		{
			for ( int columna = 0; columna < mida; ++columna )
			{
				try
				{
					tauler.mouFitxa( estat_casella, fila, columna );
				}
				catch ( IllegalArgumentException excepcio )
				{
					continue;
				}
				EstatPartida estat_partida = partida.comprovaEstatPartida( fila, columna );
				estat_casella = this.intercanviaEstatCasella( estat_casella );
				maxim_actual =
						this.valorMax( partida, estat_partida, Integer.MIN_VALUE, Integer.MAX_VALUE, estat_casella,
								profunditat + 1, profunditat_maxima, fitxa_jugador );
				if ( maxim_actual > maxim )
				{
					maxim = maxim_actual;
					millor_moviment[0] = fila;
					millor_moviment[1] = columna;
				}
				tauler.treuFitxa( fila, columna );
				estat_casella = intercanviaEstatCasella( estat_casella );
			}
		}
		return millor_moviment;
	}