Trích dẫn quy tắc FIDE :
Việc bắt giữ này chỉ hợp pháp khi di chuyển theo tiến bộ này và được gọi là bắt giữ 'en passant'.
Trích dẫn Wikipedia :
Việc bắt en passant phải được thực hiện ở lượt tiếp theo hoặc quyền làm như vậy bị mất.
Tại sao?
Tôi biết câu chuyện cơ bản về en passant và tôi sẽ chỉ diễn giải nó ở đây: Một quy tắc đã được thêm vào để cho những con tốt di chuyển hai hình vuông về phía trước trong lần di chuyển đầu tiên. Ai đó đã nói một cái gì đó như, điều gì sẽ xảy ra nếu một con tốt sử dụng thứ này để trốn thoát khỏi một con tốt bên cạnh kẻ thù? Sau đó, khung / khung cầm đồ cơ bản sẽ được thay đổi! Vì vậy, chúng ta phải có một en passant để bảo vệ cùng một khung cờ.
Được rồi, phần đó có ý nghĩa, nhưng tại sao nó phải ở bước tiếp theo? Là một phần của quy tắc chỉ được thêm vào sau này? Tại sao nó được thêm vào? Khi hai con tốt nằm cạnh nhau theo đường chéo đối diện nhau, chúng không phải bắt ngay lập tức nếu không sẽ mất khả năng bắt. Vì vậy, khái niệm "cầm đồ ma", nếu bạn không bắt được nó ngay lập tức và người chơi khác không di chuyển nó, dường như tôi vẫn nên ở đó và sẵn sàng để chụp miễn là nó ở đó.
Có ai biết tại sao phần này của en passant được tạo ra không?
Nền tùy chọn: Trong trường hợp bạn tò mò, tôi đến từ nền tảng lập trình. Trong tất cả các động tác đặc biệt, en passant là (đã, xem bên dưới) là khó nhất để lập trình. Đây không chỉ là động tác duy nhất mà mảnh chụp bắt được di chuyển đến một ô vuông trống, mà đó là động tác duy nhất "biến mất" nếu bạn không thực hiện. Điều đó có nghĩa là đó là một động thái trong đó tổng vị trí bảng không đủ thông tin để tạo ra tất cả các di chuyển. (Đó là đúng đối với castling quá, mà đã có chia sẻ công bằng của luật lệ phức tạp.) Hai con cờ của đối phương có thể tiếp giáp vào ngày 4 hoặc thứ hạng thứ 5, được bao bọc bởi các ô vuông trống, nhưng bạn vẫn không biết nếu en passant là có thể. Bạn phải kiểm tra di chuyển trước đó.
Hay tôi nghĩ vậy. Bây giờ tôi đang xem lại điều này, tôi đã tìm ra một cách thông minh để thực hiện en passant mà không cần kiểm tra nhật ký di chuyển. Đừng tạo ra nó khi bắt đầu. Tạo nó tại move_take, cụ thể là vào cuối bước di chuyển 2 bước. Nhưng lưu trữ nó trong một mảng di chuyển đặc biệt vì cái bình thường sẽ bị xóa ở mỗi inc_turn. Sau đó di chuyển và xóa một cách thích hợp tại gen_all_move. Theo cách đó, nếu ep không được thực hiện, nó sẽ không tự tạo ra bước di chuyển tiếp theo bởi vì bạn đã không di chuyển cùng một bước cầm đồ ở bước tiếp theo. Chỉ cần nhớ kiểm tra cả hai mặt của con tốt và tạo hai ep ep nếu có hai con tốt của kẻ thù ở đó.
Castling đã được thực hiện với sự trợ giúp của boolean "di chuyển" trong mỗi phần, điều này cũng hữu ích cho việc di chuyển đầu tiên của một con tốt. Ngay cả khi King và Rook ở đúng vị trí, bạn sử dụng nó để xem liệu King / Rook đã di chuyển trước đó chưa. Không cần kiểm tra nhật ký di chuyển. Nhưng tôi sẽ nói rằng Castling hiện là động thái khó thực hiện nhất vì bạn phải kiểm tra xem đường dẫn có bị tấn công hay không. En passant không còn là khó nhất bây giờ mà tôi nghĩ về cách thông minh.