Check out Makruk (Thai Chess), our featured variant for March, 2025.


[ Help | Earliest Comments | Latest Comments ]
[ List All Subjects of Discussion | Create New Subject of Discussion ]
[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]

Single Comment

Play-test applet for chess variants. Applet you can play your own variant against.[All Comments] [Add Comment or Rating]
💡📝H. G. Muller wrote on Fri, Oct 20, 2023 02:00 PM EDT in reply to Carlos Cetina from Thu Oct 19 09:30 AM:

It seems I need @Fergus for this.

The loop in the move generator of the betza.txt include file for generating slider moves looks like this:

      set k 1;
      do while < #k #r and not #hit: // for non-final (and thus empty) squares
        set to elem dec #k #tosqrs;
        if #togo:
          set newindex + 4 #legindex;     // another leg follows
          gosub NextLeg #togo #newindex #startsqr #to #locustsqr #dropsqr #k;
        else:
          gosub GotMove #startsqr #to #locustsqr #dropsqr 0 0;
        endif;
        if & << 1 23 #mode:
          push eps #to;
        endif;
        inc k;
if == 4 #task:
print . L_ #hit;
endif;
      loop;

where #tosqrs is an array of all the empty squares on the slider path. The variable #hit, initialized to false, serves for flagging if the sought move (e.g. the entered one, a legal one or capture of a royal) has been found, so that move generation should be aborted.

In the mate test (where #task equals 4) for the position given by Carlos below, the move Qe3-h6 is correctly found to be a legal one, which sets #hit, as is confirmed by the printing of L_1 by the print statement I inserted for debugging. As far as I understand this should have terminated the do-while loop, as not #hit is then no longer true. But the loop happily continues with the move Qe3-i7 (the next empty square in that direction), and subsequently generates all other pseudo-legal moves for the position. The last one being illegal because it does not evade the Sissa check, so that the verdict 'checkmate' results.

What is going on here that makes the loop continue?