Citando el libro de reglas de la FIDE :
Esta captura solo es legal en el movimiento que sigue a este avance y se llama captura 'en passant'.
Citando Wikipedia :
El passant en la captura se debe hacer en el siguiente turno o el derecho a hacerlo se pierde.
¿Por qué?
Conozco la historia básica de en passant y la parafrasearé aquí: se agregó una regla para permitir que los peones avancen dos casillas en su primer movimiento. Alguien dijo algo como, ¿qué pasa si un peón usa esto para escapar de un peón enemigo adyacente? ¡Entonces se cambiaría el esqueleto / marco básico del peón! Por lo tanto, debemos tener un en passant para preservar el mismo marco de ajedrez.
De acuerdo, esa parte tiene sentido, pero ¿por qué tiene que estar en el próximo movimiento? ¿Esa parte de la regla solo se agregó más tarde? ¿Por qué se agregó en absoluto? Cuando dos peones están diagonalmente adyacentes uno frente al otro, no tienen que capturar de inmediato o perder la capacidad de capturar. Entonces, el concepto del "peón fantasma", si no lo captura de inmediato, y el otro jugador no lo mueve, me parece que todavía debería estar allí y disponible para capturar mientras esté allí.
¿Alguien sabe por qué se creó esta parte de en passant ?
Antecedentes opcionales: en caso de que tenga curiosidad, vengo de un fondo de programación. De todos los movimientos especiales, en passant es (era, ver más abajo) el más difícil de programar. No solo es el único movimiento donde la pieza de captura se mueve a un cuadrado en blanco, sino que es el único movimiento que "desaparece" si no lo tomas. Eso significa que es un movimiento donde la posición total del tablero no es suficiente información para generar todos los movimientos. (Eso es cierto para el enroque también, que ya cuenta con una buena cantidad de reglas complicadas.) Dos peones enemigos podrían ser adyacentes en la 4ª o 5ª fila, rodeado de cuadros en blanco, pero aún no saben si en passant es posible. Tienes que verificar el movimiento anterior.
O eso pensé. Ahora que estoy revisando esto, descubrí una forma inteligente de implementar de forma passant sin verificar el registro de movimientos. No lo genere al inicio del turno. Generarlo en move_take, específicamente al final de un movimiento de peón de 2 pasos. Pero guárdelo en una matriz de movimiento especial, ya que la normal se borra en cada inc_turn. Luego migre y borre adecuadamente en gen_all_moves. De esa manera, si no se toma ep, no se genera en el siguiente movimiento porque no moviste ese mismo peón dos pasos en el siguiente movimiento. Solo recuerda revisar ambos lados del peón y crear dos movimientos ep si hay dos peones enemigos allí.
El enroque se implementó con la ayuda de un booleano "movido" en cada pieza, que también es útil para el primer movimiento de un peón, por supuesto. Incluso si el Rey y la Torre están en el lugar correcto, lo usas para ver si el Rey / Torre se ha movido antes. No es necesario verificar el registro de movimientos. Pero diré que Castling es ahora el movimiento más difícil de implementar porque debes verificar si el camino está bajo ataque. En passant ya no es el más difícil ahora que pensé en la manera inteligente.