Check out Janggi (Korean Chess), our featured variant for December, 2024.


[ 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 ]

Comments/Ratings for a Single Item

Earlier Reverse Order LaterLatest
Game Courier Developer's Guide. Learn how to design and program Chess variants for Game Courier.[All Comments] [Add Comment or Rating]
Peter Aronson wrote on Tue, Nov 25, 2003 06:12 PM UTC:Excellent ★★★★★
Is there going to be a section added here for automated moves? Or are they documented elsewhere?

🕸📝Fergus Duniho wrote on Wed, Nov 26, 2003 02:06 AM UTC:
The section on automated moves is now added. It also gives details on random moves.

🕸📝Fergus Duniho wrote on Thu, Feb 26, 2004 03:32 AM UTC:
This guide now describes the following new commands:

setflag, unsetflag, copyflag

add, move, replace

if, else, elseif, endif, verify

The verify command was already available, but it has now been greatly
expanded.

I created some of these commands for use with Crazyhouse, and I created
others because of their similarity to other commands I was creating. In
particular, the new Crazyhouse preset tracks Pawns with flags, uses verify
to check the flag of a captured piece, then uses add to change it to a
Pawn if it used to be one. Although I didn't use them, I also figured out
how to implement nesting if, if-else, and if-elseif-else statements. I
haven't thoroughly tested them out yet, but I expect they should work.

🕸📝Fergus Duniho wrote on Thu, Feb 26, 2004 05:44 AM UTC:
The if commands are not working properly right now, but it's too late to continue debugging. I'll continue working on it later.

🕸📝Fergus Duniho wrote on Thu, Feb 26, 2004 04:54 PM UTC:
The if, else, elseif, and endif commands should be working properly now. My tests of their behavior are successful so far. The endif command has been expanded to allow the all parameter or a numeric parameter. The all parameter closes off all if scopes. A numeric parameter is like repeating endif as many times as specified. If you write an if-elseif series, it is appropriate to end it with 'endif all'.

🕸📝Fergus Duniho wrote on Sat, Feb 28, 2004 10:44 PM UTC:
Some of the new features I added are only temporary. I will be replacing some of the conditions and expressions I wrote for if and set with a function that allows various operations to be combined in a single expression using backwards Reverse Polish Notation, i.e. Polish Notation.

🕸📝Fergus Duniho wrote on Sun, Feb 29, 2004 12:08 AM UTC:
I have added the ability for if, set, and verify to use a Polish notation calculator for evaluating complex expressions. But it will be a while before the documentation is ready.

🕸📝Fergus Duniho wrote on Sun, Feb 29, 2004 08:25 PM UTC:
The automation language for Game Courier is now more powerful than ever. The newly developed if, set, and verify commands can all make use of a Polish notation calculator for evaluating very complex expressions. The Polish notation calculator includes special functions for getting information that can be used in code for enforcing rules to games. It might be possible now to write code that enforces the rules of Chess, though what I've done so far focuses mainly on the easier task of checking whether a piece has moved as its powers enable it to. The harder part is checking for check and checkmate. I haven't worked out all the details yet, but what I have implemented may already be capable of this. But even if it is, I expect to write some more functions to make the process go faster and take up less code.

krinid wrote on Tue, Mar 30, 2004 05:51 AM UTC:
Is it possible to create a 'Stratego'-like game with the following
characteristics?

- each player can see his own pieces but not his opponents
- players are able to choose the placement of their pieces before starting

Zac Sparx wrote on Tue, Mar 30, 2004 05:51 AM UTC:
Is it possible to create a 'Stratego'-like game with the following
characteristics?

- each player can see his own pieces but not his opponents
- players are able to choose the placement of their pieces before starting

markthompson wrote on Tue, Mar 30, 2004 12:42 PM UTC:
There was a game called Stealth Chess recently that adapted that idea (Stratego-style hidden pieces) as a chess variant. It might be on eBay, or there may be websites on it. Maybe it's even on this site -- guess I should have checked before I started writing.

🕸📝Fergus Duniho wrote on Tue, Mar 30, 2004 06:42 PM UTC:
No, Game Courier does not support that sort of hidden-information game.

Greg Strong wrote on Wed, Nov 24, 2004 04:46 PM UTC:Excellent ★★★★★
Very nice! This new version is very well written and comprehensive! Thanks for this.

🕸📝Fergus Duniho wrote on Wed, Nov 24, 2004 05:33 PM UTC:
I've now added two new parameters to Customize and Edit mode. These are Scale and JPG Quality. Scale resizes auto-generated PNG and JPG images, while JPG Quality is used for saving JPG files. Details are given in the section on Customize mode. I uploaded a new Circular Chess preset today that makes use of both of these new parameters. It also makes use of the new method for generating circular boards, which I'm still working on and have only begun to document here.

🕸📝Fergus Duniho wrote on Wed, Nov 24, 2004 07:21 PM UTC:
The PNG and JPG methods for automatically generating circular boards seem to now be in good working order. They are described in the guide. I have also added details on some new functions for the Polish Notation Calculator: prevfullmove, prevmove, count, and trim.

🕸📝Fergus Duniho wrote on Sun, Dec 5, 2004 04:10 AM UTC:
In preparation for a British Chess preset, I have added some new features
to Game Courier that are now documented here. These are the path function
and the foreach-next loop. The path function returns an array of all steps
from one space to another. The foreach-next loop iterates through all the
elements of an array. Although I could do it, I don't plan to add
additional types of looping, since I don't want to provide the ability to
create infinite loops. Foreach should be sufficient for any looping needs
any preset has.

Also, I am deprecating how endif currently works. In the future, endif
will automatically close off all elseifs within the scope of the current
if, which it will also close. There will no longer be any need to use
numbers or the all keyword with endif. I could make the switch right away
if everyone wrote endifs the same way I do, but just in case anyone has
used endif arguments for shortcuts that close off multiple ifs, not just
multiple elseifs and a single if, I am allowing time for transition before
the old way of using endif breaks down. To make the transition, replace any
use of 'endif all' or 'endif #' with 'endifs' and make sure that each
'endifs' statement closes off only one 'if' statement. The 'endifs'
command works in the same way that 'endif' eventually will.

🕸📝Fergus Duniho wrote on Sun, Dec 5, 2004 08:10 PM UTC:
I've changed how next works since last night. It no longer uses any
arguments. It just updates whatever loop it is for and loops back if it
hasn't reached the end of the array yet.

I have added the for command. It works much the same as the foreach
command, but it uses a different syntax, and it uses an array expression
instead of an array name. If you had in mind something like 'for x = 1 to
8', you would write it as 'for x range 1 8'.

I have added the sub, return, and gosub commands for using subroutines.
The sub and return commands mark the beginning and end of a subroutine.
The gosub command goes to a subroutine. To prevent the possibility of
infinite loops, the gosub command cannot be used from within a subroutine.

Antoine Fourrière wrote on Sun, Dec 5, 2004 08:30 PM UTC:
I have written a comprehensive postauto1 and postauto2 code (with perhaps a
few bugs) which covers the 16 possibilities for Chess With Different
Armies. (All there is to change in each preset is the title in 'game',
the initial setup in 'code' and two arrays for possible promotions in
'pregame'.) Would it be possible to refer to a common postauto1 entry and
a common postauto2 entry, instead of having to maintain 16 identical
postauto1 entries and 16 identical postauto2 entries?
It would also be useful when there are several presets for a same game.

🕸📝Fergus Duniho wrote on Sun, Dec 5, 2004 08:51 PM UTC:
You cannot store code for multiple games in a single file unless you plan on using the same game name. The feature you ask for is not needed when their are several presets of the same game, because those presets can already be made to use a common settings file. A settings file may be shared by presets so long as the game name remains the same.

🕸📝Fergus Duniho wrote on Mon, Dec 6, 2004 02:10 AM UTC:
I have removed the prevmove and prevfullmove functions, and I have replaced them with a thismove function. This one accurately does the job the others were intended for. It will return the text of the player's move, no matter whether it is called in the premove code or the postmove code.

🕸📝Fergus Duniho wrote on Tue, Dec 7, 2004 06:55 PM UTC:
Because of some changes I made to how Game Courier processes automation code, some presets are presently in need of debugging. Until now, the premove and postmove code would just be recopied for each new move, and Game Courier would go through all the code from start to finish. But now, Game Courier encapsulates the premove and postmove automation code into subroutines, and it puts all the moves and automation code into the form of a computer program, which it interprets. One more change I've made is in how endif works. It now works the same way as endifs. I had to make this change right away instead of waiting longer, because 'endif all' did not work as intended when inside of a subroutine. I expect most of the bugs will have to do with improperly placed 'endif' commands. For debugging purposes, Game Courier will let you view the program that it will run to update the board for a game. To see it, just add '&showcode=true' to the URL.

🕸📝Fergus Duniho wrote on Wed, Dec 8, 2004 04:38 PM UTC:
New additions to GAME Code, Game Courier's programming language, are the ability to include code from separate files, the ability to define one-line functions, similarly to how it's done in BASIC, the ability to use subroutines, and the ability to execute code in loops. With these changes, it will now be possible to create libraries of code that can be used for many presets, and that will make preset development both faster and easier.

🕸📝Fergus Duniho wrote on Thu, Dec 9, 2004 01:45 AM UTC:
After creating user defined functions, I discovered that my Polish Notation
calculator wouldn't let recursive functions work. So I came up with some
replacements for cond, called unless and onlyif. These work sort of like
cond but with only two arguments instead of three. The expression 'cond x
y z' is supposed to be equivalent to 'x ? y : z' but it evaluates both y
and z, making it unsuitable for recursion. It ends up creating an infinite
loop when used for recursion. Unlike previous functions in the PNC, unless
and onlyif can break out of it, allowing recursion loops to be exited. I
won't describe them in detail here, because I already did in the
documentation.

After creating these new functions, I realized the same principle could be
applied to logical operators. So I updated and, or, nand, and nor to use
either one or two arguments. When only one argument is available, these
operators will stop evaluation of the expression when the truth value of
the whole expression can be known from one value. For example, I can now
write code like this:

def Q checkride origin dest 1 1 or checkride origin dest 1 0;

This function would evaluate the Rook moves before the Bishop moves, and
if the Queen moved like a Rook, it would return true without bothering to
check whether it moved like a Bishop.

So, finally, logical operators can be used for flow control in
expressions. They can also be used for exiting from recursive functions.

🕸📝Fergus Duniho wrote on Thu, Dec 9, 2004 06:16 PM UTC:
I've now brought together the new features I've been developing to write
a new Chess preset in a new way. Most of the code is in an include file
and can be viewed here:

/play/pbm/includes/chess.txt

The code makes use of user-defined functions and subroutines. I am
currently using this new preset for the Chess preset with Abstract pieces.
I will begin using it for the others after I have tested it more
thoroughly.

🕸📝Fergus Duniho wrote on Sat, Dec 11, 2004 04:42 AM UTC:
I've debugged the code in the include file for Chess, and I've also made
it more generalized. I've included a castle subroutine that can make
castling much easier to implement, and I've generated arrays of which
pieces a Pawn may promote to out of the array of piece keys, which is
generated from the FEN code. I am now using this new version of the Chess
enforcement code for the Alfaerie JPG Chess preset as well as for the
Abstract Table preset.

/play/pbm/includes/chess.txt

With the improvements I've recently made to GAME Code, it may now have
the computing power to spot checkmate, but it will still take someone to
figure out how to do it. I have a general of how to go about it. First,
check if the King is in check. If it is, then loop through the King's
possible moves, checking if any are legal. If none are legal, identify the
checking pieces. If there is more than one checking piece, it is checkmate.
Otherwise, check if any piece can legally capture the checking piece. If it
can't be captured, check if any piece can legally move to block the check.

25 comments displayed

Earlier Reverse Order LaterLatest

Permalink to the exact comments currently displayed.