The Chess Variant Pages

Enter Your Reply

The Comment You're Replying To
Fergus Duniho wrote on 2005-12-10 UTC
In developing the preset for Storm the Ivory Tower, I had to use some new
techniques, and they're worth passing along to any GAME Code developers
out there. In previous games, I have normally separated the code for
checking the legality of a piece move and for checking whether a piece is
checking the King. For the latter, I normally checked various locations
where checking pieces might be. Because Storm the Ivory Tower uses arrows
on squares to direct the movement of pieces, this approach would not work
without some added complication. So I took a different approach. I wrote a
subroutine, called checked, which simply loops through the enemy pieces,
checking in turn whether each one can legally move to the Brain's current
location. This subroutine made use of the same functions I wrote for
checking whether each piece can make a legal move. Since these functions
were now being used to evaluate potential moves, not just past moves, I
had to replace the capture operator in some functions with something like
'cond empty #0 capture (not empty #1)'. This first checks whether the
origin space is empty. It will be empty for a past move but not for a
potential move. For a past move, it just uses the capture operator to
check whether a capture has been made. For a potential move, it checks
whether a capture could be made at the destination by checking whether the
space is occupied. 

In presets for other games, I have taken the shortcut in the checkmated
subroutine of checking for check only from the piece moved and possible
revealed checks through the space it moved from. With the inclusion of a
hopper piece, the Clodhopper, I couldn't take this shortcut. If I tried
to, it would become less of a shortcut, for I would also have to check for
revealed Clodhopper attacks through both the origin and destination spaces
of a moved piece. So I took a different approach. Instead of using
separate checkmated and stalemated functions, I eliminated the checkmated
subroutine, and checked for checkmate simply by checking for check plus
stalemate with the separate checked and stalemated subroutines.

The upshot of all of this is that this is a streamlined approach to
writing code for enforcing game rules. It might not be as fast for the
server to execute, though I don't have benchmarks on this one way or the
other, but it will be easier for a programmer to write. It means skipping
the code for separately checking for check and checkmate and including
only one function apiece for how each piece moves. For examples of what I
have been describing, here is a link to the include file used for Storm
the Ivory Tower:


Edit Form

Comment on the page Storm the Ivory Tower

Quick Markdown Guide

By default, new comments may be entered as Markdown, simple markup syntax designed to be readable and not look like markup. Comments stored as Markdown will be converted to HTML by Parsedown before displaying them. This follows the Github Flavored Markdown Spec with support for Markdown Extra. For a good overview of Markdown in general, check out the Markdown Guide. Here is a quick comparison of some commonly used Markdown with the rendered result:

Top level header: <H1>

Block quote

Second paragraph in block quote

First Paragraph of response. Italics, bold, and bold italics.

Second Paragraph after blank line. Here is some HTML code mixed in with the Markdown, and here is the same <U>HTML code</U> enclosed by backticks.

Secondary Header: <H2>

  • Unordered list item
  • Second unordered list item
  • New unordered list
    • Nested list item

Third Level header <H3>

  1. An ordered list item.
  2. A second ordered list item with the same number.
  3. A third ordered list item.

Alt text for a graphic image

A definition list
A list of terms, each with one or more definitions following it.
An HTML construct using the tags <DL>, <DT> and <DD>.
A term
Its definition after a colon.
A second definition.
A third definition.
Another term following a blank line
The definition of that term.