Reversi - Version History
|
|
This list gives an overview of the evolution of my little
Reversi applet.
- Version 2.4 - Aug 05, 2000
- Moved the applet to my new web space. Bundled as a JAR file. New
features in the user interface:
- Copyright notice
- The applet sets its background color to whatever is given in
the "backgroundColor" parameter.
- "Show possible moves" checkbox and display implemented.
- Implemented the indication of the computer's last move (the
small cross).
Aug 06, 2000:
- The precomputed edge table is now gzipped, reducing its size
from 44kB to a mere 16kB, which speeds up starting the applet.
Aug 07, 2000:
- Included the binary data of the images used for the display of
the board in a Java class. The separate GIFs in directory
images
are no longer used. The advantages of doing
this are that first, we don't have to download each image
separately, and second, the images are available when they need
to be drawn. (Previous versions of the applet would sometimes
draw empty white squares upon start-up, because Java's asynchronous
image downloading hadn't delivered any data for the image yet. This
no longer can happen.) Note: simply including the images
directory in the JAR file made the normal getImage
method
fail on Netscape 4.72; it worked only in IE4.0. Hence this workaround,
which will always work.
- Version 2.3 - Nov 25, 1997
- Previous versions got mighty confused when multiple instances of the
applet ran within the same browser. (For instance, if you opened two
windows in Netscape, both running the applet.) This should work fine
now.
Dec 3, 1997:
- I noticed that the applet lost quite a few games on level
"Amateur" against greedy players through an early wipe-out.
The special hack from Oct 30, 1996
is now also active on level "Amateur" in an attempt to
avoid this.
Apr 12, 1999:
- Disabled the high-score list. (I'm moving, and I don't want to
keep CGI scripts running on my former employer's server.)
- Version 2.2 - Nov 17, 1997
- I noticed that some people (in particular, one person calling itself
"c.x.") filled the high-score
list with their entries, crowding everyone else out. Since I
didn't like this, I changed the applet and my CGI scripts to retain
only the three best entries of a particular player.
Nov 20, 1997:
- The applet now chooses randomly between the diagonal and the
perpendicular opening. Until now, I just let it choose its
first move through the normal lookahead, but this made it
always play the perpendicular opening. On the average, the
applet will choose the diagonal opening in 25% of the games.
- Version 2.1 - Nov 14, 1996
- New additional component in the evaluation function: in the middle game,
the applet now also considers mobility per region of the board. Seems to
make it play slightly better except on level "Easy".
Nov 15, 1996:
- Minor modifications: Added "close" button to error pop-up window.
Also, high score list entries cannot be made anymore if the table
could not be loaded.
Apr 05, 1997:
- Minor correction in the CGI script that maintains the statistics:
This script did not produce any output, which confused our
HTTP daemon. It newly writes some dummy output. (I noticed this
error because the daemon's error log had grown tremendously,
and also there were a couple of daemon processes around that
seemed to be looping. Maybe this was the cause for some of the
sporadic and non-repeatable bugs a few people reported.)
- Version 2.0 - Oct 12, 1996
- Major improvements: speed tuning (the game
engine isn't object-oriented anymore, which alone brings a speed
improvement of about 50%), corrected some bugs in the algorithm and the
table of edge configurations, improved the evaluation function. The
applet also displays its moves one after the other when the user has
to pass instead of showing them all at once. (This behavior in V1.4 was
due to threading problems of Java implementations on Solaris 2.5.)
Oct 17, 1996:
- Migration from Netscape 2.0 to 3.0: suddenly got "Security
Violation Exceptions" in Netscape 3.0! Workaround: the applet
catches and ignores them (they only occur when calling
Thread.suspend () or Thread.resume ()).
Oct 26, 1996:
- Corrected a couple of errors in my edge table: some edge
configurations were completely misjudged, making the applet
play rather poorly sometimes. Fixed now.
Oct 30, 1996:
- We changed the computer our web server resides on. High score
entries didn't work properly between 11am and 3pm local time.
In the course of the server change, I also modified the sorting
criterion for the high-score list: It sorts by effective search
depth, and then by the difference of discs. No other criteria
are used anymore, since they're already accounted for in the
effective search depth.
- Special hack for the weaker levels: my evaluation function
sometimes got the applet into trouble against greedy players.
It would give up all but one of its discs (high mobility as
compared to the opponent), but would then be forced to play very
bad moves to avoid a wipe-out! This happened only on levels below
"Amateur", the higher levels look ahead far enough to recognize
and avoid such situations. Newly, positions in which the applet
has less than three discs (except at the very beginning, of course)
get a very low mobility rating to make the applet avoid such
situations even with only a very shallow look-ahead. This seems to
work quite well.
- Version 1.4 - Sep 26, 1996
- Added option to let the computer play black, i.e. to make it make the
first move. Cleaned up interface (centering of strings). Displays the
search depth for each move now. High-score list now includes color
(the one the user played!)
Sep 27, 1996:
- The applet now remembers the data entered the first time in the
high score entry box, so the user doesn't have to retype this
information.
- Version 1.3 - Sep 20, 1996
- Added high score list plus the necessary CGI scripts on the server
side.
Sep 23, 1996:
- Minor correction in high score display (timouts were displayed
wrongly), added date.
- Corrected minor error in game engine (didn't always correctly
recognize wipe-outs even when it should have.)
Sep 24, 1996:
- Added user's home page URL in high score entry box and adapted
the CGI scripts.
- Corrected the initial position: the white discs must be on the
diagonal top-left to bottom-right. I had it reversed. Shame on
me!
Sep 25, 1996:
- Minor modification of edge table after the first game against
Jothello 3.1m3. Operation successful: the second game against
that same applet was won 13 - 51!
Sep 26, 1996:
- Default setting is "Beginner", timeout on level "Amateur" cannot
be smaller than 1 minute, on level "Expert" not smaller than
2 minutes. Maximum timeout is 30 seconds for level "Easy" and
1 minute for level "Beginner" (higher timeouts make no sense on
these levels).
- Changed sort order in high score list: first sorting criterion is
the effective search depth. (I.e., minimum look-ahead during a
game.)
Both measures are a direct consequence of somebody playing on level
"Expert" with a timeout of 30 seconds and winning 53 - 11: with only
30 seconds, the "Expert" level cannot play better than "Beginner"
level - it just doesn't have time enough to do more than a very
shallow look-ahead.
- Version 1.2 - Sep 18, 1996
- Slightly improved table. Has a minor effect on higher levels, but
makes especially level "Easy" avoid some all too obvious blunders.
- Version 1.1 - Sep 13, 1996
- Much improved version. Incorporated corner count in the evaluation
function, cleaned up internal structure of the applet (much more
object-oriented now). Added time-out button.
- Version 1.0 - Aug 30, 1996
- First Java implementation - a quick and dirty port from C to Java,
with some simplifications in the evaluation function to keep the
size of the applet manageable.
- Version 0.1 - April 9, 1993
- Original C version, implemented on a Mac. No graphical interface,
since I was more interested in the game engine, this version only
had a simple character interface.