1

을 방지 할 때 검사로두고 이동 선택에서 플레이어를 방지하기 위해 다음과 같이 내가 알고리즘이 무한 재귀를 방지 : 보드를 복사하고 복사 작업에 의해 (체스 - 확인

  1. 가짜 이동을 게시판)
  2. 이동이 위조 된 후 모든 법적 상대 이동을 가져옵니다.
  3. 합법적 인 이동 중 하나가 플레이어의 왕을 공격 할 수있는 경우 원래 가짜 이동을 선택할 수 없습니다.

그러나 2 단계 (굵게 표시)에서 프로그램은 다른 플레이어가 수행하는 작업이 다른 플레이어를 확인하지 못하도록 확인해야합니다. 이것은 알고리즘 적으로 피할 방법이 확실하지 않은 무한 재귀를 만듭니다. 이 상황에 대해 사람들은 어떤 제안을합니까?

+1

"프로그램에서 다른 플레이어가 수행하는 작업이 다른 플레이어를 확인하지 못하도록 확인해야합니다"프로그램에서이 상황에서이 조건을 검사해서는 안됩니다. [사례] (https://lichess.org/editor/8/8/8/8/8/7k/6r1/R3KQ2_w_KQkq_-) 1.Ke2는 흑인들이 그들의 루크를 움직일 수 없더라도 법적으로 적합하지 않습니다. –

+0

왜 합법적이지 않습니까? 검찰은 왕을 데려 가기 위해 아무 것도 할 수 없으므로 확인하지 않겠습니까? – user7518095

+1

아니요, FIDE가 발행 한 공식 체스 규칙은이 상황을 3.9 항에서 명시 적으로 다루고 있습니다. 체스 엔진을 구현하기 전에 규칙을 읽어야합니다. –

답변

2

true 플레이어의 조각이 상대방 왕의 셀로 이동할 수 있으면 false을 반환하는 다른 함수를 정의 할 수 있습니다.

이제 이동을 위조 할 때 상대방에게이 기능을 호출하십시오.

+0

하지만 상대방이 자신을 확인하지 않았는지 확인해야하지 않습니까? 실제로 첫 번째 플레이어의 작품이 실제로 확인되었는지 확인하려면? 아마도 나는 수표의 정의를 오해하고 있습니다. 무엇을 세고 계산하지 않는지 ... – user7518095

+0

법적 절차를 얻기 위해서, 우리는 수표를 막아야합니다 ... 이것은 내 재귀 루프가 일어나고있는 곳입니다 – user7518095

+1

가짜 이동 후, 상대방의 왕이 위협에 있는지를 확인할 필요가 없습니다. 상대방이 직접 왕을 공격 할 수 있다면 왕이 위험에 처했는지 여부는 문제가되지 않습니다. 왜냐하면 왕을 쓰러 뜨리고 경기가 끝났기 때문입니다. 따라서이 기능의 합법적 인 움직임은 왕의 세포로 이동할 수 있는지 여부를 의미합니다. – foo