The best move has the highest possible score, but it is also the one
leading to the most interesting game. This is a subjective notion, but
some heuristics can help, such as:
- a move sparing a blank is better than one using it
- a move with many prefixes and suffixes is better than one without
extensions
- a move "opening" the game is better than one blocking it
- a move leaving a nice rack is better than one leaving "bad" letters
At the moment, only the first heuristic is implemented.
It is mostly working, but many things are still missing.
In particular:
- ability to enter (or change) moves for a past turn
- ability to change the rack (manually, or randomly)
- ability to add/remove players during the game
- support for solos, warnings, penalties
- support for table number
- more ergonomic interface
- non regression tests
- ... and probably bugs to fix
Status:
It works well, but there are still a few details to improve/fix
More details about the changes:
- New dependency on Arabica and Libxml2 to parse the XML
- Loading the old format is still supported for this release, but won't be supported anymore in the next one
- Games are now only saved in the new format
- In training mode, the player is now created externally, like in the other modes
- Avoid using GameIO (the one from game/) whenever possible
- Do not use a FILE* argument anymore when loading a game
- Throw and catch exceptions correctly when a game cannot be loaded or saved
- The non-regression tests now use a new method to print the game history
- New PlayWordMediator class, to encapsulate the behaviour of the controls
used to play a word
- The Training mode now has input fields to play words directly, without
choosing them in the search results
- Removed logiv from the History class
- Used BOOST_FOREACH to simplify loops
- Remove useless annotations and doxygen blocks
- Added some constness
- Marked Training::setRack() as deprecated
- Improved compilation order in game/
- New (optional) dependency on the libconfig library, to save/load configuration files.
- On Unix, the location of the configuration file respects the XDG Base Directory Specification.
- The contrib system automatically fetches and builds libconfig for Windows cross-compilation
- Fixed make distcheck
- Initialize the random numbers generator, and print the seed value
- Handle properly Qt builds without STL support
- Save the position of the main window
- Got rid of the useless toolbar
- Better size of the preferences dialog
- Hopefully fixed translation issues on Windows
- The Settings class throws an exception when asked for a non-existing setting
- Use player names in the ncurses interface
- In training mode, create the hidden player in the constructor, not in start()
- When the AI has nothing to play, change the letters instead of simply passing
- New Makefile to build the win32 dependencies automatically (INSTALL file updated)
There are too many change to list properly, here is an overview of the main changes:
- the dictionary is now in C++
- the dictionary has a new format, where it is possible to specify the letters,
their points, their frequency, ... It is backwards compatible.
- Eliot now supports non-ASCII characters everywhere
- i18n of the compdic, listdic, regexpmain binaries
- i18n of the wxWidgets interface (now in english by default)
This simplifies the code in many places, and allows inheritance of the
game mode classes (Training, Duplicate and FreeGame).
- A Tile is no more an unsigned char, but a class: it should help supporting
i18n of the game. The Dic library still uses unsigned chars though.
- Improved the configure script, to enable/disable the compilation of some
interfaces.
- Added a ncurses interface, much nicer than the text one. The game mode and
the number of players are currently hardcoded, it is not possible to change
them interactively (yet).
- Repaired the save/load functions.
NOTE: The wxWindows interface compiles, but is completely broken. I'm afraid it
needs a full rewrite (to support the various game modes in particular).
- 'Training' mode: same behaviour as before
- 'Duplicate' mode: all the players (who can be human players or AI
players) have the same rack, and the best word is played on the
board
- 'Free game' mode: the players (human or AI) have different racks,
and they play one after another
Status:
- Core: the main functions are written, but the API could be more
homogeneous between the different modes.
- Interfaces: the text interface is almost up-to-date, but the
wxwindows one only supports Training mode.
- AI: Currently, AI players always play the best word, which is
optimal in Duplicate mode but not in FreeGame mode. Other strategies
will be written in the future.
- Handling of saved games is broken: a game can be saved and loaded,
but no information about the mode and the players is stored, so it
crashes whatever you do after loading the game.