Interfaz Universal de Ajedrez
# Interfaz Universal de Ajedrez

Una interfaz universal de ajedrez (UCI) es un protocolo de comunicación abierto que permite a los motores de ajedrez comunicarse con las interfaces de usuario.

## Historia

En noviembre de 2000, se publicó el protocolo UCI. Diseñado por Rudolf Huber y Stefan Meyer-Kahlen, el autor de Shredder, UCI compite con el antiguo "Protocolo de comunicación del motor de ajedrez" introducido con XBoard/WinBoard.

En 2002, ChessBase, la compañía de software de ajedrez que comercializa Fritz, comenzó a respaldar el protocolo UCI, que anteriormente solo contaba con algunas interfaces y motores.

A partir de 2007, se sabe que más de 100 motores son compatibles directamente con UCI, incluyendo a los mejores motores disponibles en el momento.

* Stockfish 12 analizando una posición sin interfaz gráfica de usuario, mostrando jugadas a través del protocolo UCI en modo texto.
* Stockfish 12 analizando la misma posición de la izquierda, mostrando análisis en una interfaz gráfica de usuario a través del protocolo UCI.

## Diseño

Por diseño, UCI asigna algunas tareas a la interfaz de usuario (es decir, la capa de presentación) que tradicionalmente han sido manejadas por el propio motor (en la capa empresarial).

En particular, generalmente se espera que la interfaz de usuario maneje el libro de aperturas, simplemente seleccionando movimientos para jugar hasta que esté fuera del libro, y solo luego iniciando el motor para el cálculo en la posición resultante. UCI no especifica ningún formato en disco para el libro de apertura. Las diferentes interfaces de usuario suelen tener sus propios formatos propietarios.

Si bien la interfaz de usuario también puede asumir la responsabilidad de manejar las bases de tablas de finales, esto se maneja mejor en el propio motor, ya que tener información de la base de tablas puede ser útil para considerar posibles posiciones futuras.

El protocolo UCI de Stefan-Meyer Kahlen en Shredder utiliza una notación algebraica larga para los movimientos. Un "nullmove" del motor a la GUI debe enviarse como 0000.

### Ejemplos

* e2e4
* e7e5
* e1g1 (enroque corto)
* e7e8q (promoción)

## Funciones

El parámetro uci_limitstrength le dice a los motores con esta característica que jueguen a un nivel más bajo. El parámetro uci_elo especifica la clasificación Elo a la que el motor apuntará a jugar.

## Variantes

La UCI ha sido modificada para jugar algunas variantes de ajedrez. Algunos de estos son:

* Universal Shogi Interface (USI), variante para el shogi;
* Universal Chinese Chess Interface (UCCI), variante para el xiangqi.

Cada uno de estos protocolos también puede definir variantes de PGN y FEN. Se dice que XBoard CECP requiere muchos menos cambios para admitir variantes.

