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
This display string is used in the ncurses and Qt interfaces.
Display strings are types "wdstring" instead of plain "wstring" in a few places (not all of them) to help recognize them.
- 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/
- Throw an exception if a regular expresison is invalid
- Handle the exception in callers code
Game:
- Fixed a bug in setRackRandom()
Qt interface:
- Display the dictionary name in the status bar
- Implemented printing
- Translation of the interface into French. The menus have temporarily lost their accelerator keys in English.
- regexp search results are now in uppercase, like other results
- the regexp search indicates if there are more results than the maximum
allowed
Qt interface:
- new window with some dictionary tools: check word, word+1 and regexp search
- New regexp parser using Boost.Spirit. Lex and yacc are now gone.
The main advantage of this new parser, apart from being purely C++,
is that it can handle wide characters.
Currently, the new parser does the same as the previous one, but the
code is not yet ready to use regular expressions with non-ASCII
dictionaries.
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)
- add doxygen file description
- revert Dic_chr / board_search patch
returning the character instead of the code
was a HUGE performance penalty
The dictionary must use codes, the board must be
made to use codes instead of dic using tiles.
- add Dic_char and Dic_char_lookup as temporary
fixes for board_search. Should modify Board and Cross class
instead.
- create dic_code_t type
Dic_lookup takes a string containing real chars, not codes.
The idea is to hide the internal representation of the characters from the
users of the dictionary, who don't care about it.
- '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.