Citando o livro de regras da FIDE :
Essa captura é legal apenas em movimento após esse avanço e é chamada de captura 'en passant'.
Citando a Wikipedia :
A captura passante deve ser feita no próximo turno ou o direito de fazê-lo é perdido.
Por quê?
Conheço a história básica de en passant e vou parafrasear aqui: Uma regra foi adicionada para permitir que os peões avancem dois quadrados à frente no primeiro movimento. Alguém disse algo como, e se um peão usar isso para escapar de um peão inimigo adjacente? Então o esqueleto / estrutura básica do peão seria alterado! Portanto, devemos ter um passante para preservar a mesma estrutura de xadrez.
Ok, essa parte faz sentido, mas por que ela precisa estar no próximo passo? Essa parte da regra foi adicionada apenas mais tarde? Por que foi adicionado? Quando dois peões estão na diagonal adjacentes, um contra o outro, eles não precisam capturar imediatamente ou perder a capacidade de capturar. Portanto, o conceito de "peão fantasma", se você não capturá-lo imediatamente e o outro jogador não o mover, parece-me que ele ainda deve estar lá e disponível para captura enquanto estiver lá.
Alguém sabe por que essa parte de en passant foi criada?
Histórico opcional: Caso você esteja curioso, eu venho de um histórico de programação. De todos os movimentos especiais, en passant é (foi, veja abaixo) o mais difícil de programar. Não é apenas o único movimento em que a peça capturada se move para um quadrado em branco, mas é o único movimento que "desaparece" se você não o fizer. Isso significa que é uma jogada em que a posição total da placa não é suficiente para gerar todas as jogadas. (Isso também é verdade para o jogo de boliche, que já tem seu quinhão de regras complicadas.) Dois peões inimigos podem estar adjacentes na 4ª ou 5ª fileiras, cercados por quadrados em branco, mas você ainda não sabe se é possível passá -lo. Você precisa verificar a jogada anterior.
Ou assim eu pensei. Agora que estou revisitando isso, descobri uma maneira inteligente de implementar en passant sem verificar o log de movimentação. Não o gere no início do turno. Gere-o em move_take, especificamente no final de um movimento de peão de 2 etapas. Mas armazene-o em uma matriz de movimento especial, já que a normal é limpa a cada inc_turn. Em seguida, migre e limpe adequadamente em gen_all_moves. Dessa forma, se ep não for utilizado, ele não será gerado no próximo movimento, porque você não moveu o mesmo peão duas etapas no próximo movimento. Lembre-se de verificar os dois lados do peão e criar dois movimentos ep se houver dois peões inimigos.
O castling foi implementado com a ajuda de um booleano "movido" em cada peça, o que também é útil para o primeiro movimento de um peão, é claro. Mesmo se o rei e a torre estiverem no lugar certo, use-o para verificar se o rei / torre já se moveu antes. Não há necessidade de verificar o log de movimentação. Mas vou dizer que Castling agora é a jogada mais difícil de implementar, porque você precisa verificar se o caminho está sob ataque. En passant não é mais o mais difícil agora que pensei na maneira mais inteligente.