Olivier Teulière
664eec36ed
New MoveSelector class, to help find the "best" move to play.
...
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.
2013-01-16 19:00:01 +01:00
Olivier Teulière
4e533eed27
Fix a small bug in explosive games.
...
Before this commit, if the top move did not need the blank tile, the
blank tile stayed in the rack. It is now replaced with another (randomly
selected) tile.
2013-01-16 18:04:57 +01:00
Olivier Teulière
83baec368b
Topping: give the score penalty directly with the player move.
...
This commit also adds a setting to disable the elapsed-time penalty.
2013-01-16 17:46:47 +01:00
Olivier Teulière
cdcb5c25b7
TurnData: remove the m_playerId member
2013-01-16 14:40:34 +01:00
Olivier Teulière
1e0de63ef8
Results: add a isEmpty() method, and use it where possible
2013-01-16 11:15:12 +01:00
Olivier Teulière
89b5f757ca
Topping: do not assign an empty move to the player immediately.
...
It is now done only after a timeout, to avoid the need to replace
this empty move when the player finds a top move.
2013-01-15 11:43:30 +01:00
Olivier Teulière
ec0cfb47fa
Topping: add a preference to set the penalty value in case of timeout
2013-01-14 17:13:48 +01:00
Olivier Teulière
7e9dab2e9b
Topping: keep track of the player score
2013-01-14 17:13:48 +01:00
Olivier Teulière
2db1732f7a
Board: allow one more type of invalid word when previewing a played word
2013-01-11 11:06:56 +01:00
Olivier Teulière
4111afc04c
RackWidget: after a drag & drop, notify the game that the rack has changed.
...
This allows synchronizing all the controls displaying the player rack
(visual and textual ones).
2013-01-09 18:56:25 +01:00
Olivier Teulière
7a6ca367fb
Game: remove a TODO
2013-01-09 18:52:11 +01:00
Olivier Teulière
0cdc2b7ab4
Rack: add operator==()
2013-01-09 18:52:11 +01:00
Olivier Teulière
7cd6313dac
Topping: integrate hints
2013-01-08 16:04:24 +01:00
Olivier Teulière
b5d175fc5b
Topping: use a different method to play the move.
...
This allows providing additional time information
2013-01-08 16:04:23 +01:00
Olivier Teulière
3f19d6ae49
Hints system, to retrieve partial information about a Move.
...
This is only the core part, no interface integration is done yet.
2013-01-08 16:04:23 +01:00
Olivier Teulière
fcb9fa572a
Game: make the constructor protected, to make the design clearer
2013-01-08 15:55:59 +01:00
Olivier Teulière
f1c2d3951d
GameFactory: remove the useless releaseGame() method
2012-12-30 16:38:07 +01:00
Olivier Teulière
76fefdf71d
New "master game" feature.
...
When a master game is defined, the racks and moves played from the
current game will be the same as in the master game. This can be
practical to replay a game in a different mode, or to replay at home a
duplicate game played in a club, for example.
2012-12-30 16:38:07 +01:00
Olivier Teulière
86ed14f75e
Move: add operator==()
2012-12-30 16:13:45 +01:00
Olivier Teulière
62d46c875f
Round: add operator==()
2012-12-30 16:13:31 +01:00
Olivier Teulière
ac0abba535
Topping: new widget dedicated to topping mode.
...
It is currently very ugly, and quite buggy...
2012-12-29 19:36:38 +01:00
Olivier Teulière
57a2c0690f
Topping: keep track of all the moves played by the player.
...
The timing information is currently not used at all.
2012-12-29 17:51:52 +01:00
Olivier Teulière
681a7b28cb
New topping mode (very beginning)
2012-12-29 17:51:16 +01:00
Olivier Teulière
5441007db1
New BoardLayout class to wrap the board layout (size and special squares).
...
Until now there is no user-visible change, but it should make it much
easier to add custom layouts.
2012-12-29 17:50:18 +01:00
Olivier Teulière
c138947138
Move Duplicate::setGameAndPlayersRack() to Game
2012-12-29 17:49:25 +01:00
Olivier Teulière
fb8e464d7c
Display the word being played on the board
2012-12-29 17:46:18 +01:00
Olivier Teulière
2c3cb83e0a
Allow more types of invalid input when previewing a move being played
2012-12-29 17:46:18 +01:00
Olivier Teulière
8d85df630b
PlayModel now uses a Move internally
2012-12-29 17:46:18 +01:00
Olivier Teulière
8acebbc889
Game::checkPlayedWord() now takes a Move instead of a Round
2012-12-29 17:46:18 +01:00
Olivier Teulière
dc3535c953
Coord: do not refuse lowercase coordinates.
...
It fixes a regression introduced in bedcc56
.
2012-12-29 17:46:17 +01:00
Olivier Teulière
d55b3b2bdf
Use toLower() and toUpper()
2012-12-29 17:46:17 +01:00
Olivier Teulière
05605a63ae
Coord: remove useless code
2012-12-29 17:46:17 +01:00
Olivier Teulière
0097519e96
Turn: new findAllMatchingCmd() utility method
2012-12-29 17:44:39 +01:00
Olivier Teulière
bedcc561f3
Coord: do not accept invalid strings starting with valid coordinates
2012-12-18 16:03:44 +01:00
Olivier Teulière
19a93988ad
Arbitration: new option to handle solos automatically.
...
The option is not yet accessible from the interface.
2012-12-05 23:56:20 +01:00
Olivier Teulière
4d38c99336
Move Arbitration::getPlayerEventCmd() into Duplicate
2012-12-05 22:05:31 +01:00
Olivier Teulière
8b3d6b9872
Use BOOST_FOREACH instead of an index-based loop
2012-12-05 21:23:25 +01:00
Olivier Teulière
e34cc25fe1
Move commands to the game/cmd/ sub-directory.
...
The abstract Command class (from which all the others inherit)
is still game/, to hide the cmd/ subdir from most clients.
2012-12-05 20:26:47 +01:00
Olivier Teulière
7832866652
Fixed compilation errors with newer g++ versions
2012-11-21 20:16:56 +01:00
Olivier Teulière
81f2507181
Arbitration: fix a bug when a word is checked manually.
...
The check didn't verify that it is actually possible to play the word
with the current rack.
2012-11-13 12:38:26 +01:00
Olivier Teulière
8858c54656
Minor cosmetics changes (more C++-like)
2012-10-24 15:23:59 +02:00
Olivier Teulière
08c3f2ccb2
Arbitration: when loading a saved game, make PlayerMoveCmd auto-executable.
...
This is not very clean, but without this the played moves of past turns
are not visible. This commit also fixes a test with was incorrect.
2012-10-24 11:11:24 +02:00
Olivier Teulière
34ed25e9e9
Saved games: save some statistics (not used when loading the game)
2012-10-24 00:32:48 +02:00
Olivier Teulière
c748d02950
Saved games: use the real player ID, not a modified one
2012-10-24 00:32:24 +02:00
Olivier Teulière
cf22315fd0
Saved games: improve an error message to give the context
2012-10-24 00:32:15 +02:00
Olivier Teulière
ef14d5e9d6
Saved games: use camelCase for attribute names
2012-10-24 00:31:51 +02:00
Olivier Teulière
b76f48f545
Save games: save and restore the table numbers
2012-10-22 17:35:29 +02:00
Olivier Teulière
c7831a28bd
Do not specify template parameters when it is useless
2012-10-13 00:50:44 +02:00
Olivier Teulière
f6ced69c9e
Make sure some class members are initialized (bugs reported by Coverity)
2012-10-11 23:21:32 +02:00
Olivier Teulière
0fa1c79563
Add myself to the authors, and fix some copyright headers
2012-10-11 13:45:24 +02:00