Citando il regolamento FIDE :
Questa acquisizione è legale solo in movimento dopo questo anticipo ed è chiamata acquisizione 'en passant'.
Citando Wikipedia :
La cattura en passant deve essere effettuata alla svolta successiva o il diritto di farlo è perso.
Perché?
Conosco la storia di base di en passant e la parafraserò qui: è stata aggiunta una regola per consentire ai pedoni di spostare due quadrati in avanti alla prima mossa. Qualcuno ha detto qualcosa del genere, e se un pedone lo utilizza per sfuggire a un pedone nemico adiacente? Quindi lo scheletro / quadro di base del pedone sarebbe cambiato! Quindi dobbiamo avere un en passant per preservare la stessa struttura di scacchi.
Va bene quella parte ha senso, ma perché deve essere nella mossa successiva? Quella parte della regola è stata aggiunta solo in seguito? Perché è stato aggiunto affatto? Quando due pedine sono diagonalmente adiacenti l'una di fronte all'altra, non devono catturare immediatamente o altrimenti rinunciare alla capacità di catturare. Quindi il concetto di "pedone fantasma", se non lo catturi immediatamente, e l'altro giocatore non lo muove, mi sembra che dovrebbe essere ancora lì e disponibile per la cattura fintanto che è lì.
Qualcuno sa perché questa parte di en passant è stata creata?
Sfondo opzionale: nel caso tu sia curioso, vengo da un background di programmazione. Di tutte le mosse speciali, en passant è (era, vedi sotto) il più difficile da programmare. Non solo è l'unica mossa in cui il pezzo da catturare si sposta in un quadrato vuoto, ma è l'unica mossa che "scompare" se non la prendi. Ciò significa che è una mossa in cui la posizione della tavola totale non è sufficiente per generare tutte le mosse. (Questo è vero per l'arrocco troppo, che ha già la sua giusta quota di regole complicate.) Due pedine nemiche potrebbe essere adiacente al 4 ° o 5 ° rango, circondato da caselle vuote, ma ancora non so se en passant è possibile. Devi controllare la mossa precedente.
O almeno così pensavo. Ora che lo sto rivisitando, ho scoperto un modo intelligente per implementare en passant senza controllare il registro delle mosse. Non generarlo all'inizio del turno. Generalo a move_take, in particolare alla fine di una pedina in 2 fasi. Ma memorizzalo in un array di mosse speciale poiché quello normale viene cancellato ad ogni curva. Quindi migrare e cancellare in modo appropriato su gen_all_moves. In questo modo, se ep non viene preso, non si genera nella mossa successiva perché non hai mosso la stessa pedina di due passi nella mossa successiva. Ricorda solo di controllare entrambi i lati del pedone e di creare due mosse ep se ci sono due pedine nemiche.
Il castling è stato implementato con l'aiuto di un booleano "spostato" in ogni pezzo, il che è utile anche per la prima mossa di una pedina. Anche se King e Rook sono nel posto giusto, lo usi per vedere se il King / Rook si è mosso prima. Non è necessario controllare il registro di spostamento. Ma dirò che Castling è ora la mossa più difficile da implementare perché devi controllare se il percorso è sotto attacco. En passant non è più il più difficile ora che ho pensato al modo intelligente.