[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [pbmserv-dev] source code
On Fri, Mar 29, 2002 at 01:38:15PM -0500, Lyman Hurd wrote:
> Sorry to jump in with stupid questions. I take it there is an API for game
> development? Where does one download source? Is the source code for
> existing games similarly available?
For those of you who have an interest in implementation of pbmserv
modules...
My PBeM Server is implemented as a series of scripts/commands.
When mail is received by pbmserv@gamerz.net, it looks for the subject
line to tell it what to do. If it is not an administrative command
(signup, change password, list, etc.) it looks to see if it has a
games of that type defined (currently trax and twixt). If so, it
executes the command specified by the subject line.
The PBeM server script also sets a couple of environment variables
that are inheritied by the game commands: INPUTFILE name of the file
containing the message being processed LOGFILE name of a log file
SENDER email address of the sender FROM Name of the sender (if known)
The pbmserv script itself is written in perl.
Subject: fetch.2 pbmserv.pl
will retrieve the script.
It is up to the individual game implementations to keep track of
whatever they need. However, Soren and I have implemented a series of
C++ classes that will make implementation of additional pbmserv
modules easy.
All PBeM stuff is located under the $PBMHOME directory
$PBMHOME
/etc misc PBeM files
/bin command executables
/games
/Ataxx
/Trax
etc.
/history history files
/ratings ratings files
/standings standings files (for tournaments)
/help help files
/src source code
/src.2 source code (for the 2nd generation pbmserv cod
e)
All games *must* support a 'list' command to show what games are
on-line (both current and recent past). 'show' and 'preview' commands
are nice. 'standings' is also nice. 'challenge' allows two players to
begin a game. Most of these commands are handled by the generic "Game"
class. The important parts are
Init() -- initialize the board
MakeMove() -- validate the move, and apply it to the board
PrintBoard() -- display the board
IsGameOver() -- is the game over? who won?
MustSkip() -- can the current player make a move?
ForcedMove() -- is the current move forced? if so, what is it?
To get a sample implementation (Ataxx is a good example), send pbmserv
a fetch.2 request...
Subject: fetch.2 game.h game.cpp board2d.h board2d.cpp ataxx.h ataxx.cp
p
Known bugs in the current implementation include 1st move resignation
not resulting in a board "cancellation", and simultaneous move
forfeits are not necessary handled correctly.
--Richard
apache_pb.gif (2326 bytes)
--
/ \__ | Richard Rognlie / Sendmail Ninja / Gamerz.NET Lackey
\__/ \ | http://www.gamerz.net/rrognlie/ <rrognlie@gamerz.net>
/ \__/ | No trees were killed in the sending of this message.
\__/ | However, a great many instructions were executed.