Commit graph

156 commits

Author SHA1 Message Date
Olivier Teulière
87e1d4795b Sorting the search results happens to be quite slow, often much slower than the search itself.
But we don't need to sort them all the time, and in general we don't even need to keep all the rounds.

This commit greatly improves the search performance by filtering the results in 3 different ways, depending on the context:
 - A limit to the number of results can be given (useful for the training mode). The kept results are the best ones, not the first ones found by the search.
 - When only the best round is needed (when the AI is playing with level 100, or when preparing the rack for an explosive game), we don't need to keep rounds with a lower score
 - When the AI has a level lower than 100, it is still possible to skip many rounds

The search limit in training mode is configurable (defaulting to 100) and can be deactivated.
2009-01-22 18:30:22 +00:00
Olivier Teulière
771ba0c35e New BoardSearch class to avoid carrying const parameters all over the place.
No functional change.
2009-01-17 14:57:32 +00:00
Olivier Teulière
8b9478542a - The core is now able to handle "explosive games" ("parties détonantes"). No interface uses this ability yet.
- Fixed a bug in Game::helperSetRackRandom()
2009-01-14 21:53:37 +00:00
Olivier Teulière
229f1fcc14 - Removed the RACK_MANUAL enum value, and the obsolete Training::setRack() method
- qt/board_widget.cpp: cosmetics
2009-01-11 14:20:35 +00:00
Olivier Teulière
5b1e228fb5 New command to handle the player points, useful to handle the end of a free game 2008-11-30 21:10:25 +00:00
Olivier Teulière
687a31bee8 The AI passes instead of changing letters when it has nothing to play 2008-11-30 21:09:37 +00:00
Olivier Teulière
81b44a8050 - When displaying an old turn, do not allow playing
- Turns start at 0 instead of 1, to indicate that nothing was played on the first turn
2008-11-30 21:08:29 +00:00
Olivier Teulière
06dd7dff71 Removed Game::back() 2008-11-30 21:07:19 +00:00
Olivier Teulière
67306bec3e Added auto-execution of commands when clearing future commands.
The goal is to automatically replay commands involving AI, so that the user cannot be 'blocked'.
2008-11-30 20:55:45 +00:00
Olivier Teulière
f6d7804847 - New PublicGame class, intended to be used by the interfaces instead of accessing Game directly
- Migrated the text, Qt and ncurses interfaces to the new PublicGame API.
2008-11-30 20:53:44 +00:00
Olivier Teulière
d4f4646b4f Get rid of Duplicate::prevHumanPlayer() and Duplicate::nextHumanPlayer() + cosmetics 2008-11-30 20:51:42 +00:00
Olivier Teulière
a79b71f028 When navigating in the history, display the current turn in the status bar 2008-11-30 20:51:05 +00:00
Olivier Teulière
c430d712b8 Improved debugging 2008-11-23 20:13:02 +00:00
Olivier Teulière
13f2e8daad - Really fixed duplicate games when noone plays a valid move
- Added a unit test to ensure it
 - Fixed Game::back() (this fixes some unit tests broken by a previous commit)
 - Added a unit test for a duplicate game with only one player
2008-11-23 18:18:02 +00:00
Olivier Teulière
fa225881c0 Do not allow navigating before the first turn, and do not count an empty turn as a real one when navigating.
The navigation in the history is now more natural.
2008-11-23 17:08:12 +00:00
Olivier Teulière
8e7c61e2d8 New command to handle changes of the current player. This fixes history navigation in free game mode 2008-11-23 17:07:42 +00:00
Olivier Teulière
e8cd922186 New Duplicate::MarkPlayedCmd command to change the "hasPlayed" status of a player, in duplicate mode 2008-11-23 17:06:44 +00:00
Olivier Teulière
9dc84ed963 - Duplicate: end turns after defining the new rack, not before
- FreeGame: create an additional turn after defining the initial rack
2008-11-23 17:05:13 +00:00
Olivier Teulière
b5c63ea6e3 Removed the useless return value of Game::start() 2008-11-23 17:04:40 +00:00
Olivier Teulière
40d25bd63a Handle the case when all players play an invalid move 2008-11-23 17:03:29 +00:00
Olivier Teulière
53cccd529e Added toString() methods to the commands to ease debugging 2008-11-23 17:02:33 +00:00
Olivier Teulière
7fa8c2b58f Removed experimental support of the real bag. It was not a good idea after all... 2008-11-23 16:58:31 +00:00
Olivier Teulière
675b534e77 - Fixed compilation in debug mode
- Centralized navigation in the game history in the Navigation class
 - The Qt interface now has (very) basic controls to navigate in the history.
2008-11-23 16:55:28 +00:00
Olivier Teulière
bce4ce4604 - The main game modifications (playing a move, setting a new rack, ...) are now done using the Command design pattern, which alows undoing these changes easily.
- Added support for navigation in the game history to the text interface (not unit-tested yet)
2008-11-23 08:18:03 +00:00
Olivier Teulière
4b766d2622 - Bumped version to 1.8-cvs
- Improved the error message when the dictionary cannot be loaded at startup
 - Updated the french translation
 - Made some Game fields private
 - Added more constness
2008-11-22 14:40:25 +00:00
Olivier Teulière
70be50c64e A lot of clean-up:
- 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/
2008-11-22 13:09:28 +00:00
Olivier Teulière
e3ef487ebb Sort the search result in a predictible way. The unit tests have been adapted accordingly. 2008-10-16 17:51:16 +00:00
Olivier Teulière
350666b568 - The last commit in cross.cpp fixed a bug but introduced another one, now both are fixed
- Added unit tests for both bugs
 - Fixed another bug preventing to enter some letters in the training rack
2008-10-15 19:43:23 +00:00
Olivier Teulière
fa5d97f942 - Be slightly more tolerant in release mode
- Prepare for release 1.7
2008-09-25 20:39:37 +00:00
Olivier Teulière
9498d044f8 - Install a desktop file to get an entry in the applications menu on Linux (works on both Gnome and KDE)
- 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
2008-09-22 21:21:38 +00:00
Olivier Teulière
a9626975e0 - Support shuffling the rack of the current player
- More intuitive players management (in particular when there are several
   human players)
2008-09-14 17:56:18 +00:00
Olivier Teulière
12cc41fce7 Core:
- Fixed a crash on Windows
 - Do not authorize words if the cross-checks are invalid (it was possible when playing a joker)
 - Fixed detextion of invalid moves
 - Improved unit tests, and fixed a bug in one of them

Qt interface:
 - Do not allow playing a word if the coordinates are missing
 - Better focus
2008-09-13 21:32:45 +00:00
Olivier Teulière
0696a1b4a2 Qt interface:
- Be more explicit if the dictionary name is missing
 - Changed the colour of the joker on the board, instead of displaying it in lower case
 - Incorrect words are now refused by default
 - Changed the way words are input: the case is no longer relevant,
   and the coordinates are in a separate control
 - Explain the problem when a word is refused
 - Updated the French translation
2008-09-07 21:06:17 +00:00
Olivier Teulière
990f4c5212 Qt interface:
- 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
2008-09-05 21:31:30 +00:00
Olivier Teulière
75a67b28a5 Dic:
- 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.
2008-08-31 11:48:11 +00:00
Olivier Teulière
fa493d4135 Fixed a warning 2008-07-27 15:26:15 +00:00
Olivier Teulière
7ea51d2f23 Compilation fixes for some systems (missing headers) 2008-07-20 12:15:51 +00:00
Olivier Teulière
597673e8e5 Fixed an invalid read when sorting the search results and adapted regression scenarii 2008-07-04 19:03:12 +00:00
Olivier Teulière
cc70ccabef Fixed typos 2008-07-03 20:14:46 +00:00
Olivier Teulière
c7f85ce151 - Search results with the same score are now sorted alphabetically
- Adapted test scenarii for the new order of results
2008-03-03 22:13:58 +00:00
Olivier Teulière
0acc5cd48f Do not try to complete the rack when no letter was removed 2008-02-12 21:02:39 +00:00
Olivier Teulière
52b7363888 Players are not created by the Game object anymore but by the user of the class.
This allows more flexibility, in particular to choose the type of player or its name.
2008-01-28 19:17:33 +00:00
Olivier Teulière
d8780822c2 - Fixed a bug due to the reject sign '-' preventing to load a saved training game
- Qt interface: Loading and saving a game is now supported (it only works in
   training mode, due to limitations in the core)
2008-01-26 10:10:50 +00:00
Olivier Teulière
0a4b342f78 - Players can now have a name
- 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)
2008-01-19 19:33:08 +00:00
Olivier Teulière
8c3708fa99 - Removed Game::setRackRandomOld() (replaced by Game::setRackRandom())
- Adapted regression scenarii
2008-01-15 14:56:38 +00:00
Olivier Teulière
572b31c64e - dic/encoding.cpp: simplification (this also removes a warning)
- game/rack.*: added a missing const
 - game/game_io.cpp: fixed a compilation warning
2008-01-11 10:09:26 +00:00
Olivier Teulière
7e7f7f2dfa - wxwin/mainframe.cc: Fixed a crash occurring when no config file is found
- Fixed a bug occurring in duplicate mode: sometimes the game ended too early,
   while it was still allowed to go on.
   Also updated the corresponding regression scenario
2008-01-10 10:23:36 +00:00
Olivier Teulière
81e980104f - Board::GetLetterMultiplier() and Board::GetWordMultiplier() are now static
- Added 2 convenient getters: Dictionary::getName() and Bag::getDic()
2008-01-09 10:48:19 +00:00
Olivier Teulière
ba230eda60 - Bumped version number to 1.6
- Used the -Wall option of automake, and fixed the reported warnings
 - Updated french translation
2008-01-08 16:09:08 +00:00
Olivier Teulière
e7a8d01a8d Merged the "cppdic" branch back into HEAD.
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)
2008-01-08 13:52:32 +00:00