[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Eliot-dev] eliot TODO configure.in dic/automaton.h dic/dic...
From: |
Olivier Teulière |
Subject: |
[Eliot-dev] eliot TODO configure.in dic/automaton.h dic/dic... |
Date: |
Sun, 29 Nov 2009 16:01:35 +0000 |
CVSROOT: /cvsroot/eliot
Module name: eliot
Changes by: Olivier Teulière <ipkiss> 09/11/29 16:01:34
Modified files:
. : TODO configure.in
dic : automaton.h dic.h dic_exception.h
dic_internals.h encoding.cpp encoding.h
grammar.cpp grammar.h header.cpp header.h
regexp.h tile.h
extras/contrib : Makefile
game : Makefile.am ai_percent.cpp ai_percent.h
ai_player.h bag.cpp bag.h board.cpp board.h
board_search.h command.h coord.cpp coord.h
cross.cpp cross.h debug.h duplicate.cpp
duplicate.h freegame.cpp freegame.h game.cpp
game.h game_exception.cpp game_exception.h
game_factory.cpp game_factory.h game_io.cpp
game_move_cmd.cpp game_move_cmd.h history.h
matrix.h move.cpp move.h navigation.cpp
navigation.h player.h player_move_cmd.h
player_points_cmd.h player_rack_cmd.h pldrack.h
public_game.cpp public_game.h rack.h results.h
round.h settings.h training.cpp training.h
turn.h turn_cmd.h
qt : Makefile.am main_window.cpp new_game.cpp
test : driver duplicate_1_player.ref
duplicate_2_ai.ref
duplicate_explosive_variant.ref
duplicate_humans_ai.ref
duplicate_invalid_turn.ref
duplicate_joker_variant.ref
duplicate_navigation.ref duplicate_no_point.ref
freegame_3_ai.ref freegame_change.ref
freegame_explosive_variant.ref
freegame_joker_variant.ref
freegame_navigation.ref freegame_passing.ref
freegame_play.ref load_game.ref
load_saved_game.ref training_joker.input
training_joker.ref training_joker_variant.ref
training_navigation.ref training_rosace.input
training_rosace.ref
utils : Makefile.am eliottxt.cpp game_io.cpp game_io.h
ncurses.cpp ncurses.h
Added files:
game : mark_played_cmd.cpp mark_played_cmd.h
xml_reader.cpp xml_reader.h xml_writer.cpp
xml_writer.h
Removed files:
test : rosace training_joker2.input
training_joker2.ref
Log message:
Support saving/loading games (any game type) in XML format.
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
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/eliot/TODO?cvsroot=eliot&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/eliot/configure.in?cvsroot=eliot&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/automaton.h?cvsroot=eliot&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/dic.h?cvsroot=eliot&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/dic_exception.h?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/dic_internals.h?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/encoding.cpp?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/encoding.h?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/grammar.cpp?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/grammar.h?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/header.cpp?cvsroot=eliot&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/header.h?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/regexp.h?cvsroot=eliot&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/eliot/dic/tile.h?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/extras/contrib/Makefile?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/game/Makefile.am?cvsroot=eliot&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/eliot/game/ai_percent.cpp?cvsroot=eliot&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/eliot/game/ai_percent.h?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/ai_player.h?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/game/bag.cpp?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/bag.h?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/board.cpp?cvsroot=eliot&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/eliot/game/board.h?cvsroot=eliot&r1=1.20&r2=1.21
http://cvs.savannah.gnu.org/viewcvs/eliot/game/board_search.h?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/game/command.h?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/game/coord.cpp?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/coord.h?cvsroot=eliot&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/eliot/game/cross.cpp?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/game/cross.h?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/game/debug.h?cvsroot=eliot&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/eliot/game/duplicate.cpp?cvsroot=eliot&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/eliot/game/duplicate.h?cvsroot=eliot&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/eliot/game/freegame.cpp?cvsroot=eliot&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/eliot/game/freegame.h?cvsroot=eliot&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game.cpp?cvsroot=eliot&r1=1.57&r2=1.58
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game.h?cvsroot=eliot&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_exception.cpp?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_exception.h?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_factory.cpp?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_factory.h?cvsroot=eliot&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_io.cpp?cvsroot=eliot&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_move_cmd.cpp?cvsroot=eliot&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/eliot/game/game_move_cmd.h?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/game/history.h?cvsroot=eliot&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/eliot/game/matrix.h?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/game/move.cpp?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/game/move.h?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/game/navigation.cpp?cvsroot=eliot&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/eliot/game/navigation.h?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/game/player.h?cvsroot=eliot&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/eliot/game/player_move_cmd.h?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/game/player_points_cmd.h?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/game/player_rack_cmd.h?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/game/pldrack.h?cvsroot=eliot&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/eliot/game/public_game.cpp?cvsroot=eliot&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/eliot/game/public_game.h?cvsroot=eliot&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/eliot/game/rack.h?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/results.h?cvsroot=eliot&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/eliot/game/round.h?cvsroot=eliot&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/eliot/game/settings.h?cvsroot=eliot&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/eliot/game/training.cpp?cvsroot=eliot&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/eliot/game/training.h?cvsroot=eliot&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/eliot/game/turn.h?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/game/turn_cmd.h?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/game/mark_played_cmd.cpp?cvsroot=eliot&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/eliot/game/mark_played_cmd.h?cvsroot=eliot&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/eliot/game/xml_reader.cpp?cvsroot=eliot&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/eliot/game/xml_reader.h?cvsroot=eliot&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/eliot/game/xml_writer.cpp?cvsroot=eliot&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/eliot/game/xml_writer.h?cvsroot=eliot&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/Makefile.am?cvsroot=eliot&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/main_window.cpp?cvsroot=eliot&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/new_game.cpp?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/test/driver?cvsroot=eliot&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_1_player.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_2_ai.ref?cvsroot=eliot&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_explosive_variant.ref?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_humans_ai.ref?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_invalid_turn.ref?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_joker_variant.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_navigation.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/duplicate_no_point.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_3_ai.ref?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_change.ref?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_explosive_variant.ref?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_joker_variant.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_navigation.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_passing.ref?cvsroot=eliot&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/eliot/test/freegame_play.ref?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/load_game.ref?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/test/load_saved_game.ref?cvsroot=eliot&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker.input?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker.ref?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker_variant.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_navigation.ref?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_rosace.input?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_rosace.ref?cvsroot=eliot&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/eliot/test/rosace?cvsroot=eliot&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker2.input?cvsroot=eliot&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/eliot/test/training_joker2.ref?cvsroot=eliot&r1=1.9&r2=0
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/Makefile.am?cvsroot=eliot&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/eliottxt.cpp?cvsroot=eliot&r1=1.39&r2=1.40
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/game_io.cpp?cvsroot=eliot&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/game_io.h?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/ncurses.cpp?cvsroot=eliot&r1=1.33&r2=1.34
http://cvs.savannah.gnu.org/viewcvs/eliot/utils/ncurses.h?cvsroot=eliot&r1=1.8&r2=1.9
Patches:
Index: TODO
===================================================================
RCS file: /cvsroot/eliot/eliot/TODO,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- TODO 22 Feb 2009 16:43:55 -0000 1.9
+++ TODO 29 Nov 2009 16:01:31 -0000 1.10
@@ -2,10 +2,6 @@
====
- Improve error handling (use exceptions more)
- - Correct game save/load functions: Advanced format
- file saving for freegames and duplicate need a serious
- rewrite. We need to specify a file format that can handle
- all the information contained in a multiplayer game.
- getopt support for all the interfaces (only ncurses is done)?
- detection of blocked positions?
- distinguish misplaced and incorrect words?
@@ -13,10 +9,10 @@
Requested by users
==================
- - Save/load games (03/02/09)
- Drag & drop? (03/02/09)
- Continue a real game on Eliot (03/02/09)
- In duplicate mode, display the rack in the External board (19/02/09)
+ - Tiles on the rack more similar to the ones on the board
(http://www.prise2tete.fr/forum/viewtopic.php?id=4956)
Implementation details
======================
@@ -25,8 +21,6 @@
- board.h included in coord.cpp!
- use Boost.Format?
- compile with -ansi -pedantic by default?
- - use Boost.Unorderedinstead of the custom hash map, when Boost 1.36
- is in Ubuntu
Not so urgent
=============
Index: configure.in
===================================================================
RCS file: /cvsroot/eliot/eliot/configure.in,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- configure.in 28 Sep 2009 18:21:28 -0000 1.38
+++ configure.in 29 Nov 2009 16:01:31 -0000 1.39
@@ -113,6 +113,13 @@
AC_DEFINE(HAVE_LIBCONFIG, 1, [Define to 1 if you have the
libconfig library])],
[has_libconfig=0])
+dnl Check for arabica and libxml2
+PKG_CHECK_MODULES(ARABICA, [arabica], [],
+ [AC_MSG_ERROR([Could not find Arabica on your system (using
pkg-config)])])
+
+PKG_CHECK_MODULES(LIBXML2, [libxml-2.0], [],
+ [AC_MSG_ERROR([Could not find libxml2 on your system (using
pkg-config)])])
+
dnl Check for ncurses
dnl We enable it if asked by the user, or if ncursesw is found
AC_ARG_ENABLE([ncurses],AC_HELP_STRING([--enable-ncurses],
Index: dic/automaton.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/automaton.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- dic/automaton.h 27 Jul 2008 15:28:50 -0000 1.14
+++ dic/automaton.h 29 Nov 2009 16:01:31 -0000 1.15
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _DIC_AUTOMATON_H_
-#define _DIC_AUTOMATON_H_
+#ifndef DIC_AUTOMATON_H_
+#define DIC_AUTOMATON_H_
class AutomatonHelper;
struct searchRegExpLists;
Index: dic/dic.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/dic.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- dic/dic.h 21 Sep 2009 20:10:34 -0000 1.26
+++ dic/dic.h 29 Nov 2009 16:01:31 -0000 1.27
@@ -19,9 +19,10 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _DIC_H_
-#define _DIC_H_
+#ifndef DIC_H_
+#define DIC_H_
+#include <stdint.h>
#include <string>
#include <vector>
#include <map>
Index: dic/dic_exception.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/dic_exception.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- dic/dic_exception.h 31 Aug 2008 11:48:13 -0000 1.3
+++ dic/dic_exception.h 29 Nov 2009 16:01:31 -0000 1.4
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _DIC_EXCEPTION_H_
-#define _DIC_EXCEPTION_H_
+#ifndef DIC_EXCEPTION_H_
+#define DIC_EXCEPTION_H_
#include <exception>
#include <string>
Index: dic/dic_internals.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/dic_internals.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- dic/dic_internals.h 22 Nov 2008 13:11:48 -0000 1.11
+++ dic/dic_internals.h 29 Nov 2009 16:01:31 -0000 1.12
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _DIC_INTERNALS_H_
-#define _DIC_INTERNALS_H_
+#ifndef DIC_INTERNALS_H_
+#define DIC_INTERNALS_H_
#include <stdint.h>
#include "config.h"
Index: dic/encoding.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/encoding.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- dic/encoding.cpp 23 Oct 2009 20:01:49 -0000 1.11
+++ dic/encoding.cpp 29 Nov 2009 16:01:31 -0000 1.12
@@ -223,10 +223,12 @@
if (n == -1)
{
ostringstream ss;
- ss << "truncAndConvert: non printable character: " << iWstr[pos];
// XXX: Should we throw an exception instead? Just ignore the
problem?
+#if 0
+ ss << "truncAndConvert: non printable character: " << iWstr[pos];
cerr << ss.str() << endl;;
//throw DicException(ss.str());
+#endif
return convertToMb(iWstr);
}
if (width + n > iMaxWidth)
@@ -249,10 +251,12 @@
if (n == -1)
{
ostringstream ss;
- ss << "truncAndConvert: non printable character: " << wstr[pos];
// XXX: Should we throw an exception instead? Just ignore the
problem?
+#if 0
+ ss << "truncAndConvert: non printable character: " << wstr[pos];
cerr << ss.str() << endl;;
//throw DicException(ss.str());
+#endif
return convertToMb(wstr);
}
if (width + n > iWidth)
@@ -277,10 +281,12 @@
if (n == -1)
{
ostringstream ss;
- ss << "padAndConvert: non printable character: " << iWstr[i];
// XXX: Should we throw an exception instead? Just ignore the
problem?
+#if 0
+ ss << "padAndConvert: non printable character: " << iWstr[i];
cerr << ss.str() << endl;;
//throw DicException(ss.str());
+#endif
return convertToMb(iWstr);
}
width += n;
@@ -309,10 +315,12 @@
if (n == -1)
{
ostringstream ss;
- ss << "padAndConvert: non printable character: " << iWstr[i];
// XXX: Should we throw an exception instead? Just ignore the
problem?
+#if 0
+ ss << "padAndConvert: non printable character: " << iWstr[i];
cerr << ss.str() << endl;;
//throw DicException(ss.str());
+#endif
return convertToMb(iWstr);
}
width += n;
@@ -441,3 +449,27 @@
#endif
}
+
+string writeInUTF8(const wstring &iWString, const string &iContext)
+{
+ // Temporary buffer for output
+ // Each character will take at most 4 bytes in the UTF-8 string
+ unsigned int bufSize = iWString.size() * 4;
+ char *buf = new char[bufSize];
+ unsigned int number;
+ try
+ {
+ number = writeInUTF8(iWString, buf, bufSize, iContext);
+ }
+ catch (...)
+ {
+ // Make sure not to leak
+ delete[] buf;
+ throw;
+ }
+ // Copy the string
+ string res(buf, number);
+ delete[] buf;
+ return res;
+}
+
Index: dic/encoding.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/encoding.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- dic/encoding.h 23 Jun 2009 21:36:33 -0000 1.4
+++ dic/encoding.h 29 Nov 2009 16:01:31 -0000 1.5
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _ENCODING_H_
-#define _ENCODING_H_
+#ifndef ENCODING_H_
+#define ENCODING_H_
#include <string>
@@ -120,5 +120,15 @@
unsigned int writeInUTF8(const wstring &iWString, char *oBuffer,
unsigned int iBufSize, const string &iContext);
+/**
+ * Same as the other writeInUTF8 function, dealing with a string
+ * instead of a char*. Note that it performs an additional copy
+ * of the output string...
+ * @param iWString: the wide string to encode
+ * @param iContext: free text used in case of exception
+ * @return: the converted string
+ */
+string writeInUTF8(const wstring &iWString, const string &iContext);
+
#endif
Index: dic/grammar.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/grammar.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- dic/grammar.cpp 22 Nov 2008 13:11:48 -0000 1.6
+++ dic/grammar.cpp 29 Nov 2009 16:01:31 -0000 1.7
@@ -20,11 +20,11 @@
#include <string>
#include <stack>
-#include <boost/spirit/core.hpp>
-#include <boost/spirit/utility/chset.hpp>
-#include <boost/spirit/tree/ast.hpp>
+#include <boost/spirit/include/classic_core.hpp>
+#include <boost/spirit/include/classic_chset.hpp>
+#include <boost/spirit/include/classic_ast.hpp>
#ifdef DEBUG_RE
-#include <boost/spirit/tree/tree_to_xml.hpp>
+#include <boost/spirit/include/classic_tree_to_xml.hpp>
#include <map>
#include <iostream>
#endif
@@ -33,7 +33,7 @@
#include "header.h"
#include "regexp.h"
-using namespace boost::spirit;
+using namespace boost::spirit::classic;
using namespace std;
// A few typedefs to simplify things
Index: dic/grammar.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/grammar.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- dic/grammar.h 27 Jul 2008 15:28:51 -0000 1.2
+++ dic/grammar.h 29 Nov 2009 16:01:31 -0000 1.3
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _GRAMMAR_H_
-#define _GRAMMAR_H_
+#ifndef GRAMMAR_H_
+#define GRAMMAR_H_
class Dictionary;
class Node;
Index: dic/header.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/header.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- dic/header.cpp 3 Jul 2009 21:40:15 -0000 1.14
+++ dic/header.cpp 29 Nov 2009 16:01:31 -0000 1.15
@@ -21,6 +21,7 @@
#include "config.h"
#include <cstring> // for strcpy
+#include <cstdio> // for snprintf
#include <string>
#include <sstream>
#include <iostream>
Index: dic/header.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/header.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- dic/header.h 3 Jul 2009 21:40:15 -0000 1.11
+++ dic/header.h 29 Nov 2009 16:01:31 -0000 1.12
@@ -18,13 +18,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _HEADER_H
-#define _HEADER_H
+#ifndef HEADER_H_
+#define HEADER_H_
#include <iosfwd>
#include <map>
#include <vector>
#include <time.h>
+#include <stdint.h>
using namespace std;
Index: dic/regexp.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/regexp.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- dic/regexp.h 22 Nov 2008 13:09:29 -0000 1.19
+++ dic/regexp.h 29 Nov 2009 16:01:31 -0000 1.20
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _REGEXP_H_
-#define _REGEXP_H_
+#ifndef REGEXP_H_
+#define REGEXP_H_
#include <string>
Index: dic/tile.h
===================================================================
RCS file: /cvsroot/eliot/eliot/dic/tile.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- dic/tile.h 28 Jun 2009 11:48:17 -0000 1.6
+++ dic/tile.h 29 Nov 2009 16:01:31 -0000 1.7
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _TILE_H_
-#define _TILE_H_
+#ifndef TILE_H_
+#define TILE_H_
#include <list>
#include <vector>
Index: extras/contrib/Makefile
===================================================================
RCS file: /cvsroot/eliot/eliot/extras/contrib/Makefile,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- extras/contrib/Makefile 26 Sep 2009 08:15:31 -0000 1.6
+++ extras/contrib/Makefile 29 Nov 2009 16:01:32 -0000 1.7
@@ -2,6 +2,9 @@
LIBCONFIG_VERSION = 1.3.2
BOOST_VERSION = 1_39_0
QT_VERSION = 4.5.3
+LIBXML2_VERSION = 2.7.5
+ARABICA_VERSION = 2009-march
+
PREFIX = $(shell pwd)/inst
WGET = wget -c
@@ -29,7 +32,7 @@
ICONV_ARCHIVE = libiconv-$(ICONV_VERSION).tar.gz
$(ICONV_ARCHIVE): $(PREFIX)
- $(WGET) http://ftp.gnu.org/pub/gnu/libiconv/$(ICONV_ARCHIVE)
+ $(WGET) http://ftp.gnu.org/pub/gnu/libiconv/$@
$(ICONV_DIR): $(ICONV_ARCHIVE)
tar xzf $<
@@ -45,7 +48,7 @@
LIBCONFIG_ARCHIVE = libconfig-$(LIBCONFIG_VERSION).tar.gz
$(LIBCONFIG_ARCHIVE): $(PREFIX)
- $(WGET) http://www.hyperrealm.com/libconfig/$(LIBCONFIG_ARCHIVE)
+ $(WGET) http://www.hyperrealm.com/libconfig/$@
$(LIBCONFIG_DIR): $(LIBCONFIG_ARCHIVE)
tar xvf $<
@@ -61,7 +64,7 @@
BOOST_ARCHIVE = boost_$(BOOST_VERSION).tar.bz2
$(BOOST_ARCHIVE): $(PREFIX)
- $(WGET)
http://garr.dl.sourceforge.net/sourceforge/boost/$(BOOST_ARCHIVE)
+ $(WGET) http://garr.dl.sourceforge.net/sourceforge/boost/$@
$(BOOST_DIR): $(BOOST_ARCHIVE)
tar xjf $<
@@ -81,7 +84,7 @@
QT_DIR = qt4-$(QT_VERSION)-win32-bin
$(QT_ARCHIVE): $(PREFIX)
- $(WGET)
http://dl.sv.nongnu.org/releases-noredirect/eliot/other/$(QT_ARCHIVE)
+ $(WGET) http://dl.sv.nongnu.org/releases-noredirect/eliot/other/$@
$(QT_DIR): $(QT_ARCHIVE)
tar xjf $<
@@ -91,3 +94,37 @@
(cd $<; cp -r bin include lib share $(PREFIX); sed
's,@@PREFIX@@,$(PREFIX),' $(PREFIX)/lib/pkgconfig/QtCore.pc.in >
$(PREFIX)/lib/pkgconfig/QtCore.pc; sed 's,@@PREFIX@@,$(PREFIX),'
lib/pkgconfig/QtGui.pc.in > $(PREFIX)/lib/pkgconfig/QtGui.pc; rm
$(PREFIX)/lib/pkgconfig/*.in)
touch $@
+
+### LibXML 2 ###
+
+LIBXML2_DIR = libxml2-$(LIBXML2_VERSION)
+LIBXML2_ARCHIVE = libxml2-$(LIBXML2_VERSION).tar.gz
+
+$(LIBXML2_ARCHIVE): $(PREFIX)
+ $(WGET) ftp://xmlsoft.org/libxml2/$@
+
+$(LIBXML2_DIR): $(LIBXML2_ARCHIVE)
+ tar xzf $<
+
+# TODO: add more --without-xxx flags (apparently needed for build: pattern,
debug)
+# --with-legacy and --with-html are needed for arabica
+.libxml2: $(LIBXML2_DIR)
+ (cd $< && $(CONFIGURE) --enable-static --disable-shared --with-legacy
--without-schematron --without-tree --without-zlib --without-http --without-ftp
--without-html --without-python --without-docbook --without-regexps && make
install)
+ touch $@
+
+
+### Arabica ###
+
+ARABICA_DIR = arabica-$(ARABICA_VERSION)
+ARABICA_ARCHIVE = arabica-$(ARABICA_VERSION).tar.bz2
+
+$(ARABICA_ARCHIVE): $(PREFIX)
+ $(WGET)
http://downloads.sourceforge.net/project/arabica/arabica/March-09/address@hidden
+
+$(ARABICA_DIR): $(ARABICA_ARCHIVE)
+ tar xjf $<
+
+.arabica: $(ARABICA_DIR)
+ (cd $< && patch -p0 < ../arabica-no-example.patch && $(CONFIGURE)
--enable-static --disable-shared --with-parser=libxml2 --with-libxml2=$(PREFIX)
--with-boost=$(PREFIX) --with-tests=no --with-dom=no && make install)
+ touch $@
+
Index: game/Makefile.am
===================================================================
RCS file: /cvsroot/eliot/eliot/game/Makefile.am,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- game/Makefile.am 19 Feb 2009 18:25:17 -0000 1.25
+++ game/Makefile.am 29 Nov 2009 16:01:32 -0000 1.26
@@ -19,7 +19,7 @@
noinst_LIBRARIES = libgame.a
-AM_CPPFLAGS = -I$(top_srcdir)/dic -I../intl -I$(top_srcdir)/intl
@LIBCONFIG_CFLAGS@
+AM_CPPFLAGS = -I$(top_srcdir)/dic -I../intl -I$(top_srcdir)/intl
@LIBCONFIG_CFLAGS@ @ARABICA_CFLAGS@ @LIBXML2_CFLAGS@
libgame_a_SOURCES= \
game_exception.cpp game_exception.h \
@@ -50,10 +50,13 @@
game_move_cmd.h game_move_cmd.cpp \
turn_cmd.cpp turn_cmd.h \
duplicate.cpp duplicate.h \
+ mark_played_cmd.h mark_played_cmd.cpp \
freegame.cpp freegame.h \
training.cpp training.h \
public_game.cpp public_game.h \
game_factory.cpp game_factory.h \
game_io.cpp \
+ xml_writer.cpp xml_writer.h \
+ xml_reader.cpp xml_reader.h \
debug.h
Index: game/ai_percent.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/ai_percent.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- game/ai_percent.cpp 24 Jan 2009 17:44:56 -0000 1.13
+++ game/ai_percent.cpp 29 Nov 2009 16:01:32 -0000 1.14
@@ -35,6 +35,8 @@
if (iPercent > 1)
iPercent = 1;
+ m_percent = iPercent;
+
// Use BestResults to be slightly faster when the percentage is 100%
if (iPercent == 1)
m_results = new BestResults;
Index: game/ai_percent.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/ai_percent.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/ai_percent.h 24 Jan 2009 17:44:56 -0000 1.12
+++ game/ai_percent.h 29 Nov 2009 16:01:32 -0000 1.13
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _AI_PERCENT_H_
-#define _AI_PERCENT_H_
+#ifndef AI_PERCENT_H_
+#define AI_PERCENT_H_
#include "ai_player.h"
#include "results.h"
@@ -42,6 +42,8 @@
AIPercent(float iPercent);
virtual ~AIPercent();
+ float getPercent() const { return m_percent; }
+
/**
* This method does the actual computation. It will be called before any
* of the following methods, so it must prepare everything for them.
@@ -52,6 +54,7 @@
virtual Move getMove() const;
private:
+ float m_percent;
/// Container for all the found solutions
Results *m_results;
};
Index: game/ai_player.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/ai_player.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- game/ai_player.h 22 Nov 2008 14:40:26 -0000 1.11
+++ game/ai_player.h 29 Nov 2009 16:01:32 -0000 1.12
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _AI_PLAYER_H_
-#define _AI_PLAYER_H_
+#ifndef AI_PLAYER_H_
+#define AI_PLAYER_H_
#include "player.h"
Index: game/bag.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/bag.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/bag.cpp 23 Jun 2009 12:41:53 -0000 1.12
+++ game/bag.cpp 29 Nov 2009 16:01:32 -0000 1.13
@@ -22,6 +22,7 @@
#include <boost/foreach.hpp>
#include <string>
+#include <cstdio>
#include <cstdlib> // For rand()
#include <dic.h>
Index: game/bag.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/bag.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/bag.h 22 Nov 2008 13:09:29 -0000 1.12
+++ game/bag.h 29 Nov 2009 16:01:32 -0000 1.13
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _BAG_H_
-#define _BAG_H_
+#ifndef BAG_H_
+#define BAG_H_
#include <map>
#include "tile.h"
Index: game/board.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/board.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- game/board.cpp 23 Jun 2009 13:21:19 -0000 1.25
+++ game/board.cpp 29 Nov 2009 16:01:32 -0000 1.26
@@ -21,6 +21,7 @@
#include <wctype.h>
#include <algorithm>
+#include <cstdio>
#include "dic.h"
Index: game/board.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/board.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- game/board.h 23 Jun 2009 13:21:19 -0000 1.20
+++ game/board.h 29 Nov 2009 16:01:32 -0000 1.21
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _BOARD_H_
-#define _BOARD_H_
+#ifndef BOARD_H_
+#define BOARD_H_
#include <string>
Index: game/board_search.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/board_search.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- game/board_search.h 17 Jan 2009 14:57:32 -0000 1.1
+++ game/board_search.h 29 Nov 2009 16:01:32 -0000 1.2
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _BOARD_SEARCH_H_
-#define _BOARD_SEARCH_H_
+#ifndef BOARD_SEARCH_H_
+#define BOARD_SEARCH_H_
#include "coord.h"
#include "matrix.h"
Index: game/command.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/command.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- game/command.h 30 Nov 2008 20:55:46 -0000 1.3
+++ game/command.h 29 Nov 2009 16:01:32 -0000 1.4
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _COMMAND_H
-#define _COMMAND_H
+#ifndef COMMAND_H_
+#define COMMAND_H_
#include <string>
Index: game/coord.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/coord.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/coord.cpp 19 Feb 2009 18:25:17 -0000 1.12
+++ game/coord.cpp 29 Nov 2009 16:01:32 -0000 1.13
@@ -20,6 +20,7 @@
*****************************************************************************/
#include <string>
+#include <cstdio>
#include <wchar.h>
#include "coord.h"
#include "board.h" // for BOARD_MIN and BOARD_MAX (TODO: remove this include)
Index: game/coord.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/coord.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- game/coord.h 19 Feb 2009 18:25:17 -0000 1.10
+++ game/coord.h 29 Nov 2009 16:01:32 -0000 1.11
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _COORD_H
-#define _COORD_H
+#ifndef COORD_H_
+#define COORD_H_
#include <string>
Index: game/cross.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/cross.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- game/cross.cpp 22 Nov 2008 13:09:30 -0000 1.11
+++ game/cross.cpp 29 Nov 2009 16:01:32 -0000 1.12
@@ -20,6 +20,7 @@
*****************************************************************************/
#include <string>
+#include <cstdio>
#include "cross.h"
#define CROSS_MASK 0xFFFFFFFF
Index: game/cross.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/cross.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- game/cross.h 28 Jun 2009 10:55:24 -0000 1.11
+++ game/cross.h 29 Nov 2009 16:01:32 -0000 1.12
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _CROSS_H_
-#define _CROSS_H_
+#ifndef CROSS_H_
+#define CROSS_H_
#include <set>
#include "tile.h"
Index: game/debug.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/debug.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- game/debug.h 23 Nov 2008 16:55:28 -0000 1.15
+++ game/debug.h 29 Nov 2009 16:01:32 -0000 1.16
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _DEBUG_H_
-#define _DEBUG_H_
+#ifndef DEBUG_H_
+#define DEBUG_H_
/**********
* General
Index: game/duplicate.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/duplicate.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- game/duplicate.cpp 3 Jul 2009 21:40:15 -0000 1.32
+++ game/duplicate.cpp 29 Nov 2009 16:01:32 -0000 1.33
@@ -42,6 +42,7 @@
#include "player_move_cmd.h"
#include "player_rack_cmd.h"
#include "game_move_cmd.h"
+#include "mark_played_cmd.h"
#include "ai_player.h"
#include "settings.h"
#include "debug.h"
@@ -254,9 +255,7 @@
}
// Play the best word on the board
- Command *pCmd = new GameMoveCmd(*this, bestMove,
- bestPlayer->getLastRack(),
- bestPlayer->getId());
+ Command *pCmd = new GameMoveCmd(*this, bestMove, bestPlayer->getId());
accessNavigation().addAndExecute(pCmd);
// Leave the same reliquate to all players
@@ -315,35 +314,3 @@
m_hasPlayed[iPlayerId] = iNewFlag;
}
-
-Duplicate::MarkPlayedCmd::MarkPlayedCmd(Duplicate &ioDuplicate,
- unsigned int iPlayerId,
- bool iPlayedFlag)
- : m_duplicateGame(ioDuplicate), m_playerId(iPlayerId),
- m_newPlayedFlag(iPlayedFlag)
-{
-}
-
-
-void Duplicate::MarkPlayedCmd::doExecute()
-{
- m_oldPlayedFlag = m_duplicateGame.hasPlayed(m_playerId);
- m_duplicateGame.setPlayedFlag(m_playerId, m_newPlayedFlag);
-}
-
-
-void Duplicate::MarkPlayedCmd::doUndo()
-{
- m_duplicateGame.setPlayedFlag(m_playerId, m_oldPlayedFlag);
-}
-
-
-wstring Duplicate::MarkPlayedCmd::toString() const
-{
- wostringstream oss;
- oss << L"MarkPlayedCmd (player " << m_playerId
- << L" marked " << m_newPlayedFlag << L")";
- return oss.str();
-}
-
-
Index: game/duplicate.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/duplicate.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- game/duplicate.h 24 Jan 2009 17:44:56 -0000 1.22
+++ game/duplicate.h 29 Nov 2009 16:01:32 -0000 1.23
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _DUPLICATE_H_
-#define _DUPLICATE_H_
+#ifndef DUPLICATE_H_
+#define DUPLICATE_H_
#include "game.h"
#include "command.h"
@@ -54,6 +54,7 @@
class Duplicate: public Game
{
friend class GameFactory;
+ friend class MarkPlayedCmd;
public:
virtual GameMode getMode() const { return kDUPLICATE; }
virtual string getModeAsString() const { return "Duplicate"; }
@@ -132,27 +133,6 @@
/// m_hasPlayed[p] is true iff player p has played for this turn
map<unsigned int, bool> m_hasPlayed;
-
- /// Command used internally to change the "has played" flag of a player
- class MarkPlayedCmd: public Command
- {
- public:
- MarkPlayedCmd(Duplicate &ioDuplicate,
- unsigned int iPlayerId,
- bool iPlayedFlag);
-
- virtual wstring toString() const;
-
- protected:
- virtual void doExecute();
- virtual void doUndo();
-
- private:
- Duplicate &m_duplicateGame;
- unsigned int m_playerId;
- bool m_newPlayedFlag;
- bool m_oldPlayedFlag;
- };
};
#endif /* _DUPLICATE_H_ */
Index: game/freegame.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/freegame.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- game/freegame.cpp 3 Jul 2009 21:40:15 -0000 1.32
+++ game/freegame.cpp 29 Nov 2009 16:01:32 -0000 1.33
@@ -148,9 +148,7 @@
{
const Move &move = getCurrentPlayer().getLastMove();
// Update the game
- Command *pCmd = new GameMoveCmd(*this, move,
- getCurrentPlayer().getLastRack(),
- m_currPlayer);
+ Command *pCmd = new GameMoveCmd(*this, move, m_currPlayer);
accessNavigation().addAndExecute(pCmd);
// Complete the rack for the player that just played
Index: game/freegame.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/freegame.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- game/freegame.h 30 Nov 2008 20:55:46 -0000 1.17
+++ game/freegame.h 29 Nov 2009 16:01:32 -0000 1.18
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _FREEGAME_H_
-#define _FREEGAME_H_
+#ifndef FREEGAME_H_
+#define FREEGAME_H_
#include "game.h"
Index: game/game.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -b -r1.57 -r1.58
--- game/game.cpp 18 Mar 2009 18:54:41 -0000 1.57
+++ game/game.cpp 29 Nov 2009 16:01:32 -0000 1.58
@@ -501,7 +501,8 @@
int Game::checkPlayedWord(const wstring &iCoord,
- const wstring &iWord, Round &oRound) const
+ const wstring &iWord,
+ Round &oRound, bool checkRack) const
{
ASSERT(getNPlayers() != 0, "Expected at least one player");
@@ -550,6 +551,8 @@
return 10;
}
+ if (checkRack)
+ {
// Check that the word can be formed with the tiles in the rack:
// we first create a copy of the rack, then we remove the tiles
// one by one
@@ -574,6 +577,7 @@
rack.remove(t);
}
}
+ }
return 0;
}
Index: game/game.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game.h,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- game/game.h 18 Mar 2009 18:54:41 -0000 1.51
+++ game/game.h 29 Nov 2009 16:01:32 -0000 1.52
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _GAME_H_
-#define _GAME_H_
+#ifndef GAME_H_
+#define GAME_H_
#include <string>
#include <vector>
@@ -178,30 +178,13 @@
***************/
/**
- * Possible formats for the saved games
- */
- enum game_file_format
- {
- FILE_FORMAT_STANDARD,
- FILE_FORMAT_ADVANCED
- };
-
- /**
+ * XXX FIXME XXX: these methods are deprecated, don't use them anymore.
* load() returns the loaded game, or NULL if there was a problem
* load() does need some more work to be robust enough to
* handle "hand written" files
*/
static Game * load(FILE *fin, const Dictionary &iDic);
-
- /**
- * Save a game to a file
- * Standard format is used for training games so that it is compatible
- * with previous versions of Eliot.
- *
- * Saving can be forced to advanced format for training games by
- * setting the last parameter to FILE_FORMAT_ADVANCED
- */
- void save(ostream &out, game_file_format format = FILE_FORMAT_STANDARD)
const;
+ static Game * load(const string &iFileName, const Dictionary &iDic);
/***************
* Setting the rack
@@ -214,6 +197,19 @@
const Navigation & getNavigation() const { return m_navigation; }
Navigation & accessNavigation() { return m_navigation; }
+ /**
+ * This function checks whether it is legal to play the given word at the
+ * given coordinates. If so, the function fills a Round object, also given
+ * as a parameter.
+ * Possible return values: same as the play() method
+ * If checkRack is false, the return value 4 is impossible to get
+ * (no check is done on the rack letters).
+ */
+ int checkPlayedWord(const wstring &iCoord,
+ const wstring &iWord,
+ Round &oRound,
+ bool checkRack = true) const;
+
private:
/// Variant
GameVariant m_variant;
@@ -318,15 +314,6 @@
bool rackInBag(const Rack &iRack, const Bag &iBag) const;
/**
- * This function checks whether it is legal to play the given word at the
- * given coordinates. If so, the function fills a Round object, also given
- * as a parameter.
- * Possible return values: same as the play() method
- */
- int checkPlayedWord(const wstring &iCoord,
- const wstring &iWord, Round &oRound) const;
-
- /**
* load games from File using the first format.
* This format is used for Training games
*/
@@ -338,6 +325,7 @@
*/
static Game* gameLoadFormat_15(FILE *fin, const Dictionary& iDic);
+#if 0
/**
* Training games ares saved using the initial Eliot format
*/
@@ -347,6 +335,7 @@
* Advanced game file format output
*/
void gameSaveFormat_15(ostream &out) const;
+#endif
};
Index: game/game_exception.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_exception.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- game/game_exception.cpp 22 Nov 2008 13:09:30 -0000 1.2
+++ game/game_exception.cpp 29 Nov 2009 16:01:32 -0000 1.3
@@ -40,3 +40,15 @@
{
}
+
+LoadGameException::LoadGameException(const string &iMessage)
+ : GameException(iMessage)
+{
+}
+
+
+SaveGameException::SaveGameException(const string &iMessage)
+ : GameException(iMessage)
+{
+}
+
Index: game/game_exception.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_exception.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- game/game_exception.h 22 Nov 2008 13:09:30 -0000 1.2
+++ game/game_exception.h 29 Nov 2009 16:01:32 -0000 1.3
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _GAME_EXCEPTION_H_
-#define _GAME_EXCEPTION_H_
+#ifndef GAME_EXCEPTION_H_
+#define GAME_EXCEPTION_H_
#include <exception>
#include <string>
@@ -48,4 +48,18 @@
EndGameException(const std::string &iMessage);
};
+
+class LoadGameException: public GameException
+{
+ public:
+ LoadGameException(const std::string &iMessage);
+};
+
+
+class SaveGameException: public GameException
+{
+ public:
+ SaveGameException(const std::string &iMessage);
+};
+
#endif
Index: game/game_factory.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_factory.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/game_factory.cpp 22 Nov 2008 13:09:30 -0000 1.12
+++ game/game_factory.cpp 29 Nov 2009 16:01:32 -0000 1.13
@@ -42,6 +42,7 @@
#include "ai_percent.h"
#include "dic.h"
#include "encoding.h"
+#include "xml_reader.h"
GameFactory *GameFactory::m_factory = NULL;
@@ -227,15 +228,7 @@
Game* GameFactory::load(const string &iFileName, const Dictionary &iDic)
{
- FILE* fin = fopen(iFileName.c_str(), "r");
- if (fin == NULL)
- {
- printf("Cannot open %s\n", iFileName.c_str());
- return NULL;
- }
- Game *game = Game::load(fin, iDic);
- fclose(fin);
- return game;
+ return XmlReader::read(iFileName, iDic);
}
Index: game/game_factory.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_factory.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- game/game_factory.h 22 Nov 2008 13:09:30 -0000 1.11
+++ game/game_factory.h 29 Nov 2009 16:01:32 -0000 1.12
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _GAME_FACTORY_H_
-#define _GAME_FACTORY_H_
+#ifndef GAME_FACTORY_H_
+#define GAME_FACTORY_H_
#include <string>
#include <vector>
Index: game/game_io.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_io.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- game/game_io.cpp 18 Mar 2009 18:53:57 -0000 1.13
+++ game/game_io.cpp 29 Nov 2009 16:01:32 -0000 1.14
@@ -21,6 +21,7 @@
#include <cstring>
#include <cstdlib> // For atoi
+#include <cstdio>
#include "dic.h"
#include "pldrack.h"
@@ -106,6 +107,7 @@
Game *pGame = NULL;
pGame = GameFactory::Instance()->createTraining(iDic);
+ pGame->addPlayer(new HumanPlayer);
pGame->start();
/* rack word ?bonus pts coord */
@@ -390,9 +392,7 @@
// pGame->m_players[player]->endTurn(round,num - 1);
// Play the round
- GameMoveCmd cmd(*pGame, Move(round),
- pGame->getCurrentPlayer().getLastRack(),
- pGame->m_currPlayer);
+ GameMoveCmd cmd(*pGame, Move(round), pGame->m_currPlayer);
cmd.execute();
}
@@ -437,170 +437,3 @@
return pGame;
}
-/********************************************************
- *
- * Loading games
- *
- ********************************************************/
-
-void Game::save(ostream &out, game_file_format format) const
-{
- if (getMode() == kTRAINING && format == FILE_FORMAT_STANDARD)
- {
- gameSaveFormat_14(out);
- }
- else
- {
- gameSaveFormat_15(out);
- }
-}
-
-
-void Game::gameSaveFormat_14(ostream &out) const
-{
- char line[100];
- const string decal = " ";
- out << IDENT_STRING << endl << endl;
-
- for (unsigned int i = 0; i < m_history.getSize(); i++)
- {
- const Turn& turn = m_history.getTurn(i);
- wstring rack = turn.getPlayedRack().toString(PlayedRack::RACK_EXTRA);
- // FIXME: this will not work if the move does not correspond to a
played round!
- const Round &round = turn.getMove().getRound();
- wstring word = round.getWord();
- string coord =
convertToMb(round.getCoord().toString(Coord::COORD_MODE_LONG));
-
- // rack [space] word [space] bonus points coord
- sprintf(line,"%s%s%c%4d %s",
- padAndConvert(rack, 12, false).c_str(),
- padAndConvert(word, 16, false).c_str(),
- round.getBonus() ? '*' : ' ',
- round.getPoints(),
- coord.c_str()
- );
-
- out << decal << line << endl;
- }
-
- out << endl;
- out << decal << "total" << string(24,' ');
- sprintf(line, "%4d", getCurrentPlayer().getPoints());
- out << line << endl;
-}
-
-
-void Game::gameSaveFormat_15(ostream &out) const
-{
- const string decal = " ";
- // "Header" of the game
- out << IDENT_STRING << " " << IDENT_FORMAT_15 << endl << endl;
- // Game type
- out << "Game type: " << getModeAsString() << endl;
- // Player list
- for (unsigned int i = 0; i < getNPlayers(); i++)
- {
- out << "Player " << i << ": ";
- if (m_players[i]->isHuman())
- out << "Human" << endl;
- else
- out << "Computer" << endl;
- }
- out << endl;
-
- // Title of the columns
- char line[100];
- out << decal << " N | RACK | SOLUTION | REF | PTS | P | BONUS"
<< endl;
- out << decal << "===|==========|=================|=====|=====|===|======"
<< endl;
-
- // Print the game itself
- for (unsigned int i = 0; i < m_history.getSize(); i++)
- {
- const Turn& turn = m_history.getTurn(i);
- wstring rack = turn.getPlayedRack().toString(PlayedRack::RACK_EXTRA);
- const Move &move = turn.getMove();
- switch (move.getType())
- {
- case Move::VALID_ROUND:
- {
- const Round &round = move.getRound();
- wstring word = round.getWord();
- string coord = convertToMb(round.getCoord().toString());
- sprintf(line, "%2d | %s | %s | %3s | %3d | %1d | %c",
- i + 1,
- padAndConvert(rack, 8).c_str(), /* pldrack
*/
- padAndConvert(word, 15, false).c_str(), /* word
*/
- coord.c_str(), /* coord
*/
- move.getScore(),
- turn.getPlayer(),
- round.getBonus() ? '*' : ' ');
- break;
- }
- case Move::INVALID_WORD:
- {
- wstring word = move.getBadWord();
- string coord = convertToMb(move.getBadCoord());
- sprintf(line, "%2d | %s | %s | %3s | %3d | %1d |",
- i + 1,
- padAndConvert(rack, 8).c_str(), /* pldrack
*/
- padAndConvert(word, 15, false).c_str(), /* word
*/
- coord.c_str(), /* coord
*/
- move.getScore(),
- turn.getPlayer());
- break;
- }
- case Move::PASS:
- {
- string action = "(PASS)";
- string coord = " - ";
- sprintf(line, "%2d | %s | %s | %3s | %3d | %1d |",
- i + 1,
- padAndConvert(rack, 8).c_str(), /* pldrack
*/
- truncOrPad(action, 15, ' ').c_str(), /* word
*/
- coord.c_str(), /* coord
*/
- move.getScore(),
- turn.getPlayer());
- break;
- }
- case Move::CHANGE_LETTERS:
- {
- wstring action = L"(-" + move.getChangedLetters() + L")";
- string coord = " - ";
- sprintf(line, "%2d | %s | %s | %3s | %3d | %1d |",
- i + 1,
- padAndConvert(rack, 8).c_str(), /* pldrack
*/
- padAndConvert(action, 15, false).c_str(), /* word
*/
- coord.c_str(), /* coord
*/
- move.getScore(),
- turn.getPlayer());
- break;
- }
-
- }
-
- out << decal << line << endl;
- }
-
- switch (getMode())
- {
- case kDUPLICATE:
- // TODO : we should note the score individualy
- out << endl << decal << "Total: " << m_points << endl;
- break;
- case kFREEGAME:
- out << endl << decal << "Total: " << m_points << endl;
- break;
- case kTRAINING:
- out << endl << decal << "Total: " << m_points << endl;
- break;
- }
-
- // Print current rack for all the players
- out << endl;
- for (unsigned int i = 0; i < getNPlayers(); i++)
- {
- wstring rack = m_players[i]->getCurrentRack().toString();
- out << "Rack " << i << ": " << convertToMb(rack) << endl;
- }
-}
-
Index: game/game_move_cmd.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_move_cmd.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- game/game_move_cmd.cpp 21 Feb 2009 16:56:32 -0000 1.5
+++ game/game_move_cmd.cpp 29 Nov 2009 16:01:32 -0000 1.6
@@ -24,11 +24,13 @@
#include "player.h"
#include "game.h"
#include "rack.h"
+#include "turn.h"
GameMoveCmd::GameMoveCmd(Game &ioGame, const Move &iMove,
- const PlayedRack &iMoveRack, unsigned int iPlayerId)
- : m_game(ioGame), m_move(iMove), m_moveRack(iMoveRack),
+ unsigned int iPlayerId)
+ : m_game(ioGame), m_move(iMove),
+
m_moveRack(ioGame.getPlayer(iPlayerId).getHistory().getPreviousTurn().getPlayedRack()),
m_playerId(iPlayerId)
{
}
Index: game/game_move_cmd.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/game_move_cmd.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- game/game_move_cmd.h 23 Nov 2008 17:02:33 -0000 1.2
+++ game/game_move_cmd.h 29 Nov 2009 16:01:32 -0000 1.3
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _GAME_MOVE_CMD_H
-#define _GAME_MOVE_CMD_H
+#ifndef GAME_MOVE_CMD_H_
+#define GAME_MOVE_CMD_H_
#include "command.h"
#include "move.h"
@@ -44,11 +44,14 @@
{
public:
GameMoveCmd(Game &ioGame, const Move &iMove,
- const PlayedRack &iMoveRack,
unsigned int iPlayerId);
virtual wstring toString() const;
+ // Getters
+ const Move & getMove() const { return m_move; }
+ unsigned int getPlayerId() const { return m_playerId; }
+
protected:
virtual void doExecute();
virtual void doUndo();
Index: game/history.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/history.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- game/history.h 23 Nov 2008 08:18:08 -0000 1.14
+++ game/history.h 29 Nov 2009 16:01:32 -0000 1.15
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _HISTORY_H
-#define _HISTORY_H
+#ifndef HISTORY_H_
+#define HISTORY_H_
#include <string>
#include <vector>
Index: game/matrix.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/matrix.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- game/matrix.h 17 Jan 2009 14:57:33 -0000 1.1
+++ game/matrix.h 29 Nov 2009 16:01:32 -0000 1.2
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _MATRIX_H_
-#define _MATRIX_H_
+#ifndef MATRIX_H_
+#define MATRIX_H_
#include <vector>
Index: game/move.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/move.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- game/move.cpp 23 Nov 2008 08:18:08 -0000 1.4
+++ game/move.cpp 29 Nov 2009 16:01:32 -0000 1.5
@@ -147,7 +147,7 @@
else if (m_type == CHANGE_LETTERS)
wss << "CHANGE=" << m_letters;
else if (m_type == INVALID_WORD)
- wss << "INVALID: word=" << m_round.toString() << " coords=" <<
m_coord;
+ wss << "INVALID: word=" << m_word << " coords=" << m_coord;
else if (m_type == VALID_ROUND)
wss << "VALID: word=" << m_round.toString();
wss << " score=" << m_score;
Index: game/move.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/move.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- game/move.h 3 Jul 2009 21:40:15 -0000 1.4
+++ game/move.h 29 Nov 2009 16:01:32 -0000 1.5
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _MOVE_H
-#define _MOVE_H
+#ifndef MOVE_H_
+#define MOVE_H_
#include <string>
@@ -81,7 +81,7 @@
Type getType() const { return m_type; }
/// Get the score of this move (0 unless the round is valid)
- int getScore() const { return m_score; };
+ int getScore() const { return m_score; }
/**
* Return the round associated with the move, or throw an exception
Index: game/navigation.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/navigation.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- game/navigation.cpp 24 Jan 2009 17:44:56 -0000 1.9
+++ game/navigation.cpp 29 Nov 2009 16:01:32 -0000 1.10
@@ -172,12 +172,18 @@
}
+const vector<TurnCmd *> & Navigation::getCommands() const
+{
+ return m_turnCommands;
+}
+
+
void Navigation::print() const
{
cout << "=== Commands history ===" << endl;
- cout << "Current position right after turn " << m_currTurn - 1<< endl;
+ cout << "Current position right after turn " << m_currTurn - 1 << endl;
int index = 0;
- BOOST_FOREACH(Command *c, m_turnCommands)
+ BOOST_FOREACH(const Command *c, m_turnCommands)
{
cout << index << " " << convertToMb(c->toString()) << endl;
++index;
Index: game/navigation.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/navigation.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- game/navigation.h 30 Nov 2008 20:51:05 -0000 1.4
+++ game/navigation.h 29 Nov 2009 16:01:32 -0000 1.5
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _NAVIGATION_H
-#define _NAVIGATION_H
+#ifndef NAVIGATION_H_
+#define NAVIGATION_H_
#include <vector>
@@ -53,6 +53,8 @@
*/
void clearFuture();
+ const vector<TurnCmd *> & getCommands() const;
+
/**
* Print the contents of the commands history, to ease debugging
*/
Index: game/player.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/player.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- game/player.h 23 Nov 2008 08:18:09 -0000 1.24
+++ game/player.h 29 Nov 2009 16:01:32 -0000 1.25
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _PLAYER_H_
-#define _PLAYER_H_
+#ifndef PLAYER_H_
+#define PLAYER_H_
#include <vector>
#include <string>
Index: game/player_move_cmd.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/player_move_cmd.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- game/player_move_cmd.h 23 Nov 2008 17:02:33 -0000 1.2
+++ game/player_move_cmd.h 29 Nov 2009 16:01:32 -0000 1.3
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _PLAYER_MOVE_CMD_H
-#define _PLAYER_MOVE_CMD_H
+#ifndef PLAYER_MOVE_CMD_H_
+#define PLAYER_MOVE_CMD_H_
#include "command.h"
#include "move.h"
@@ -46,6 +46,10 @@
virtual wstring toString() const;
+ // Getters
+ const Player & getPlayer() const { return m_player; }
+ const Move & getMove() const { return m_move; }
+
protected:
virtual void doExecute();
virtual void doUndo();
Index: game/player_points_cmd.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/player_points_cmd.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- game/player_points_cmd.h 30 Nov 2008 21:10:26 -0000 1.1
+++ game/player_points_cmd.h 29 Nov 2009 16:01:32 -0000 1.2
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _PLAYER_POINTS_CMD_H
-#define _PLAYER_POINTS_CMD_H
+#ifndef PLAYER_POINTS_CMD_H_
+#define PLAYER_POINTS_CMD_H_
#include "command.h"
@@ -37,6 +37,10 @@
virtual wstring toString() const;
+ // Getters
+ const Player & getPlayer() const { return m_player; }
+ int getPoints() const { return m_points; }
+
protected:
virtual void doExecute();
virtual void doUndo();
Index: game/player_rack_cmd.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/player_rack_cmd.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- game/player_rack_cmd.h 23 Nov 2008 17:02:33 -0000 1.2
+++ game/player_rack_cmd.h 29 Nov 2009 16:01:32 -0000 1.3
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _PLAYER_RACK_CMD_H
-#define _PLAYER_RACK_CMD_H
+#ifndef PLAYER_RACK_CMD_H_
+#define PLAYER_RACK_CMD_H_
#include "command.h"
#include "pldrack.h"
@@ -38,6 +38,10 @@
virtual wstring toString() const;
+ // Getters
+ const Player & getPlayer() const { return m_player; }
+ const PlayedRack &getRack() const { return m_newRack; }
+
protected:
virtual void doExecute();
virtual void doUndo();
Index: game/pldrack.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/pldrack.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- game/pldrack.h 22 Nov 2008 13:09:31 -0000 1.15
+++ game/pldrack.h 29 Nov 2009 16:01:32 -0000 1.16
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _PLAYEDRACK_H_
-#define _PLAYEDRACK_H_
+#ifndef PLAYEDRACK_H_
+#define PLAYEDRACK_H_
#include <vector>
#include <string>
Index: game/public_game.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/public_game.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- game/public_game.cpp 24 Jan 2009 17:44:57 -0000 1.5
+++ game/public_game.cpp 29 Nov 2009 16:01:32 -0000 1.6
@@ -23,7 +23,9 @@
#include "training.h"
#include "duplicate.h"
#include "freegame.h"
+#include "game_factory.h"
#include "game_exception.h"
+#include "xml_writer.h"
PublicGame::PublicGame(Game &iGame)
@@ -70,6 +72,8 @@
{
if (m_game.getVariant() == Game::kJOKER)
return kJOKER;
+ else if (m_game.getVariant() == Game::kEXPLOSIVE)
+ return kEXPLOSIVE;
else
return kNONE;
}
@@ -251,21 +255,16 @@
/***************************/
-PublicGame *PublicGame::load(FILE *fin, const Dictionary &iDic)
+PublicGame *PublicGame::load(const string &iFileName, const Dictionary &iDic)
{
- Game *game = Game::load(fin, iDic);
- if (game == NULL)
- return NULL;
+ Game *game = GameFactory::Instance()->load(iFileName, iDic);
return new PublicGame(*game);
}
-void PublicGame::save(ostream &out, GameFileFormat format) const
+void PublicGame::save(const string &iFileName) const
{
- if (format == kFILE_FORMAT_ADVANCED)
- m_game.save(out, Game::FILE_FORMAT_ADVANCED);
- else
- m_game.save(out, Game::FILE_FORMAT_STANDARD);
+ XmlWriter::write(m_game, iFileName);
}
/***************************/
Index: game/public_game.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/public_game.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- game/public_game.h 24 Jan 2009 17:44:57 -0000 1.5
+++ game/public_game.h 29 Nov 2009 16:01:32 -0000 1.6
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _PUBLIC_GAME_H_
-#define _PUBLIC_GAME_H_
+#ifndef PUBLIC_GAME_H_
+#define PUBLIC_GAME_H_
#include <string>
@@ -241,30 +241,15 @@
***************/
/**
- * Possible formats for the saved games
+ * Return the loaded game, from an XML file.
+ * An exception is thrown in case of problem.
*/
- enum GameFileFormat
- {
- kFILE_FORMAT_STANDARD,
- kFILE_FORMAT_ADVANCED
- };
-
- /**
- * load() returns the loaded game, or NULL if there was a problem
- * load() does need some more work to be robust enough to
- * handle "hand written" files
- */
- static PublicGame * load(FILE *fin, const Dictionary &iDic);
+ static PublicGame * load(const string &iFileName, const Dictionary &iDic);
/**
- * Save a game to a file
- * Standard format is used for training games so that it is compatible
- * with previous versions of Eliot.
- *
- * Saving can be forced to advanced format for training games by
- * setting the last parameter to kFILE_FORMAT_ADVANCED
+ * Save a game to a XML file
*/
- void save(ostream &out, GameFileFormat format = kFILE_FORMAT_STANDARD)
const;
+ void save(const string &iFileName) const;
/***************
* Navigation in the game history
Index: game/rack.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/rack.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/rack.h 22 Nov 2008 13:09:31 -0000 1.12
+++ game/rack.h 29 Nov 2009 16:01:32 -0000 1.13
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _RACK_H_
-#define _RACK_H_
+#ifndef RACK_H_
+#define RACK_H_
#include <vector>
#include <string>
Index: game/results.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/results.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- game/results.h 24 Jan 2009 17:44:57 -0000 1.14
+++ game/results.h 29 Nov 2009 16:01:32 -0000 1.15
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _RESULTS_H_
-#define _RESULTS_H_
+#ifndef RESULTS_H_
+#define RESULTS_H_
#include <vector>
#include <map>
Index: game/round.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/round.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- game/round.h 3 Jul 2009 23:00:13 -0000 1.15
+++ game/round.h 29 Nov 2009 16:01:32 -0000 1.16
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _ROUND_H_
-#define _ROUND_H_
+#ifndef ROUND_H_
+#define ROUND_H_
#include <vector>
#include "tile.h"
Index: game/settings.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/settings.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- game/settings.h 23 Nov 2008 20:13:02 -0000 1.5
+++ game/settings.h 29 Nov 2009 16:01:32 -0000 1.6
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _SETTINGS_H_
-#define _SETTINGS_H_
+#ifndef SETTINGS_H_
+#define SETTINGS_H_
#include <string>
#include <map>
Index: game/training.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/game/training.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- game/training.cpp 19 Feb 2009 18:25:17 -0000 1.34
+++ game/training.cpp 29 Nov 2009 16:01:32 -0000 1.35
@@ -48,9 +48,6 @@
Training::Training(const Dictionary &iDic)
: Game(iDic), m_results(1000)
{
- // Training mode implicitly uses 1 human player
- Game::addPlayer(new HumanPlayer);
- m_players[0]->setName(convertToWc(_("Training")));
}
@@ -135,9 +132,7 @@
// Play the word on the board
const Move &move = m_players[m_currPlayer]->getLastMove();
- Command *pCmd = new GameMoveCmd(*this, move,
- getCurrentPlayer().getLastRack(),
- m_currPlayer);
+ Command *pCmd = new GameMoveCmd(*this, move, m_currPlayer);
accessNavigation().addAndExecute(pCmd);
accessNavigation().newTurn();
}
@@ -172,9 +167,11 @@
void Training::addPlayer(Player *iPlayer)
{
- // Override the default behaviour to do nothing
- // except releasing memory
- delete iPlayer;
+ ASSERT(getNPlayers() == 0,
+ "Only one player can be added in Training mode");
+ // Force the name of the player
+ iPlayer->setName(convertToWc(_("Training")));
+ Game::addPlayer(iPlayer);
}
Index: game/training.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/training.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- game/training.h 24 Jan 2009 17:44:57 -0000 1.25
+++ game/training.h 29 Nov 2009 16:01:32 -0000 1.26
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _TRAINING_H_
-#define _TRAINING_H_
+#ifndef TRAINING_H_
+#define TRAINING_H_
#include <string>
Index: game/turn.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/turn.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- game/turn.h 23 Nov 2008 08:18:10 -0000 1.12
+++ game/turn.h 29 Nov 2009 16:01:32 -0000 1.13
@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _TURN_H
-#define _TURN_H
+#ifndef TURN_H_
+#define TURN_H_
#include <string>
#include "pldrack.h"
Index: game/turn_cmd.h
===================================================================
RCS file: /cvsroot/eliot/eliot/game/turn_cmd.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- game/turn_cmd.h 30 Nov 2008 20:55:46 -0000 1.4
+++ game/turn_cmd.h 29 Nov 2009 16:01:32 -0000 1.5
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _TURN_CMD_H
-#define _TURN_CMD_H
+#ifndef TURN_CMD_H_
+#define TURN_CMD_H_
#include <vector>
@@ -46,6 +46,8 @@
bool isEmpty() const { return m_commands.empty(); }
+ const vector<Command *> & getCommands() const { return m_commands; }
+
virtual bool isAutoExecution() const;
virtual wstring toString() const;
Index: qt/Makefile.am
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/Makefile.am,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- qt/Makefile.am 19 Feb 2009 18:25:17 -0000 1.10
+++ qt/Makefile.am 29 Nov 2009 16:01:33 -0000 1.11
@@ -80,7 +80,7 @@
main.cpp
eliot_SOURCES += $(BUILT_SOURCES)
-eliot_LDADD = ../game/libgame.a ../dic/libdic.a @QT_LIBS@ @LIBINTL@
@LIBCONFIG_LIBS@
+eliot_LDADD = ../game/libgame.a ../dic/libdic.a @QT_LIBS@ @LIBINTL@
@LIBCONFIG_LIBS@ @ARABICA_LIBS@
# Generate a cpp file from the resources
resources.cpp: eliot.qrc $(RESOURCES)
Index: qt/main_window.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/main_window.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- qt/main_window.cpp 23 Oct 2009 20:19:04 -0000 1.32
+++ qt/main_window.cpp 29 Nov 2009 16:01:33 -0000 1.33
@@ -21,7 +21,6 @@
#include "config.h"
#include <iostream>
-#include <fstream>
#include <QtGui/QLabel>
#include <QtGui/QMessageBox>
#include <QtGui/QFileDialog>
@@ -263,19 +262,17 @@
else
{
m_actionGamePrint->setEnabled(true);
+ m_actionGameSaveAs->setEnabled(true);
if (iGame->getMode() == PublicGame::kTRAINING)
{
- m_actionGameSaveAs->setEnabled(true);
setWindowTitle(_q("Training mode") + " - Eliot");
}
else if (iGame->getMode() == PublicGame::kDUPLICATE)
{
- m_actionGameSaveAs->setEnabled(false);
setWindowTitle(_q("Duplicate game") + " - Eliot");
}
else
{
- m_actionGameSaveAs->setEnabled(false);
setWindowTitle(_q("Free game") + " - Eliot");
}
}
@@ -503,14 +500,17 @@
QString fileName = QFileDialog::getOpenFileName(this, _q("Load a game"));
if (fileName != "")
{
+ try
+ {
+ PublicGame *tmpGame = PublicGame::load(qtl(fileName), *m_dic);
destroyCurrentGame();
- Game *tmpGame = GameFactory::Instance()->load(qtl(fileName), *m_dic);
- if (tmpGame == NULL)
+ m_game = tmpGame;
+ }
+ catch (std::exception &e)
{
- displayErrorMsg(_q("Error while loading the game"));
+ displayErrorMsg(_q("Error while loading the game:\n") + e.what());
return;
}
- m_game = new PublicGame(*tmpGame);
m_ui.groupBoxPlayers->show();
emit gameChangedNonConst(m_game);
emit gameChanged(m_game);
@@ -528,10 +528,16 @@
QString fileName = QFileDialog::getSaveFileName(this, _q("Save a game"));
if (fileName != "")
{
- ofstream fout(qtl(fileName));
- m_game->save(fout);
+ try
+ {
+ m_game->save(qtl(fileName));
displayInfoMsg(_q("Game saved"));
}
+ catch (std::exception &e)
+ {
+ displayErrorMsg(_q("Error saving game: %1").arg(e.what()));
+ }
+ }
}
Index: qt/new_game.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/new_game.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- qt/new_game.cpp 15 Jan 2009 18:33:32 -0000 1.7
+++ qt/new_game.cpp 29 Nov 2009 16:01:33 -0000 1.8
@@ -139,7 +139,7 @@
}
else
{
- const_cast<Player
*>(&game->getPlayer(0))->setName(qtw(_q("Training")));
+ game->addPlayer(new HumanPlayer);
}
// Joker game?
Index: test/driver
===================================================================
RCS file: /cvsroot/eliot/eliot/test/driver,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- test/driver 21 Feb 2009 16:56:32 -0000 1.14
+++ test/driver 29 Nov 2009 16:01:33 -0000 1.15
@@ -49,10 +49,6 @@
# Joker problem on game load
training_joker 0
-# Joker problem on game search
-# Eliot Rosace coup 10 nuageuse dans la recherche
-training_joker2 0
-
#################
# Duplicate mode
#################
Index: test/duplicate_1_player.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_1_player.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/duplicate_1_player.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/duplicate_1_player.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -4,15 +4,15 @@
mode duplicate
[?] pour l'aide
commande> a T
-Joueur 0: UAXEHTS
+Rack 0: UAXEHTS
commande> j SEAUX H8
commande> a S
-Joueur 0: 48
+Score 0: 48
commande> a T
-Joueur 0: HTIUONU
+Rack 0: HT+IUONU
commande> j HUTIN i9
commande> a S
-Joueur 0: 85
+Score 0: 85
commande> a t
OUNEUNE
commande> a g
@@ -33,19 +33,18 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | UAXEHTS | SEAUX | H8 | 48 |
+ 2 | 0 | HT+IUONU | HUTIN | I9 | 37 |
-Game type: Duplicate
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | UAXEHTS | SEAUX | H8 | 48 | 0 |
- 2 | HT+IUONU | HUTIN | I9 | 37 | 0 |
-
- Total: 85
Rack 0: OU+NEUNE
+Score 0: 85
commande> q
fin du mode duplicate
commande> q
Index: test/duplicate_2_ai.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_2_ai.ref,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- test/duplicate_2_ai.ref 23 Jun 2009 21:36:33 -0000 1.8
+++ test/duplicate_2_ai.ref 29 Nov 2009 16:01:33 -0000 1.9
@@ -4,48 +4,47 @@
mode duplicate
[?] pour l'aide
commande> a S
-Joueur 0: 929
-Joueur 1: 929
+Score 0: 929
+Score 1: 929
commande> a T
-Joueur 0: TTV
-Joueur 1: TTV
+Rack 0: TTV
+Rack 1: TTV
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 2 0 1 0 0 0 0 0
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Computer
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ?EBAAEF | FABAcEE | H4 | 80 | 0 | *
- 2 | KEELIFE | KIEF | 10F | 36 | 0 |
- 3 | EEEL+IJX | FIXEE | 4H | 34 | 0 |
- 4 | EJL+RANS | JALES | J6 | 49 | 0 |
- 5 | NR+OAHPU | HURON | 5K | 28 | 0 |
- 6 | AP+MOEIA | LIPOME | 8J | 36 | 0 |
- 7 | AA+SMOND | ADONNAMES | O1 | 86 | 0 | *
- 8 | LEATCYL | CATLEYA | 5B | 36 | 0 |
- 9 | L+EARBHO | BROCHA | B2 | 42 | 0 |
- 10 | EL+OSULA | ALLOUES | A6 | 81 | 0 | *
- 11 | DSNIMEN | DEMIS | I1 | 28 | 0 |
- 12 | INN+NQUS | QUINTS | D1 | 42 | 0 |
- 13 | NN+IEUR? | MUNIRENt | N8 | 72 | 0 | *
- 14 | ISITTIE | EDITS | 1H | 21 | 0 |
- 15 | IIT+NEOP | POTINIER | 12G | 72 | 0 | *
- 16 | DVZEAET | DZETA | 15K | 72 | 0 |
- 17 | ETV+RWEV | EWE | F5 | 32 | 0 |
- 18 | ERTVV+TC | YET | G5 | 31 | 0 |
- 19 | CRTVV+UR | REVUE | M11 | 30 | 0 |
- 20 | CRTV+TUL | CRUEL | 2F | 21 | 0 |
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | ?EBAAEF | FABAcEE | H4 | 80 | *
+ 2 | 0 | KEELIFE | KIEF | 10F | 36 |
+ 3 | 0 | EEEL+IJX | FIXEE | 4H | 34 |
+ 4 | 0 | EJL+RANS | JALES | J6 | 49 |
+ 5 | 0 | NR+OAHPU | HURON | 5K | 28 |
+ 6 | 0 | AP+MOEIA | LIPOME | 8J | 36 |
+ 7 | 0 | AA+SMOND | ADONNAMES | O1 | 86 | *
+ 8 | 0 | LEATCYL | CATLEYA | 5B | 36 |
+ 9 | 0 | L+EARBHO | BROCHA | B2 | 42 |
+ 10 | 0 | EL+OSULA | ALLOUES | A6 | 81 | *
+ 11 | 0 | DSNIMEN | DEMIS | I1 | 28 |
+ 12 | 0 | INN+NQUS | QUINTS | D1 | 42 |
+ 13 | 0 | NN+IEUR? | MUNIRENt | N8 | 72 | *
+ 14 | 0 | ISITTIE | EDITS | 1H | 21 |
+ 15 | 0 | IIT+NEOP | POTINIER | 12G | 72 | *
+ 16 | 0 | DVZEAET | DZETA | 15K | 72 |
+ 17 | 0 | ETV+RWEV | EWE | F5 | 32 |
+ 18 | 0 | ERTVV+TC | YET | G5 | 31 |
+ 19 | 0 | CRTVV+UR | REVUE | M11 | 30 |
+ 20 | 0 | CRTV+TUL | CRUEL | 2F | 21 |
- Total: 929
Rack 0: TTV
Rack 1: TTV
+Score 0: 929
+Score 1: 929
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A - - - - - A L L O U E S - - -
Index: test/duplicate_explosive_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_explosive_variant.ref,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/duplicate_explosive_variant.ref 23 Jun 2009 21:36:33 -0000
1.3
+++ test/duplicate_explosive_variant.ref 29 Nov 2009 16:01:33 -0000
1.4
@@ -21,36 +21,35 @@
N - - - U - - - I - V I D E R -
O F A U X - - - S - - - E - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Duplicate
+Game: variant=explosive
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | HSGPYEL | GLYPHES | H2 | 114 | *
+ 2 | 0 | OIAWEFR | FERIA | 1D | 105 |
+ 3 | 0 | OW+HGBAE | BOGHEY | 4C | 42 |
+ 4 | 0 | AW+EDESK | KWAS | 2B | 51 |
+ 5 | 0 | DEE+PISA | SPEEDAIS | 8H | 89 | *
+ 6 | 0 | OAADEIR | WEBRADIO | C2 | 46 |
+ 7 | 0 | A+ZTTNUE | ATTENUEZ | K5 | 118 | *
+ 8 | 0 | CEUIELN | GENICULE | E4 | 94 | *
+ 9 | 0 | TVIRETR | TREVIRAT | M2 | 76 | *
+ 10 | 0 | CSN?UXN | CEUX | 4L | 50 |
+ 11 | 0 | NNS?+LOT | PLaNTONS | I8 | 61 | *
+ 12 | 0 | ?OUANAF | FAUX | O1 | 48 |
+ 13 | 0 | ANO?+RTI | NOTeRAIT | 12B | 77 | *
+ 14 | 0 | MLIEDNO | ZOIDE | 12K | 32 |
+ 15 | 0 | LMN+AUSE | SUA | I4 | 34 |
+ 16 | 0 | ELMN+ARE | LAINEE | H10 | 31 |
+ 17 | 0 | MR+IVMEL | VIDER | N10 | 34 |
+ 18 | 0 | LMM+QUEJ | JAUNE | 6B | 30 |
+ 19 | 0 | LMMQ+OSM | MOS | 10A | 27 |
-Game type: Duplicate
-Player 0: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | HSGPYEL | GLYPHES | H2 | 114 | 0 | *
- 2 | OIAWEFR | FERIA | 1D | 105 | 0 |
- 3 | OW+HGBAE | BOGHEY | 4C | 42 | 0 |
- 4 | AW+EDESK | KWAS | 2B | 51 | 0 |
- 5 | DEE+PISA | SPEEDAIS | 8H | 89 | 0 | *
- 6 | OAADEIR | WEBRADIO | C2 | 46 | 0 |
- 7 | A+ZTTNUE | ATTENUEZ | K5 | 118 | 0 | *
- 8 | CEUIELN | GENICULE | E4 | 94 | 0 | *
- 9 | TVIRETR | TREVIRAT | M2 | 76 | 0 | *
- 10 | CSN?UXN | CEUX | 4L | 50 | 0 |
- 11 | NNS?+LOT | PLaNTONS | I8 | 61 | 0 | *
- 12 | ?OUANAF | FAUX | O1 | 48 | 0 |
- 13 | ANO?+RTI | NOTeRAIT | 12B | 77 | 0 | *
- 14 | MLIEDNO | ZOIDE | 12K | 32 | 0 |
- 15 | LMN+AUSE | SUA | I4 | 34 | 0 |
- 16 | ELMN+ARE | LAINEE | H10 | 31 | 0 |
- 17 | MR+IVMEL | VIDER | N10 | 34 | 0 |
- 18 | LMM+QUEJ | JAUNE | 6B | 30 | 0 |
- 19 | LMMQ+OSM | MOS | 10A | 27 | 0 |
-
- Total: 1159
Rack 0: LMMQ
+Score 0: 1159
commande> q
fin du mode duplicate
commande> q
Index: test/duplicate_humans_ai.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_humans_ai.ref,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- test/duplicate_humans_ai.ref 23 Jun 2009 21:36:33 -0000 1.7
+++ test/duplicate_humans_ai.ref 29 Nov 2009 16:01:33 -0000 1.8
@@ -4,38 +4,38 @@
mode duplicate
[?] pour l'aide
commande> a T
-Joueur 0: ATOYDSI
-Joueur 1: ATOYDSI
-Joueur 2: ATOYDSI
+Rack 0: ATOYDSI
+Rack 1: ATOYDSI
+Rack 2: ATOYDSI
commande> j DOSAIT H4
commande> j DOSAIT h5
commande> a S
-Joueur 0: 18
-Joueur 1: 14
-Joueur 2: 30
+Score 0: 18
+Score 1: 14
+Score 2: 30
commande> a T
-Joueur 0: DIAEINS
-Joueur 1: DIAEINS
-Joueur 2: DIAEINS
+Rack 0: DI+AEINS
+Rack 1: DI+AEINS
+Rack 2: DI+AEINS
commande> n 1
commande> j DISAIENT 7A
commande> a S
-Joueur 0: 18
-Joueur 1: 75
-Joueur 2: 30
+Score 0: 18
+Score 1: 75
+Score 2: 30
commande> j DESTINAI 7E
commande> a S
-Joueur 0: 79
-Joueur 1: 75
-Joueur 2: 93
+Score 0: 79
+Score 1: 75
+Score 2: 93
commande> a t
P?RBFEG
commande> j FRaYE 5E
commande> j BoY 5F
commande> a S
-Joueur 0: 124
-Joueur 1: 93
-Joueur 2: 138
+Score 0: 124
+Score 1: 93
+Score 2: 138
commande> a t
BGPBEET
commande> a g
@@ -56,24 +56,23 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 2 | ATOYDSI | OYATS | H4 | 30 |
+ 2 | 2 | DI+AEINS | DENIAISA | 6A | 63 | *
+ 3 | 0 | P?RBFEG | FRaYE | 5E | 45 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ATOYDSI | OYATS | H4 | 30 | 2 |
- 2 | DI+AEINS | DENIAISA | 6A | 63 | 2 | *
- 3 | P?RBFEG | FRaYE | 5E | 45 | 0 |
-
- Total: 138
Rack 0: BGP+BEET
Rack 1: BGP+BEET
Rack 2: BGP+BEET
+Score 0: 124
+Score 1: 93
+Score 2: 138
commande> q
fin du mode duplicate
commande> q
Index: test/duplicate_invalid_turn.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_invalid_turn.ref,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/duplicate_invalid_turn.ref 18 Mar 2009 18:54:41 -0000 1.3
+++ test/duplicate_invalid_turn.ref 29 Nov 2009 16:01:33 -0000 1.4
@@ -9,48 +9,46 @@
commande> j RELIEUR 8E
commande> j ERROR H2
commande> a T
-Joueur 0: EEILRRU
-Joueur 1: EEILRRU
+Rack 0: EEILRRU
+Rack 1: EEILRRU
commande> a S
-Joueur 0: 0
-Joueur 1: 0
+Score 0: 0
+Score 1: 0
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- Total: 0
Rack 0: EEILRRU
Rack 1: EEILRRU
+Score 0: 0
+Score 1: 0
commande> j RELIURE h4
commande> j RELIEUR h4
commande> a S
-Joueur 0: 66
-Joueur 1: 66
+Score 0: 66
+Score 1: 66
commande> a T
-Joueur 0: GUAUVBP
-Joueur 1: GUAUVBP
+Rack 0: GUAUVBP
+Rack 1: GUAUVBP
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | EEILRRU | RELIURE | H4 | 66 | 0 | *
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | EEILRRU | RELIURE | H4 | 66 | *
- Total: 66
Rack 0: GUAUVBP
Rack 1: GUAUVBP
+Score 0: 66
+Score 1: 66
commande> q
fin du mode duplicate
commande> q
Index: test/duplicate_joker_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_joker_variant.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/duplicate_joker_variant.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/duplicate_joker_variant.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -7,8 +7,8 @@
AK?EZEN
commande> j gENEZ h8
commande> a S
-Joueur 0: 46
-Joueur 1: 48
+Score 0: 46
+Score 1: 48
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A - - - - - - - - - - - - - - -
@@ -30,20 +30,19 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
8 2 2 3 13 2 2 2 8 1 0 5 3 5 6 2 1 6 5 6 6 2 1 1 1 1 2
commande> a p
-Eliot 1.5
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | AK?EZEN | AKENEs | H3 | 48 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AK?EZEN | AKENEs | H3 | 48 | 1 |
-
- Total: 48
Rack 0: Z+IL?ENT
Rack 1: Z+IL?ENT
+Score 0: 46
+Score 1: 48
commande> j pLANTIEZ 3f
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -66,21 +65,20 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
8 2 2 3 12 2 2 2 7 1 0 4 3 4 6 1 1 6 5 5 6 2 1 1 1 0 2
commande> a p
-Eliot 1.5
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | AK?EZEN | AKENEs | H3 | 48 |
+ 2 | 0 | Z+IL?ENT | pLANTIEZ | 3F | 86 | *
-Game type: Duplicate
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AK?EZEN | AKENEs | H3 | 48 | 1 |
- 2 | Z+IL?ENT | pLANTIEZ | 3F | 86 | 0 | *
-
- Total: 134
Rack 0: DEDOTC?
Rack 1: DEDOTC?
+Score 0: 132
+Score 1: 134
commande> j DECODaT g5
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -103,22 +101,21 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
7 2 1 1 11 2 2 2 7 1 0 4 3 4 5 1 1 6 5 4 6 2 1 1 1 0 2
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AK?EZEN | AKENEs | H3 | 48 | 1 |
- 2 | Z+IL?ENT | pLANTIEZ | 3F | 86 | 0 | *
- 3 | DEDOTC? | DECODaT | G5 | 79 | 0 | *
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | AK?EZEN | AKENEs | H3 | 48 |
+ 2 | 0 | Z+IL?ENT | pLANTIEZ | 3F | 86 | *
+ 3 | 0 | DEDOTC? | DECODaT | G5 | 79 | *
- Total: 213
Rack 0: RABEGE?
Rack 1: RABEGE?
+Score 0: 211
+Score 1: 213
commande> j dEPLANTIEZ 3d
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -141,23 +138,22 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
6 1 1 1 9 2 1 1 7 1 0 4 3 4 5 1 1 5 5 4 6 2 1 1 1 0 2
commande> a p
-Eliot 1.5
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | AK?EZEN | AKENEs | H3 | 48 |
+ 2 | 0 | Z+IL?ENT | pLANTIEZ | 3F | 86 | *
+ 3 | 0 | DEDOTC? | DECODaT | G5 | 79 | *
+ 4 | 1 | RABEGE? | hEBERGEA | L2 | 72 | *
-Game type: Duplicate
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AK?EZEN | AKENEs | H3 | 48 | 1 |
- 2 | Z+IL?ENT | pLANTIEZ | 3F | 86 | 0 | *
- 3 | DEDOTC? | DECODaT | G5 | 79 | 0 | *
- 4 | RABEGE? | hEBERGEA | L2 | 72 | 1 | *
-
- Total: 285
Rack 0: X?MFETR
Rack 1: X?MFETR
+Score 0: 231
+Score 1: 285
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -177,22 +173,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AK?EZEN | AKENEs | H3 | 48 | 1 |
- 2 | Z+IL?ENT | pLANTIEZ | 3F | 86 | 0 | *
- 3 | DEDOTC? | DECODaT | G5 | 79 | 0 | *
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | AK?EZEN | AKENEs | H3 | 48 |
+ 2 | 0 | Z+IL?ENT | pLANTIEZ | 3F | 86 | *
+ 3 | 0 | DEDOTC? | DECODaT | G5 | 79 | *
- Total: 213
Rack 0: RABEGE?
Rack 1: RABEGE?
+Score 0: 211
+Score 1: 213
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -212,21 +207,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AK?EZEN | AKENEs | H3 | 48 | 1 |
- 2 | Z+IL?ENT | pLANTIEZ | 3F | 86 | 0 | *
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | AK?EZEN | AKENEs | H3 | 48 |
+ 2 | 0 | Z+IL?ENT | pLANTIEZ | 3F | 86 | *
- Total: 134
Rack 0: DEDOTC?
Rack 1: DEDOTC?
+Score 0: 132
+Score 1: 134
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
8 2 2 3 12 2 2 2 7 1 0 4 3 4 6 1 1 6 5 5 6 2 1 1 1 0 2
Index: test/duplicate_navigation.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_navigation.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/duplicate_navigation.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/duplicate_navigation.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -24,21 +24,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
-
- Total: 0
Rack 0: JL
Rack 1: IMEJVSL
Rack 2: IMEJVSL
+Score 0: 26
+Score 1: 0
+Score 2: 0
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -58,21 +57,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
-
- Total: 0
Rack 0: IMEJVSL
Rack 1: IMEJVSL
Rack 2: IMEJVSL
+Score 0: 0
+Score 1: 0
+Score 2: 0
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -92,21 +90,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- Total: 0
Rack 0: JL
Rack 1: IMEJVSL
Rack 2: IMEJVSL
+Score 0: 26
+Score 1: 0
+Score 2: 0
commande> j JE h8
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -126,22 +123,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
-
- Total: 26
Rack 0: JL+NHAYG
Rack 1: JL+NHAYG
Rack 2: JL+NHAYG
+Score 0: 26
+Score 1: 18
+Score 2: 26
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -161,21 +157,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- Total: 0
Rack 0: IMEJVSL
Rack 1: IMEJVSL
Rack 2: IMEJVSL
+Score 0: 0
+Score 1: 0
+Score 2: 0
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -195,32 +190,31 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
-
- Total: 26
Rack 0: JL+NHAYG
Rack 1: JL+NHAYG
Rack 2: JL+NHAYG
+Score 0: 26
+Score 1: 18
+Score 2: 26
commande> n 1
commande> j JAN g7
commande> a T
-Joueur 0: JLNHAYG
-Joueur 1: GHLY
-Joueur 2: JLNHAYG
+Rack 0: JL+NHAYG
+Rack 1: GHLY
+Rack 2: JL+NHAYG
commande> a S
-Joueur 0: 26
-Joueur 1: 56
-Joueur 2: 26
+Score 0: 26
+Score 1: 56
+Score 2: 26
commande> h r
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -240,22 +234,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
- Total: 26
Rack 0: JL+NHAYG
Rack 1: GHLY
Rack 2: JL+NHAYG
+Score 0: 26
+Score 1: 56
+Score 2: 26
commande> j AH i6
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -275,23 +268,22 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
- 2 | JL+NHAYG | JAN | G7 | 38 | 1 |
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
+ 2 | 1 | JL+NHAYG | JAN | G7 | 38 |
- Total: 64
Rack 0: GHLY+ELA
Rack 1: GHLY+ELA
Rack 2: GHLY+ELA
+Score 0: 47
+Score 1: 56
+Score 2: 64
commande> j AY f9
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -311,27 +303,26 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
+ 2 | 1 | JL+NHAYG | JAN | G7 | 38 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
- 2 | JL+NHAYG | JAN | G7 | 38 | 1 |
-
- Total: 64
Rack 0: EGHLL
Rack 1: GHLY+ELA
Rack 2: GHLY+ELA
+Score 0: 80
+Score 1: 56
+Score 2: 64
commande> a S
-Joueur 0: 80
-Joueur 1: 56
-Joueur 2: 64
+Score 0: 80
+Score 1: 56
+Score 2: 64
commande> h f
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -351,21 +342,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- Total: 0
Rack 0: IMEJVSL
Rack 1: IMEJVSL
Rack 2: IMEJVSL
+Score 0: 0
+Score 1: 0
+Score 2: 0
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -385,22 +375,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
-
- Total: 26
Rack 0: JL+NHAYG
Rack 1: JL+NHAYG
Rack 2: JL+NHAYG
+Score 0: 26
+Score 1: 18
+Score 2: 26
commande> h l
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -420,23 +409,22 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
- 2 | JL+NHAYG | JAN | G7 | 38 | 1 |
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
+ 2 | 1 | JL+NHAYG | JAN | G7 | 38 |
- Total: 64
Rack 0: EGHLL
Rack 1: GHLY+ELA
Rack 2: GHLY+ELA
+Score 0: 80
+Score 1: 56
+Score 2: 64
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -456,23 +444,22 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
- 2 | JL+NHAYG | JAN | G7 | 38 | 1 |
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
+ 2 | 1 | JL+NHAYG | JAN | G7 | 38 |
- Total: 64
Rack 0: GHLY+ELA
Rack 1: GHLY+ELA
Rack 2: GHLY+ELA
+Score 0: 47
+Score 1: 56
+Score 2: 64
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -492,22 +479,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
-
- Total: 26
Rack 0: JL+NHAYG
Rack 1: JL+NHAYG
Rack 2: JL+NHAYG
+Score 0: 26
+Score 1: 18
+Score 2: 26
commande> j JAN g7
Cannot add a command to an old turn
commande> h r
@@ -529,22 +515,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
+Game: player 2 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
- Total: 26
Rack 0: JL+NHAYG
Rack 1: JL+NHAYG
Rack 2: JL+NHAYG
+Score 0: 26
+Score 1: 18
+Score 2: 26
commande> j JAN g7
commande> j JE 7G
commande> a g
@@ -565,23 +550,22 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | IMEJVSL | VIMES | H4 | 26 | 0 |
- 2 | JL+NHAYG | JAN | G7 | 38 | 1 |
+Game: player 1 out of 3
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | IMEJVSL | VIMES | H4 | 26 |
+ 2 | 1 | JL+NHAYG | JAN | G7 | 38 |
- Total: 64
Rack 0: GHLY+ITA
Rack 1: GHLY+ITA
Rack 2: GHLY+ITA
+Score 0: 43
+Score 1: 56
+Score 2: 64
commande> q
fin du mode duplicate
commande> q
Index: test/duplicate_no_point.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/duplicate_no_point.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/duplicate_no_point.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/duplicate_no_point.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -9,26 +9,25 @@
commande> j XXX a1
commande> j ay h8
commande> a T
-Joueur 0: AAENTUL
-Joueur 1: AAENTUL
+Rack 0: AAENT+UL
+Rack 1: AAENT+UL
commande> a S
-Joueur 0: 0
-Joueur 1: 0
+Score 0: 0
+Score 1: 0
commande> a p
-Eliot 1.5
-
-Game type: Duplicate
-Player 0: Human
-Player 1: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ATNE??A | ay | H8 | 0 | 1 |
+Game: player 1 out of 2
+Game: mode=Duplicate
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 1 | ATNE??A | ay | H8 | 0 |
- Total: 0
Rack 0: AAENT+UL
Rack 1: AAENT+UL
+Score 0: 0
+Score 1: 0
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A - - - - - - - - - - - - - - -
Index: test/freegame_3_ai.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_3_ai.ref,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- test/freegame_3_ai.ref 23 Jun 2009 21:36:33 -0000 1.7
+++ test/freegame_3_ai.ref 29 Nov 2009 16:01:33 -0000 1.8
@@ -4,46 +4,45 @@
mode partie libre
[?] pour l'aide
commande> a T
-Joueur 0: KSROCT
-Joueur 1:
-Joueur 2: DIUDGEA
+Rack 0: KS+ROCT
+Rack 1:
+Rack 2: DIU+DGEA
commande> a S
-Joueur 0: 296
-Joueur 1: 362
-Joueur 2: 263
+Score 0: 296
+Score 1: 362
+Score 2: 263
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Computer
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | RAHITRD | HARDI | H4 | 26 | 0 |
- 2 | ?TIEXFA | FAXAIEnT | 5E | 126 | 1 | *
- 3 | ATOSBUF | BOUTEFAS | J1 | 73 | 2 | *
- 4 | RT+AREEN | ENTERRAI | 8A | 77 | 0 | *
- 5 | RZUGNSS | AZURS | F5 | 34 | 1 |
- 6 | MIMLLOP | PLOMB | 1F | 30 | 2 |
- 7 | EEMNETV | VETEMENT | C6 | 78 | 0 | *
- 8 | GNRS+PEN | PURGES | 3I | 24 | 1 |
- 9 | ILM+HSVI | VIS | 14A | 25 | 2 |
- 10 | AWELOUB | BAVE | A12 | 36 | 0 |
- 11 | NN+ELEEE | SELENE | 8J | 21 | 1 |
- 12 | HILM+?IC | aLCHIMIE | A1 | 101 | 2 | *
- 13 | LOUW+ULS | SLOW | N3 | 33 | 0 |
- 14 | EN+STAAI | NANTAISE | N8 | 70 | 1 | *
- 15 | DIJUUYO | JOYAU | 12K | 44 | 2 |
- 16 | LSUU+KAQ | AUQUEL | 15J | 63 | 0 |
- 17 | OENIREN | NERONIEN | 10G | 60 | 1 | *
+Game: player 2 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | RAHITRD | HARDI | H4 | 26 |
+ 2 | 1 | ?TIEXFA | FAXAIEnT | 5E | 126 | *
+ 3 | 2 | ATOSBUF | BOUTEFAS | J1 | 73 | *
+ 4 | 0 | RT+AREEN | ENTERRAI | 8A | 77 | *
+ 5 | 1 | RZUGNSS | AZURS | F5 | 34 |
+ 6 | 2 | MIMLLOP | PLOMB | 1F | 30 |
+ 7 | 0 | EEMNETV | VETEMENT | C6 | 78 | *
+ 8 | 1 | GNRS+PEN | PURGES | 3I | 24 |
+ 9 | 2 | ILM+HSVI | VIS | 14A | 25 |
+ 10 | 0 | AWELOUB | BAVE | A12 | 36 |
+ 11 | 1 | NN+ELEEE | SELENE | 8J | 21 |
+ 12 | 2 | HILM+?IC | aLCHIMIE | A1 | 101 | *
+ 13 | 0 | LOUW+ULS | SLOW | N3 | 33 |
+ 14 | 1 | EN+STAAI | NANTAISE | N8 | 70 | *
+ 15 | 2 | DIJUUYO | JOYAU | 12K | 44 |
+ 16 | 0 | LSUU+KAQ | AUQUEL | 15J | 63 |
+ 17 | 1 | OENIREN | NERONIEN | 10G | 60 | *
- Total: 921
Rack 0: KS+ROCT
Rack 1:
Rack 2: DIU+DGEA
+Score 0: 296
+Score 1: 362
+Score 2: 263
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A a L C H I M I E - - - B A V E
Index: test/freegame_change.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_change.ref,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/freegame_change.ref 23 Nov 2008 08:33:16 -0000 1.4
+++ test/freegame_change.ref 29 Nov 2009 16:01:33 -0000 1.5
@@ -4,46 +4,45 @@
mode partie libre
[?] pour l'aide
commande> a T
-Joueur 0: JNNEDEI
-Joueur 1: TLAEOWA
+Rack 0: JNNEDEI
+Rack 1: TLAEOWA
commande> p JID
commande> a T
-Joueur 0: EENNMEN
-Joueur 1: TLAEOWA
+Rack 0: EENN+MEN
+Rack 1: TLAEOWA
commande> p aowalt
commande> a T
-Joueur 0: EENNMEN
-Joueur 1: EEEGAIS
+Rack 0: EENN+MEN
+Rack 1: E+EEGAIS
commande> p MA
commande> a T
-Joueur 0: EENNMEN
-Joueur 1: EEEGAIS
+Rack 0: EENN+MEN
+Rack 1: E+EEGAIS
commande> p MN
commande> a T
-Joueur 0: EEENNER
-Joueur 1: EEEGAIS
+Rack 0: EEENN+ER
+Rack 1: E+EEGAIS
commande> p SGEEEAI
commande> a T
-Joueur 0: EEENNER
-Joueur 1: HAAUAUO
+Rack 0: EEENN+ER
+Rack 1: HAAUAUO
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | JNNEDEI | (-JID) | - | 0 | 0 |
- 2 | TLAEOWA | (-AOWALT) | - | 0 | 1 |
- 3 | EENN+MEN | (-MN) | - | 0 | 0 |
- 4 | E+EEGAIS | (-SGEEEAI) | - | 0 | 1 |
+Game: player 1 out of 2
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | JNNEDEI | [JID] | - | 0 |
+ 2 | 1 | TLAEOWA | [AOWALT] | - | 0 |
+ 3 | 0 | EENN+MEN | [MN] | - | 0 |
+ 4 | 1 | E+EEGAIS | [SGEEEAI] | - | 0 |
- Total: 0
Rack 0: EEENN+ER
Rack 1: HAAUAUO
+Score 0: 0
+Score 1: 0
commande> q
fin du mode partie libre
commande> q
Index: test/freegame_explosive_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_explosive_variant.ref,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/freegame_explosive_variant.ref 23 Jun 2009 21:36:33 -0000 1.3
+++ test/freegame_explosive_variant.ref 29 Nov 2009 16:01:33 -0000 1.4
@@ -4,8 +4,8 @@
mode partie libre
[?] pour l'aide
commande> a T
-Joueur 0: ETUDALN
-Joueur 1: HMIRCES
+Rack 0: ETUDALN
+Rack 1: HMIRCES
commande> j ADULENT h3
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -25,8 +25,8 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a T
-Joueur 0: XRAETEL
-Joueur 1: UEQNIKN
+Rack 0: XRAETEL
+Rack 1: UEQNIKN
commande> j EXULTERA 5f
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -46,8 +46,8 @@
N - - - N I Q U E - - - - - - -
O - - - - - - - - - - - - - - -
commande> a T
-Joueur 0: DITTSAE
-Joueur 1: KNPRRJE
+Rack 0: DITTSAE
+Rack 1: KN+PRRJE
commande> j EDITATES F5
commande> a gm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -67,8 +67,8 @@
N - # - N I Q U E - * - - - # -
O @ - - + - - - R - - - + - - @
commande> a T
-Joueur 0: ERIMASG
-Joueur 1: NPVRNOE
+Rack 0: ERIMASG
+Rack 1: NP+VRNOE
commande> j EGERMAIS 11d
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -88,30 +88,29 @@
N - - - N I Q U E - - - - - - -
O - - - - - - - R - - - - - - -
commande> a S
-Joueur 0: 309
-Joueur 1: 248
+Score 0: 309
+Score 1: 248
commande> a p
-Eliot 1.5
+Game: player 1 out of 2
+Game: mode=Free game
+Game: variant=explosive
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | ETUDALN | ADULENT | H3 | 70 | *
+ 2 | 1 | HMIRCES | CHARISME | 3F | 88 | *
+ 3 | 0 | XRAETEL | EXULTERA | 5F | 84 | *
+ 4 | 1 | UEQNIKN | NIQUE | N4 | 46 |
+ 5 | 0 | DITTSAE | EDITATES | F5 | 65 | *
+ 6 | 1 | KN+PRRJE | JERKER | 8J | 69 |
+ 7 | 0 | ERIMASG | EGERMAIS | 11D | 90 | *
+ 8 | 1 | NP+VRNOE | PREVOT | 8A | 45 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ETUDALN | ADULENT | H3 | 70 | 0 | *
- 2 | HMIRCES | CHARISME | 3F | 88 | 1 | *
- 3 | XRAETEL | EXULTERA | 5F | 84 | 0 | *
- 4 | UEQNIKN | NIQUE | N4 | 46 | 1 |
- 5 | DITTSAE | EDITATES | F5 | 65 | 0 | *
- 6 | KN+PRRJE | JERKER | 8J | 69 | 1 |
- 7 | ERIMASG | EGERMAIS | 11D | 90 | 0 | *
- 8 | NP+VRNOE | PREVOT | 8A | 45 | 1 |
-
- Total: 557
Rack 0: LANBDII
Rack 1: NN+ITEGU
+Score 0: 309
+Score 1: 248
commande> q
fin du mode partie libre
commande> q
Index: test/freegame_joker_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_joker_variant.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/freegame_joker_variant.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/freegame_joker_variant.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -4,8 +4,8 @@
mode partie libre
[?] pour l'aide
commande> a T
-Joueur 0: ?AAUGOE
-Joueur 1: EP?TFTI
+Rack 0: ?AAUGOE
+Rack 1: EP?TFTI
commande> p
commande> p
commande> p
@@ -32,29 +32,28 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
6 0 1 2 11 1 2 2 6 1 1 5 2 5 5 1 1 3 4 4 5 1 0 1 1 1 2
commande> a p
-Eliot 1.5
+Game: player 1 out of 2
+Game: mode=Free game
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | ?AAUGOE | (PASS) | - | 0 |
+ 2 | 1 | EP?TFTI | FrIPE | H4 | 26 |
+ 3 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 4 | 1 | TT+EB?AN | BATEReNT | 5D | 86 | *
+ 5 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 6 | 1 | RCWV?AB | WeB | 9G | 36 |
+ 7 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 8 | 1 | ACRV+SA? | VAiNCRAS | J2 | 91 | *
+ 9 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 10 | 1 | USOM?DM | MOrDUS | 10C | 34 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ?AAUGOE | (PASS) | - | 0 | 0 |
- 2 | EP?TFTI | FrIPE | H4 | 26 | 1 |
- 3 | AAEGOU? | (PASS) | - | 0 | 0 |
- 4 | TT+EB?AN | BATEReNT | 5D | 86 | 1 | *
- 5 | AAEGOU? | (PASS) | - | 0 | 0 |
- 6 | RCWV?AB | WeB | 9G | 36 | 1 |
- 7 | AAEGOU? | (PASS) | - | 0 | 0 |
- 8 | ACRV+SA? | VAiNCRAS | J2 | 91 | 1 | *
- 9 | AAEGOU? | (PASS) | - | 0 | 0 |
- 10 | USOM?DM | MOrDUS | 10C | 34 | 1 |
-
- Total: 273
Rack 0: AAEGOU?
Rack 1: M+EEOSQ?
+Score 0: 0
+Score 1: 273
commande> j VExA 2J
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -74,8 +73,8 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a T
-Joueur 0: AGOU?HD
-Joueur 1: IRLF?DN
+Rack 0: AGOU+?HD
+Rack 1: IRLF?DN
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
5 0 1 2 8 1 2 2 6 1 1 5 1 5 4 1 0 3 3 4 4 1 0 0 1 1 2
@@ -98,42 +97,41 @@
N L I N D O R - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a T
-Joueur 0: ADGHUVC
-Joueur 1: FUI?ONL
+Rack 0: ADGHU+VC
+Rack 1: F+UI?ONL
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
5 0 1 1 8 1 2 2 5 1 1 4 1 4 2 1 0 2 3 4 4 1 0 0 1 1 1
commande> p
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ?AAUGOE | (PASS) | - | 0 | 0 |
- 2 | EP?TFTI | FrIPE | H4 | 26 | 1 |
- 3 | AAEGOU? | (PASS) | - | 0 | 0 |
- 4 | TT+EB?AN | BATEReNT | 5D | 86 | 1 | *
- 5 | AAEGOU? | (PASS) | - | 0 | 0 |
- 6 | RCWV?AB | WeB | 9G | 36 | 1 |
- 7 | AAEGOU? | (PASS) | - | 0 | 0 |
- 8 | ACRV+SA? | VAiNCRAS | J2 | 91 | 1 | *
- 9 | AAEGOU? | (PASS) | - | 0 | 0 |
- 10 | USOM?DM | MOrDUS | 10C | 34 | 1 |
- 11 | AAEGOU? | VExA | 2J | 6 | 0 |
- 12 | M+EEOSQ? | MORESQuE | E8 | 80 | 1 | *
- 13 | AGOU+?HD | ExO | 15E | 2 | 0 |
- 14 | IRLF?DN | LINDoR | N1 | 50 | 1 |
- 15 | ADGHU+VC | (PASS) | - | 0 | 0 |
- 16 | F+UI?ONL | FLIQUONs | 13B | 86 | 1 | *
+Game: player 1 out of 2
+Game: mode=Free game
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | ?AAUGOE | (PASS) | - | 0 |
+ 2 | 1 | EP?TFTI | FrIPE | H4 | 26 |
+ 3 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 4 | 1 | TT+EB?AN | BATEReNT | 5D | 86 | *
+ 5 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 6 | 1 | RCWV?AB | WeB | 9G | 36 |
+ 7 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 8 | 1 | ACRV+SA? | VAiNCRAS | J2 | 91 | *
+ 9 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 10 | 1 | USOM?DM | MOrDUS | 10C | 34 |
+ 11 | 0 | AAEGOU? | VExA | 2J | 6 |
+ 12 | 1 | M+EEOSQ? | MORESQuE | E8 | 80 | *
+ 13 | 0 | AGOU+?HD | ExO | 15E | 2 |
+ 14 | 1 | IRLF?DN | LINDoR | N1 | 50 |
+ 15 | 0 | ADGHU+VC | (PASS) | - | 0 |
+ 16 | 1 | F+UI?ONL | FLIQUONs | 13B | 86 | *
- Total: 497
Rack 0: ACDGHUV
Rack 1: EATLZL?
+Score 0: 8
+Score 1: 489
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
5 0 1 1 8 0 2 2 4 1 1 3 1 3 1 1 0 2 2 4 3 1 0 0 1 1 1
@@ -156,30 +154,29 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 2
+Game: mode=Free game
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | ?AAUGOE | (PASS) | - | 0 |
+ 2 | 1 | EP?TFTI | FrIPE | H4 | 26 |
+ 3 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 4 | 1 | TT+EB?AN | BATEReNT | 5D | 86 | *
+ 5 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 6 | 1 | RCWV?AB | WeB | 9G | 36 |
+ 7 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 8 | 1 | ACRV+SA? | VAiNCRAS | J2 | 91 | *
+ 9 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 10 | 1 | USOM?DM | MOrDUS | 10C | 34 |
+ 11 | 0 | AAEGOU? | VExA | 2J | 6 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ?AAUGOE | (PASS) | - | 0 | 0 |
- 2 | EP?TFTI | FrIPE | H4 | 26 | 1 |
- 3 | AAEGOU? | (PASS) | - | 0 | 0 |
- 4 | TT+EB?AN | BATEReNT | 5D | 86 | 1 | *
- 5 | AAEGOU? | (PASS) | - | 0 | 0 |
- 6 | RCWV?AB | WeB | 9G | 36 | 1 |
- 7 | AAEGOU? | (PASS) | - | 0 | 0 |
- 8 | ACRV+SA? | VAiNCRAS | J2 | 91 | 1 | *
- 9 | AAEGOU? | (PASS) | - | 0 | 0 |
- 10 | USOM?DM | MOrDUS | 10C | 34 | 1 |
- 11 | AAEGOU? | VExA | 2J | 6 | 0 |
-
- Total: 279
Rack 0: AGOU+?HD
Rack 1: M+EEOSQ?
+Score 0: 6
+Score 1: 273
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
5 0 1 2 10 1 2 2 6 1 1 5 2 5 5 1 1 3 4 4 5 1 0 0 1 1 2
@@ -202,29 +199,28 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | ?AAUGOE | (PASS) | - | 0 | 0 |
- 2 | EP?TFTI | FrIPE | H4 | 26 | 1 |
- 3 | AAEGOU? | (PASS) | - | 0 | 0 |
- 4 | TT+EB?AN | BATEReNT | 5D | 86 | 1 | *
- 5 | AAEGOU? | (PASS) | - | 0 | 0 |
- 6 | RCWV?AB | WeB | 9G | 36 | 1 |
- 7 | AAEGOU? | (PASS) | - | 0 | 0 |
- 8 | ACRV+SA? | VAiNCRAS | J2 | 91 | 1 | *
- 9 | AAEGOU? | (PASS) | - | 0 | 0 |
- 10 | USOM?DM | MOrDUS | 10C | 34 | 1 |
+Game: player 1 out of 2
+Game: mode=Free game
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | ?AAUGOE | (PASS) | - | 0 |
+ 2 | 1 | EP?TFTI | FrIPE | H4 | 26 |
+ 3 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 4 | 1 | TT+EB?AN | BATEReNT | 5D | 86 | *
+ 5 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 6 | 1 | RCWV?AB | WeB | 9G | 36 |
+ 7 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 8 | 1 | ACRV+SA? | VAiNCRAS | J2 | 91 | *
+ 9 | 0 | AAEGOU? | (PASS) | - | 0 |
+ 10 | 1 | USOM?DM | MOrDUS | 10C | 34 |
- Total: 273
Rack 0: AAEGOU?
Rack 1: M+EEOSQ?
+Score 0: 0
+Score 1: 273
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
6 0 1 2 11 1 2 2 6 1 1 5 2 5 5 1 1 3 4 4 5 1 0 1 1 1 2
Index: test/freegame_navigation.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_navigation.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/freegame_navigation.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/freegame_navigation.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -4,9 +4,9 @@
mode partie libre
[?] pour l'aide
commande> a T
-Joueur 0: NONTEEL
-Joueur 1: NBZEUAU
-Joueur 2: NUDATMG
+Rack 0: NONTEEL
+Rack 1: NBZEUAU
+Rack 2: NUDATMG
commande> j TONNE h4
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -26,24 +26,23 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
-
- Total: 66
Rack 0: EL+HI?WE
Rack 1: BNU+FYTE
Rack 2: DGU+IDVA
+Score 0: 12
+Score 1: 36
+Score 2: 18
commande> j WELcHE 3c
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -63,27 +62,26 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | WELcHE | 3C | 48 | 0 |
- 5 | BNU+FYTE | BEY | 2H | 43 | 1 |
- 6 | DGU+IDVA | VAGI | 1I | 25 | 2 |
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | WELcHE | 3C | 48 |
+ 5 | 1 | BNU+FYTE | BEY | 2H | 43 |
+ 6 | 2 | DGU+IDVA | VAGI | 1I | 25 |
- Total: 182
Rack 0: I+SSPRNS
Rack 1: FNTU+FIA
Rack 2: DDU+?ERA
+Score 0: 60
+Score 1: 79
+Score 2: 43
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -103,26 +101,25 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 3 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | WELcHE | 3C | 48 |
+ 5 | 1 | BNU+FYTE | BEY | 2H | 43 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | WELcHE | 3C | 48 | 0 |
- 5 | BNU+FYTE | BEY | 2H | 43 | 1 |
-
- Total: 157
Rack 0: I+SSPRNS
Rack 1: FNTU+FIA
Rack 2: DGU+IDVA
+Score 0: 60
+Score 1: 79
+Score 2: 18
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -142,48 +139,46 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | WELcHE | 3C | 48 | 0 |
+Game: player 2 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | WELcHE | 3C | 48 |
- Total: 114
Rack 0: I+SSPRNS
Rack 1: BNU+FYTE
Rack 2: DGU+IDVA
+Score 0: 60
+Score 1: 36
+Score 2: 18
commande> h r
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | WELcHE | 3C | 48 | 0 |
- 5 | BNU+FYTE | BEY | 2H | 43 | 1 |
- 6 | DGU+IDVA | VAGI | 1I | 25 | 2 |
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | WELcHE | 3C | 48 |
+ 5 | 1 | BNU+FYTE | BEY | 2H | 43 |
+ 6 | 2 | DGU+IDVA | VAGI | 1I | 25 |
- Total: 182
Rack 0: I+SSPRNS
Rack 1: FNTU+FIA
Rack 2: DDU+?ERA
+Score 0: 60
+Score 1: 79
+Score 2: 43
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A - - - - - - - - - - - - - - -
@@ -203,21 +198,20 @@
O - - - - - - - - - - - - - - -
commande> h f
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- Total: 0
Rack 0: NONTEEL
Rack 1: NBZEUAU
Rack 2: NUDATMG
+Score 0: 0
+Score 1: 0
+Score 2: 0
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A - - - - - - - - - - - - - - -
@@ -254,22 +248,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
-
- Total: 12
Rack 0: EL+HI?WE
Rack 1: NBZEUAU
Rack 2: NUDATMG
+Score 0: 12
+Score 1: 0
+Score 2: 0
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -289,23 +282,22 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
+Game: player 3 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
- Total: 48
Rack 0: EL+HI?WE
Rack 1: BNU+FYTE
Rack 2: NUDATMG
+Score 0: 12
+Score 1: 36
+Score 2: 0
commande> h r
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -325,24 +317,23 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
- Total: 66
Rack 0: EL+HI?WE
Rack 1: BNU+FYTE
Rack 2: DGU+IDVA
+Score 0: 12
+Score 1: 36
+Score 2: 18
commande> h n
commande> j aWELE 3f
commande> a g
@@ -363,27 +354,26 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | aWELE | 3F | 30 |
+ 5 | 1 | BNU+FYTE | BEY | 9G | 34 |
+ 6 | 2 | DGU+IDVA | VAGI | 2J | 29 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | aWELE | 3F | 30 | 0 |
- 5 | BNU+FYTE | BEY | 9G | 34 | 1 |
- 6 | DGU+IDVA | VAGI | 2J | 29 | 2 |
-
- Total: 159
Rack 0: HI+CEEEP
Rack 1: FNTU+FSR
Rack 2: DDU+OREE
+Score 0: 42
+Score 1: 70
+Score 2: 47
commande> p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -403,30 +393,29 @@
N - T U R F S - - - - - - - - -
O - - - E - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | aWELE | 3F | 30 | 0 |
- 5 | BNU+FYTE | BEY | 9G | 34 | 1 |
- 6 | DGU+IDVA | VAGI | 2J | 29 | 2 |
- 7 | HI+CEEEP | (PASS) | - | 0 | 0 |
- 8 | FNTU+FSR | TURFS | N2 | 38 | 1 |
- 9 | DDU+OREE | REDORE | 4J | 22 | 2 |
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | aWELE | 3F | 30 |
+ 5 | 1 | BNU+FYTE | BEY | 9G | 34 |
+ 6 | 2 | DGU+IDVA | VAGI | 2J | 29 |
+ 7 | 0 | HI+CEEEP | (PASS) | - | 0 |
+ 8 | 1 | FNTU+FSR | TURFS | N2 | 38 |
+ 9 | 2 | DDU+OREE | REDORE | 4J | 22 |
- Total: 219
Rack 0: CEEEHIP
Rack 1: FN+IIGIA
Rack 2: DU+LRIUS
+Score 0: 42
+Score 1: 108
+Score 2: 69
commande> h f
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -446,21 +435,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
-
- Total: 0
Rack 0: NONTEEL
Rack 1: NBZEUAU
Rack 2: NUDATMG
+Score 0: 0
+Score 1: 0
+Score 2: 0
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -480,22 +468,21 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 2 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
-
- Total: 12
Rack 0: EL+HI?WE
Rack 1: NBZEUAU
Rack 2: NUDATMG
+Score 0: 12
+Score 1: 0
+Score 2: 0
commande> h l
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -515,30 +502,29 @@
N - T U R F S - - - - - - - - -
O - - - E - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-Player 2: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | NONTEEL | TONNE | H4 | 12 | 0 |
- 2 | NBZEUAU | AUNEZ | 6F | 36 | 1 |
- 3 | NUDATMG | MATON | 5E | 18 | 2 |
- 4 | EL+HI?WE | aWELE | 3F | 30 | 0 |
- 5 | BNU+FYTE | BEY | 9G | 34 | 1 |
- 6 | DGU+IDVA | VAGI | 2J | 29 | 2 |
- 7 | HI+CEEEP | (PASS) | - | 0 | 0 |
- 8 | FNTU+FSR | TURFS | N2 | 38 | 1 |
- 9 | DDU+OREE | REDORE | 4J | 22 | 2 |
+Game: player 1 out of 3
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | NONTEEL | TONNE | H4 | 12 |
+ 2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
+ 3 | 2 | NUDATMG | MATON | 5E | 18 |
+ 4 | 0 | EL+HI?WE | aWELE | 3F | 30 |
+ 5 | 1 | BNU+FYTE | BEY | 9G | 34 |
+ 6 | 2 | DGU+IDVA | VAGI | 2J | 29 |
+ 7 | 0 | HI+CEEEP | (PASS) | - | 0 |
+ 8 | 1 | FNTU+FSR | TURFS | N2 | 38 |
+ 9 | 2 | DDU+OREE | REDORE | 4J | 22 |
- Total: 219
Rack 0: CEEEHIP
Rack 1: FN+IIGIA
Rack 2: DU+LRIUS
+Score 0: 42
+Score 1: 108
+Score 2: 69
commande> q
fin du mode partie libre
commande> q
Index: test/freegame_passing.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_passing.ref,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- test/freegame_passing.ref 23 Nov 2008 08:33:16 -0000 1.8
+++ test/freegame_passing.ref 29 Nov 2009 16:01:33 -0000 1.9
@@ -4,8 +4,8 @@
mode partie libre
[?] pour l'aide
commande> a S
-Joueur 0: 0
-Joueur 1: 0
+Score 0: 0
+Score 1: 0
commande> p
commande> p
commande> a t
@@ -35,69 +35,68 @@
commande> p
commande> p
commande> a S
-Joueur 0: -11
-Joueur 1: 793
+Score 0: -11
+Score 1: 793
commande> a T
-Joueur 0: AGSSTUV
-Joueur 1:
+Rack 0: AGSSTUV
+Rack 1:
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-Player 1: Computer
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | (PASS) | - | 0 | 0 |
- 2 | LXCORNU | ROUX | H5 | 26 | 1 |
- 3 | EGISSTU | (PASS) | - | 0 | 0 |
- 4 | CLN+?BEC | CiNECLUB | 7B | 67 | 1 | *
- 5 | EGISSTU | (-UIET) | - | 0 | 0 |
- 6 | LLESYEO | LYSEE | J5 | 48 | 1 |
- 7 | GSS+TAUV | (PASS) | - | 0 | 0 |
- 8 | LO+AAOGT | GALA | 8A | 26 | 1 |
- 9 | AGSSTUV | (PASS) | - | 0 | 0 |
- 10 | OOT+EMTU | EMOTTE | 8J | 24 | 1 |
- 11 | AGSSTUV | (PASS) | - | 0 | 0 |
- 12 | OU+AOILU | AUX | 8F | 18 | 1 |
- 13 | AGSSTUV | (PASS) | - | 0 | 0 |
- 14 | ILOOU+NF | FOULONNAI | D1 | 82 | 1 | *
- 15 | AGSSTUV | (PASS) | - | 0 | 0 |
- 16 | UTEISEE | FETEES | 1D | 27 | 1 |
- 17 | AGSSTUV | (PASS) | - | 0 | 0 |
- 18 | IU+IURIO | MURI | K8 | 12 | 1 |
- 19 | AGSSTUV | (PASS) | - | 0 | 0 |
- 20 | IIOU+VDS | VISOU | 10B | 31 | 1 |
- 21 | AGSSTUV | (PASS) | - | 0 | 0 |
- 22 | DI+IERNE | DENIER | 12G | 22 | 1 |
- 23 | AGSSTUV | (PASS) | - | 0 | 0 |
- 24 | I+TBIADK | BATIK | N6 | 42 | 1 |
- 25 | AGSSTUV | (PASS) | - | 0 | 0 |
- 26 | DIT+EHEQ | EQUIDE | 3B | 30 | 1 |
- 27 | AGSSTUV | (PASS) | - | 0 | 0 |
- 28 | HT+EPARR | TEPHRA | O1 | 49 | 1 |
- 29 | AGSSTUV | (PASS) | - | 0 | 0 |
- 30 | R+OE?NSF | rENFORTS | M2 | 85 | 1 | *
- 31 | AGSSTUV | (PASS) | - | 0 | 0 |
- 32 | TMEAALP | EMPALAT | 13B | 78 | 1 | *
- 33 | AGSSTUV | (PASS) | - | 0 | 0 |
- 34 | ZDMAWER | DAMEZ | M11 | 40 | 1 |
- 35 | AGSSTUV | (PASS) | - | 0 | 0 |
- 36 | RW+HINJI | HIE | E5 | 24 | 1 |
- 37 | AGSSTUV | (PASS) | - | 0 | 0 |
- 38 | IJNRW+N | JE | B2 | 18 | 1 |
- 39 | AGSSTUV | (PASS) | - | 0 | 0 |
- 40 | INNRW | VINER | B10 | 16 | 1 |
- 41 | AGSSTUV | (PASS) | - | 0 | 0 |
- 42 | NW | DAW | G12 | 13 | 1 |
- 43 | AGSSTUV | (PASS) | - | 0 | 0 |
- 44 | N | EN | 14M | 4 | 1 |
+Game: player 2 out of 2
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | (PASS) | - | 0 |
+ 2 | 1 | LXCORNU | ROUX | H5 | 26 |
+ 3 | 0 | EGISSTU | (PASS) | - | 0 |
+ 4 | 1 | CLN+?BEC | CiNECLUB | 7B | 67 | *
+ 5 | 0 | EGISSTU | [UIET] | - | 0 |
+ 6 | 1 | LLESYEO | LYSEE | J5 | 48 |
+ 7 | 0 | GSS+TAUV | (PASS) | - | 0 |
+ 8 | 1 | LO+AAOGT | GALA | 8A | 26 |
+ 9 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 10 | 1 | OOT+EMTU | EMOTTE | 8J | 24 |
+ 11 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 12 | 1 | OU+AOILU | AUX | 8F | 18 |
+ 13 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 14 | 1 | ILOOU+NF | FOULONNAI | D1 | 82 | *
+ 15 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 16 | 1 | UTEISEE | FETEES | 1D | 27 |
+ 17 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 18 | 1 | IU+IURIO | MURI | K8 | 12 |
+ 19 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 20 | 1 | IIOU+VDS | VISOU | 10B | 31 |
+ 21 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 22 | 1 | DI+IERNE | DENIER | 12G | 22 |
+ 23 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 24 | 1 | I+TBIADK | BATIK | N6 | 42 |
+ 25 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 26 | 1 | DIT+EHEQ | EQUIDE | 3B | 30 |
+ 27 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 28 | 1 | HT+EPARR | TEPHRA | O1 | 49 |
+ 29 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 30 | 1 | R+OE?NSF | rENFORTS | M2 | 85 | *
+ 31 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 32 | 1 | TMEAALP | EMPALAT | 13B | 78 | *
+ 33 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 34 | 1 | ZDMAWER | DAMEZ | M11 | 40 |
+ 35 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 36 | 1 | RW+HINJI | HIE | E5 | 24 |
+ 37 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 38 | 1 | IJNRW+N | JE | B2 | 18 |
+ 39 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 40 | 1 | INNRW | VINER | B10 | 16 |
+ 41 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 42 | 1 | NW | DAW | G12 | 13 |
+ 43 | 0 | AGSSTUV | (PASS) | - | 0 |
+ 44 | 1 | N | EN | 14M | 4 |
- Total: 782
Rack 0: AGSSTUV
Rack 1:
+Score 0: -11
+Score 1: 793
commande> q
fin du mode partie libre
commande> q
Index: test/freegame_play.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/freegame_play.ref,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/freegame_play.ref 23 Jun 2009 21:36:33 -0000 1.3
+++ test/freegame_play.ref 29 Nov 2009 16:01:33 -0000 1.4
@@ -9,56 +9,53 @@
commande> a t
AELMNU?
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | AMLUNE? | (PASS) | - | 0 |
-Game type: Free game
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AMLUNE? | (PASS) | - | 0 | 0 |
-
- Total: 0
Rack 0: AELMNU?
+Score 0: 0
commande> p
commande> j MALvENU h4
commande> a t
ESEASTU
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
+Game: player 1 out of 1
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | AMLUNE? | (PASS) | - | 0 |
+ 2 | 0 | AELMNU? | (PASS) | - | 0 |
+ 3 | 0 | AELMNU? | MALvENU | H4 | 68 | *
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AMLUNE? | (PASS) | - | 0 | 0 |
- 2 | AELMNU? | (PASS) | - | 0 | 0 |
- 3 | AELMNU? | MALvENU | H4 | 68 | 0 | *
-
- Total: 68
Rack 0: ESEASTU
+Score 0: 68
commande> p
commande> j SAUTEES 11H
commande> a p
-Eliot 1.5
-
-Game type: Free game
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | AMLUNE? | (PASS) | - | 0 | 0 |
- 2 | AELMNU? | (PASS) | - | 0 | 0 |
- 3 | AELMNU? | MALvENU | H4 | 68 | 0 | *
- 4 | ESEASTU | (PASS) | - | 0 | 0 |
- 5 | AEESSTU | SAUTEES | 11H | 72 | 0 | *
+Game: player 1 out of 1
+Game: mode=Free game
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | AMLUNE? | (PASS) | - | 0 |
+ 2 | 0 | AELMNU? | (PASS) | - | 0 |
+ 3 | 0 | AELMNU? | MALvENU | H4 | 68 | *
+ 4 | 0 | ESEASTU | (PASS) | - | 0 |
+ 5 | 0 | AEESSTU | SAUTEES | 11H | 72 | *
- Total: 140
Rack 0: MIWBRAE
+Score 0: 140
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A - - - - - - - - - - - - - - -
Index: test/load_game.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/load_game.ref,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/load_game.ref 23 Jun 2009 21:36:33 -0000 1.4
+++ test/load_game.ref 29 Nov 2009 16:01:33 -0000 1.5
@@ -24,38 +24,37 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | EUOFMIE | FUMEE | H4 | 26 |
+ 2 | 0 | IO+EOKAN | KIMONO | 6F | 38 |
+ 3 | 0 | AE+EWTIS | WESTIE | L4 | 49 |
+ 4 | 0 | A+EAVSLS | LAVASSE | 10H | 86 | *
+ 5 | 0 | BTUOMEQ | LOQUET | H10 | 63 |
+ 6 | 0 | BM+UNOSI | OMNIBUS | O4 | 94 | *
+ 7 | 0 | IOZXEGP | EXPIEZ | N10 | 52 |
+ 8 | 0 | GO+AETPI | TOPAZE | 15J | 60 |
+ 9 | 0 | GI+AVNCO | VAINCU | 13C | 28 |
+ 10 | 0 | GO+ESRAS | ESSORAGE | 8A | 80 | *
+ 11 | 0 | JEUDIDR | JOUR | K5 | 44 |
+ 12 | 0 | DDEI+ALY | DIALYSE | C3 | 56 |
+ 13 | 0 | D+IHUEEB | HEU | 10B | 32 |
+ 14 | 0 | BDEI+CIL | CIEL | D1 | 25 |
+ 15 | 0 | BDI+RRA? | BRADeRIE | A1 | 86 | *
+ 16 | 0 | EUGTDEA | DUT | M3 | 29 |
+ 17 | 0 | AEEG+LR? | CERcLAGE | 1D | 80 | *
+ 18 | 0 | TFLATNN | JOURNAL | K5 | 30 |
+ 19 | 0 | AFNTT+HM | MATH | D12 | 24 |
+ 20 | 0 | AFNT+NRE | FANON | I3 | 23 |
+ 21 | 0 | ERT | ET | I13 | 18 |
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | EUOFMIE | FUMEE | H4 | 26 | 0 |
- 2 | IO+EOKAN | KIMONO | 6F | 38 | 0 |
- 3 | AE+EWTIS | WESTIE | L4 | 49 | 0 |
- 4 | A+EAVSLS | LAVASSE | 10H | 86 | 0 | *
- 5 | BTUOMEQ | LOQUET | H10 | 63 | 0 |
- 6 | BM+UNOSI | OMNIBUS | O4 | 94 | 0 | *
- 7 | IOZXEGP | EXPIEZ | N10 | 52 | 0 |
- 8 | GO+AETPI | TOPAZE | 15J | 60 | 0 |
- 9 | GI+AVNCO | VAINCU | 13C | 28 | 0 |
- 10 | GO+ESRAS | ESSORAGE | 8A | 80 | 0 | *
- 11 | JEUDIDR | JOUR | K5 | 44 | 0 |
- 12 | DDEI+ALY | DIALYSE | C3 | 56 | 0 |
- 13 | D+IHUEEB | HEU | 10B | 32 | 0 |
- 14 | BDEI+CIL | CIEL | D1 | 25 | 0 |
- 15 | BDI+RRA? | BRADeRIE | A1 | 86 | 0 | *
- 16 | EUGTDEA | DUT | M3 | 29 | 0 |
- 17 | AEEG+LR? | CERcLAGE | 1D | 80 | 0 | *
- 18 | TFLATNN | JOURNAL | K5 | 30 | 0 |
- 19 | AFNTT+HM | MATH | D12 | 24 | 0 |
- 20 | AFNT+NRE | FANON | I3 | 23 | 0 |
- 21 | ERT | ET | I13 | 18 | 0 |
-
- Total: 1023
Rack 0: R
+Score 0: 1023
commande> q
fin du mode entraînement
commande> q
Index: test/load_saved_game.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/load_saved_game.ref,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- test/load_saved_game.ref 23 Jun 2009 21:36:33 -0000 1.7
+++ test/load_saved_game.ref 29 Nov 2009 16:01:33 -0000 1.8
@@ -50,21 +50,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | EA?AEBF | FABAcEE | H4 | 80 | *
+ 2 | 0 | LMUAEYE | AY | I6 | 46 |
+ 3 | 0 | EELMUJE | JUMEL | J2 | 38 |
+ 4 | 0 | EEIGLEH | EGAYEE | 7F | 32 |
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | EA?AEBF | FABAcEE | H4 | 80 | 0 | *
- 2 | LMUAEYE | AY | I6 | 46 | 0 |
- 3 | EELMUJE | JUMEL | J2 | 38 | 0 |
- 4 | EEIGLEH | EGAYEE | 7F | 32 | 0 |
-
- Total: 196
Rack 0: HIL
+Score 0: 196
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
6 1 2 3 9 1 1 2 8 0 1 4 2 6 6 2 1 6 6 6 5 2 1 1 0 1 1
@@ -94,21 +93,20 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | EA?AEBF | FABAcEE | H4 | 80 | 0 | *
- 2 | LMUAEYE | AY | I6 | 46 | 0 |
- 3 | EELMUJE | JUMEL | J2 | 38 | 0 |
- 4 | EEIGLEH | EGAYEE | 7F | 32 | 0 |
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | EA?AEBF | FABAcEE | H4 | 80 | *
+ 2 | 0 | LMUAEYE | AY | I6 | 46 |
+ 3 | 0 | EELMUJE | JUMEL | J2 | 38 |
+ 4 | 0 | EEIGLEH | EGAYEE | 7F | 32 |
- Total: 196
Rack 0: HIL
+Score 0: 196
commande> a l
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
6 1 2 3 9 1 1 2 8 0 1 4 2 6 6 2 1 6 6 6 5 2 1 1 0 1 1
Index: test/training_joker.input
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_joker.input,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/training_joker.input 11 Aug 2006 22:04:45 -0000 1.1
+++ test/training_joker.input 29 Nov 2009 16:01:33 -0000 1.2
@@ -1,5 +1,5 @@
c hutte
a g
-a P
+a p
q
q
Index: test/training_joker.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_joker.ref,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/training_joker.ref 23 Jun 2009 21:36:33 -0000 1.3
+++ test/training_joker.ref 29 Nov 2009 16:01:33 -0000 1.4
@@ -20,33 +20,39 @@
M - - N O - - - - M - - V A S E
N - - - U - - - - N - - E - - -
O - - E X I G E R A - - C Z A R
-commande> a P
-Eliot
+commande> a p
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | UTEHJDT | HUTTE | H4 | 24 |
+ 2 | 0 | DJ+NGILE | JUNGLE | 5G | 28 |
+ 3 | 0 | DI+OBURX | DOUX | 4L | 54 |
+ 4 | 0 | BIR+EEGI | EXIGER | O3 | 48 |
+ 5 | 0 | BI+TNE?N | oBTIENNE | 8A | 80 | *
+ 6 | 0 | AMIEOLE | METEO | 6F | 28 |
+ 7 | 0 | AIL+NEID | ENLAIDIT | C1 | 70 | *
+ 8 | 0 | WABFUNO | BOEUF | 1A | 33 |
+ 9 | 0 | ANW+OALU | WON | 3K | 32 |
+ 10 | 0 | AALU+PI? | MANiPULAI | F6 | 69 | *
+ 11 | 0 | ELSUICS | CELSIUS | 15C | 92 | *
+ 12 | 0 | ETFYUSR | FRAYES | 4A | 44 |
+ 13 | 0 | TU+DEMNH | HAUTE | 7E | 31 |
+ 14 | 0 | DMNT+ARA | DAMNA | 9K | 26 |
+ 15 | 0 | RT+SAIVI | SUIVRAIT | 11E | 94 | *
+ 16 | 0 | ACAOVEP | AVEC | 12L | 28 |
+ 17 | 0 | AOP+ARZO | CZAR | O12 | 45 |
+ 18 | 0 | AOOP+REK | POKER | 14H | 42 |
+ 19 | 0 | AO+TSTEM | MIES | 9E | 34 |
+ 20 | 0 | AOTT+LEQ | QAT | J10 | 26 |
+ 21 | 0 | AELOT+RS | VASE | M12 | 31 |
+ 22 | 0 | LORT | FORET | E1 | 16 |
- UTEHJDT HUTTE 24 H 4
- DJ+NGILE JUNGLE 28 5 G
- DI+OBURX DOUX 54 4 L
- BIR+EEGI EXIGER 48 O 3
- BI+TNE?N oBTIENNE * 80 8 A
- AMIEOLE METEO 28 6 F
- AIL+NEID ENLAIDIT * 70 C 1
- WABFUNO BOEUF 33 1 A
- ANW+OALU WON 32 3 K
- AALU+PI? MANiPULAI * 69 F 6
- ELSUICS CELSIUS * 92 15 C
- ETFYUSR FRAYES 44 4 A
- TU+DEMNH HAUTE 31 7 E
- DMNT+ARA DAMNA 26 9 K
- RT+SAIVI SUIVRAIT * 94 11 E
- ACAOVEP AVEC 28 12 L
- AOP+ARZO CZAR 45 O 12
- AOOP+REK POKER 42 14 H
- AO+TSTEM MIES 34 9 E
- AOTT+LEQ QAT 26 J 10
- AELOT+RS VASE 31 M 12
- LORT FORET 16 E 1
- total 975
+Rack 0: L
+Score 0: 975
commande> q
fin du mode entraînement
commande> q
Index: test/training_joker_variant.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_joker_variant.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/training_joker_variant.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/training_joker_variant.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -116,21 +116,20 @@
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
7 2 2 3 13 2 2 1 7 1 0 5 3 6 6 1 1 6 3 6 5 1 0 1 0 1 0
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=joker
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | E?ESAVP | PAVEuSE | H2 | 80 | *
+ 2 | 0 | WHISKYS | WHISKEYS | 5C | 126 | *
+ 3 | 0 | NII?NAX | kA | 3G | 1 |
+ 4 | 0 | AIINNX+? | kAS | J3 | 2 |
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | E?ESAVP | PAVEuSE | H2 | 80 | 0 | *
- 2 | WHISKYS | WHISKEYS | 5C | 126 | 0 | *
- 3 | NII?NAX | kA | 3G | 1 | 0 |
- 4 | AIINNX+? | kAS | J3 | 2 | 0 |
-
- Total: 209
Rack 0: IINNX
+Score 0: 209
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Index: test/training_navigation.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_navigation.ref,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/training_navigation.ref 23 Jun 2009 21:36:33 -0000 1.2
+++ test/training_navigation.ref 29 Nov 2009 16:01:33 -0000 1.3
@@ -36,20 +36,19 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
+ 3 | 0 | ORSU+SCD | SOURDS | J6 | 30 |
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
- 3 | ORSU+SCD | SOURDS | J6 | 30 | 0 |
-
- Total: 93
Rack 0: C
+Score 0: 93
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -69,20 +68,19 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
+ 3 | 0 | ORSU+SCD | SOURDS | J6 | 30 |
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
- 3 | ORSU+SCD | SOURDS | J6 | 30 | 0 |
-
- Total: 93
Rack 0: C
+Score 0: 93
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -102,19 +100,18 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
- Total: 63
Rack 0: ORSU
+Score 0: 63
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -134,18 +131,17 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
-
- Total: 16
Rack 0: SU
+Score 0: 16
commande> h p
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -165,17 +161,16 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
-
- Total: 0
Rack 0:
+Score 0: 0
commande> h l
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -195,20 +190,19 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
+ 3 | 0 | ORSU+SCD | SOURDS | J6 | 30 |
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
- 3 | ORSU+SCD | SOURDS | J6 | 30 | 0 |
-
- Total: 93
Rack 0: C
+Score 0: 93
commande> +
commande> a t
C?BETNL
@@ -237,20 +231,19 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
- 3 | ORSU+SCD | SOURDS | J6 | 30 | 0 |
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
+ 3 | 0 | ORSU+SCD | SOURDS | J6 | 30 |
- Total: 93
Rack 0: C
+Score 0: 93
commande> +
Cannot add a command to an old turn
commande> h f
@@ -272,17 +265,16 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
-
- Total: 0
Rack 0:
+Score 0: 0
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -302,18 +294,17 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
-
- Total: 16
Rack 0: SU
+Score 0: 16
commande> h n
commande> a g
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -333,19 +324,18 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
- Total: 63
Rack 0: ORSU
+Score 0: 63
commande> *
Cannot add a command to an old turn
commande> +
@@ -376,20 +366,19 @@
N - - - - - - - - - - - - - - -
O - - - - - - - - - - - - - - -
commande> a p
-Eliot 1.5
-
-Game type: Training
-Player 0: Human
-
- N | RACK | SOLUTION | REF | PTS | P | BONUS
- ===|==========|=================|=====|=====|===|======
- 1 | SEUTISG | GITES | H4 | 16 | 0 |
- 2 | SU+XULRO | LUX | I5 | 47 | 0 |
- 3 | HELLO | OHE | J7 | 18 | 0 |
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | SEUTISG | GITES | H4 | 16 |
+ 2 | 0 | SU+XULRO | LUX | I5 | 47 |
+ 3 | 0 | HELLO | OHE | J7 | 18 |
- Total: 81
Rack 0: LL
+Score 0: 81
commande> q
fin du mode entraînement
commande> q
Index: test/training_rosace.input
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_rosace.input,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/training_rosace.input 15 Jan 2009 20:55:57 -0000 1.4
+++ test/training_rosace.input 29 Nov 2009 16:01:33 -0000 1.5
@@ -19,7 +19,7 @@
j TYPE O12
a gd # r1
t NUU+S?GE
-a P
+a p
a t
a l
a g
Index: test/training_rosace.ref
===================================================================
RCS file: /cvsroot/eliot/eliot/test/training_rosace.ref,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- test/training_rosace.ref 23 Jun 2009 21:36:33 -0000 1.8
+++ test/training_rosace.ref 29 Nov 2009 16:01:33 -0000 1.9
@@ -54,20 +54,26 @@
Nc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][010d714e:
1][00000000:-1][00005040: 1][ffffffff:-1][ffffffff:-1]
Oc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:15][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
commande> t NUU+S?GE
-commande> a P
-Eliot
+commande> a p
+Game: player 1 out of 1
+Game: mode=Training
+Game: variant=unknown
+Game: history:
+ N | P | RACK | SOLUTION | REF | PTS | BONUS
+ ===|===|==========|================|=====|=====|======
+ 1 | 0 | WAEROSC | ROSACE | H8 | 22 |
+ 2 | 0 | W+TSREIN | WESTERN | 13G | 54 |
+ 3 | 0 | I+RDTVI? | DIVeRTIR | 8A | 83 | *
+ 4 | 0 | ELMOEAH | AH | I8 | 30 |
+ 5 | 0 | EELMO+PI | DIPLOMEE | A8 | 89 | *
+ 6 | 0 | OHUMJUI | JOUI | 12K | 37 |
+ 7 | 0 | HMU+EAUA | HUE | 14F | 34 |
+ 8 | 0 | AAMU+UBS | SAMBA | 15H | 57 |
+ 9 | 0 | UU+NYTEP | TYPE | O12 | 61 |
- WAEROSC ROSACE 22 H 8
- W+TSREIN WESTERN 54 13 G
- I+RDTVI? DIVeRTIR * 83 8 A
- ELMOEAH AH 30 I 8
- EELMO+PI DIPLOMEE * 89 A 8
- OHUMJUI JOUI 37 12 K
- HMU+EAUA HUE 34 14 F
- AAMU+UBS SAMBA 57 15 H
- UU+NYTEP TYPE 61 O 12
- total 467
+Rack 0: NUU+S?GE
+Score 0: 467
commande> a t
NUUS?GE
commande> a l
Index: utils/Makefile.am
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/Makefile.am,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- utils/Makefile.am 22 Sep 2008 21:21:45 -0000 1.12
+++ utils/Makefile.am 29 Nov 2009 16:01:34 -0000 1.13
@@ -25,7 +25,8 @@
if BUILD_TEXT
noinst_PROGRAMS += eliottxt
eliottxt_SOURCES = game_io.h game_io.cpp eliottxt.cpp
-eliottxt_LDADD = $(top_builddir)/game/libgame.a $(top_builddir)/dic/libdic.a
@LIBINTL@ @LIBCONFIG_LIBS@
+eliottxt_LDADD = $(top_builddir)/game/libgame.a $(top_builddir)/dic/libdic.a
@LIBINTL@ @LIBCONFIG_LIBS@ @ARABICA_LIBS@
+
if HAS_READLINE
eliottxt_LDADD += -lreadline
endif
@@ -34,6 +35,6 @@
if BUILD_NCURSES
bin_PROGRAMS += eliotcurses
eliotcurses_SOURCES = ncurses.cpp ncurses.h
-eliotcurses_LDADD = ../game/libgame.a ../dic/libdic.a -lncursesw @LIBINTL@
@LIBCONFIG_LIBS@
+eliotcurses_LDADD = ../game/libgame.a ../dic/libdic.a -lncursesw @LIBINTL@
@LIBCONFIG_LIBS@ @ARABICA_LIBS@
endif
Index: utils/eliottxt.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/eliottxt.cpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- utils/eliottxt.cpp 21 Sep 2009 20:10:34 -0000 1.39
+++ utils/eliottxt.cpp 29 Nov 2009 16:01:34 -0000 1.40
@@ -211,7 +211,6 @@
printf(" l -- lettres non jouées\n");
printf(" p -- partie\n");
printf(" pd -- partie (debug)\n");
- printf(" P -- partie (format standard)\n");
printf(" r -- recherche\n");
printf(" s -- score\n");
printf(" S -- score de tous les joueurs\n");
@@ -244,7 +243,6 @@
printf(" j -- joueur courant\n");
printf(" l -- lettres non jouées\n");
printf(" p -- partie\n");
- printf(" P -- partie (format standard)\n");
printf(" s -- score\n");
printf(" S -- score de tous les joueurs\n");
printf(" t -- tirage\n");
@@ -269,7 +267,6 @@
printf(" j -- joueur courant\n");
printf(" l -- lettres non jouées\n");
printf(" p -- partie\n");
- printf(" P -- partie (format standard)\n");
printf(" s -- score\n");
printf(" S -- score de tous les joueurs\n");
printf(" t -- tirage\n");
@@ -335,11 +332,13 @@
else if (displayType == L"l")
GameIO::printNonPlayed(cout, iGame);
else if (displayType == L"p")
- iGame.save(cout, PublicGame::kFILE_FORMAT_ADVANCED);
+ {
+ GameIO::printGameDebug(cout, iGame);
+ GameIO::printAllRacks(cout, iGame);
+ GameIO::printAllPoints(cout, iGame);
+ }
else if (displayType == L"pd")
GameIO::printGameDebug(cout, iGame);
- else if (displayType == L"P")
- iGame.save(cout, PublicGame::kFILE_FORMAT_STANDARD);
else if (displayType == L"r")
{
const wstring &limit = checkNumToken(tokens, 2);
@@ -430,15 +429,15 @@
const wstring &word = checkFileNameToken(tokens, 1);
if (word != L"")
{
- string filename = convertToMb(word);
- ofstream fout(filename.c_str());
- if (fout.rdstate() == ios::failbit)
+ try
+ {
+ iGame.save(convertToMb(word));
+ }
+ catch (std::exception &e)
{
- printf("impossible d'ouvrir %s\n", filename.c_str());
+ printf("Cannot save game to %ls: %s\n", word.c_str(),
e.what());
return;
}
- iGame.save(fout);
- fout.close();
}
}
}
@@ -863,14 +862,9 @@
if (wfileName != L"")
{
string filename = convertToMb(wfileName);
- Game *tmpGame =
GameFactory::Instance()->load(filename, iDic);
- if (tmpGame == NULL)
- {
- printf("erreur pendant le chargement de la
partie\n");
- }
- else
+ try
{
- PublicGame *game = new PublicGame(*tmpGame);
+ PublicGame *game = PublicGame::load(filename,
iDic);
switch (game->getMode())
{
case PublicGame::kTRAINING:
@@ -886,6 +880,11 @@
//GameFactory::Instance()->releaseGame(*game);
delete game;
}
+ catch (const std::exception &e)
+ {
+ string msg = string("Error loading the game:
") + e.what();
+ printf("%s\n", msg.c_str());
+ }
}
}
break;
@@ -893,6 +892,7 @@
{
// New training game
Training *tmpGame =
GameFactory::Instance()->createTraining(iDic);
+ tmpGame->addPlayer(new HumanPlayer);
PublicGame *game = new PublicGame(*tmpGame);
// Set the variant
if (tokens[0].size() > 1)
Index: utils/game_io.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/game_io.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- utils/game_io.cpp 23 Jun 2009 21:36:33 -0000 1.19
+++ utils/game_io.cpp 29 Nov 2009 16:01:34 -0000 1.20
@@ -19,6 +19,7 @@
*****************************************************************************/
#include <boost/foreach.hpp>
+#include <boost/format.hpp>
#include <iomanip>
#include <string>
@@ -32,9 +33,17 @@
#include "results.h"
#include "player.h"
#include "encoding.h"
+#include "history.h"
+#include "turn.h"
+#include "move.h"
+#include "round.h"
using namespace std;
+using boost::format;
+using boost::wformat;
+
+
#define __UNUSED__ __attribute__((unused))
void GameIO::printBoard(ostream &out, const PublicGame &iGame)
@@ -210,8 +219,8 @@
{
for (unsigned int j = 0; j < iGame.getNbPlayers(); j++)
{
- out << "Joueur " << j << ": ";
- out <<
convertToMb(iGame.getPlayer(j).getCurrentRack().toString(PlayedRack::RACK_SIMPLE))
<< endl;
+ out << "Rack " << j << ": ";
+ out <<
convertToMb(iGame.getPlayer(j).getCurrentRack().toString(PlayedRack::RACK_EXTRA))
<< endl;
}
}
@@ -220,7 +229,7 @@
{
const Round &r = iResults.get(num);
const wstring &word = r.getWord();
- if (word.size() == 0)
+ if (word.empty())
return;
out << convertToMb(word) << string(16 - word.size(), ' ')
<< (r.getBonus() ? '*' : ' ')
@@ -250,7 +259,7 @@
{
for (unsigned int i = 0; i < iGame.getNbPlayers(); i++)
{
- out << "Joueur " << i << ": "
+ out << "Score " << i << ": "
<< setw(4) << iGame.getPlayer(i).getPoints() << endl;
}
}
@@ -258,24 +267,59 @@
void GameIO::printGameDebug(ostream &out, const PublicGame &iGame)
{
- out << "Game:: joueur en cours " << iGame.getCurrentPlayer().getId()
- << " sur " << iGame.getNbPlayers() << endl;
- out << "Game:: mode " << iGame.getModeAsString() << endl;
- out << "Game:: variante ";
+ out << "Game: player " << iGame.getCurrentPlayer().getId() + 1
+ << " out of " << iGame.getNbPlayers() << endl;
+ out << "Game: mode=" << iGame.getModeAsString() << endl;
+ out << "Game: variant=";
switch (iGame.getVariant())
{
- case PublicGame::kNONE:
- out << "aucune" << endl;
+ case PublicGame::kEXPLOSIVE:
+ out << "explosive" << endl;
break;
case PublicGame::kJOKER:
out << "joker" << endl;
break;
default:
- out << "inconnu" << endl;
+ out << "unknown" << endl;
break;
}
- out << "Game:: history --" << endl;
- out << convertToMb(iGame.getHistory().toString());
- out << "--" << endl;
- out << "" << endl;
+ out << "Game: history:" << endl;
+ out << " N | P | RACK | SOLUTION | REF | PTS | BONUS" << endl;
+ out << " ===|===|==========|================|=====|=====|======" << endl;
+ for (unsigned int i = 0; i < iGame.getHistory().getSize(); ++i)
+ {
+ const Turn &turn = iGame.getHistory().getTurn(i);
+ const Move &move = turn.getMove();
+ format fmter("%1% | %2% | %3% | %4% | %5% | %6% | %7%");
+ fmter % padAndConvert(str(wformat(L"%1%") % (i + 1)), 5);
+ fmter % padAndConvert(str(wformat(L"%1%") % turn.getPlayer()), 1);
+ fmter % padAndConvert(turn.getPlayedRack().toString(), 8);
+ if (move.getType() == Move::VALID_ROUND)
+ {
+ const Round &round = move.getRound();
+ fmter % padAndConvert(round.getWord(), 14, false);
+ fmter % padAndConvert(round.getCoord().toString(), 3);
+ fmter % padAndConvert(str(wformat(L"%1%") % round.getPoints()), 3);
+ fmter % padAndConvert(round.getBonus() ? L"*": L"", 1, false);
+ }
+ else
+ {
+ if (move.getType() == Move::INVALID_WORD)
+ {
+ fmter % padAndConvert(L"#" + move.getBadWord() + L"#", 14,
false);
+ fmter % padAndConvert(move.getBadCoord(), 3);
+ }
+ else if (move.getType() == Move::CHANGE_LETTERS)
+ {
+ fmter % padAndConvert(L"[" + move.getChangedLetters() + L"]",
14, false) % " - ";
+ }
+ else
+ {
+ fmter % padAndConvert(L"(PASS)", 14, false) % " - ";
+ }
+ fmter % " 0" % " ";
+ }
+ out << fmter.str() << endl;
+ }
+ out << endl << endl;
}
Index: utils/game_io.h
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/game_io.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- utils/game_io.h 30 Nov 2008 20:53:46 -0000 1.6
+++ utils/game_io.h 29 Nov 2009 16:01:34 -0000 1.7
@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _GAME_IO_H_
-#define _GAME_IO_H_
+#ifndef GAME_IO_H_
+#define GAME_IO_H_
#include <iostream>
Index: utils/ncurses.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/ncurses.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- utils/ncurses.cpp 23 Jun 2009 12:41:54 -0000 1.33
+++ utils/ncurses.cpp 29 Nov 2009 16:01:34 -0000 1.34
@@ -30,7 +30,6 @@
#include <ctype.h>
#include <cstring> // For strlen
-#include <fstream>
#include <algorithm>
#include "ncurses.h"
@@ -614,21 +613,18 @@
wstring filename;
if (readString(win, y + 2, x + 2, 28, filename, kFILENAME))
{
- ofstream fout(convertToMb(filename).c_str());
char s[100];
- if (fout.rdstate() == ios::failbit)
- {
- snprintf(s, 100, _("Cannot open file %ls for writing"),
- filename.c_str());
- drawStatus(win, s);
- }
- else
+ try
{
- m_game->save(fout, PublicGame::kFILE_FORMAT_ADVANCED);
- fout.close();
+ m_game->save(convertToMb(filename));
snprintf(s, 100, _("Game saved in '%ls'"), filename.c_str());
drawStatus(win, s, false);
}
+ catch (std::exception &e)
+ {
+ snprintf(s, 100, _("Error saving game %s:"), e.what());
+ drawStatus(win, s);
+ }
}
box.clear();
}
@@ -644,30 +640,19 @@
wstring filename;
if (readString(win, y + 2, x + 2, 28, filename, kFILENAME))
{
- char s[100];
- FILE *fin;
- if ((fin = fopen(convertToMb(filename).c_str(), "r")) == NULL)
- {
- snprintf(s, 100, _("Cannot open file '%ls' for reading"),
- filename.c_str());
- }
- else
- {
- PublicGame *loaded = PublicGame::load(fin, m_game->getDic());
- if (loaded == NULL)
- {
- snprintf(s, 100, _("Invalid saved game"));
- drawStatus(win, s);
- }
- else
+ try
{
- snprintf(s, 100, _("Game loaded"));
+ PublicGame *loaded = PublicGame::load(convertToMb(filename),
m_game->getDic());
//GameFactory::Instance()->releaseGame(*m_game);
delete m_game;
m_game = loaded;
+ char s[100];
+ snprintf(s, 100, _("Game loaded"));
drawStatus(win, s, false);
}
- fclose(fin);
+ catch (const GameException &e)
+ {
+ drawStatus(win, _("Unable to load game: ") + string(e.what()));
}
}
box.clear();
Index: utils/ncurses.h
===================================================================
RCS file: /cvsroot/eliot/eliot/utils/ncurses.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- utils/ncurses.h 30 Nov 2008 20:53:46 -0000 1.8
+++ utils/ncurses.h 29 Nov 2009 16:01:34 -0000 1.9
@@ -17,8 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#ifndef _NCURSES_H_
-#define _NCURSES_H_
+#ifndef NCURSES_H_
+#define NCURSES_H_
#include <ncursesw/curses.h>
#include <string>
Index: game/mark_played_cmd.cpp
===================================================================
RCS file: game/mark_played_cmd.cpp
diff -N game/mark_played_cmd.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ game/mark_played_cmd.cpp 29 Nov 2009 16:01:32 -0000 1.1
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Eliot
+ * Copyright (C) 2009 Olivier Teulière
+ * Authors: Olivier Teulière <ipkiss @@ gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#include <sstream>
+#include "mark_played_cmd.h"
+#include "duplicate.h"
+
+using namespace std;
+
+
+MarkPlayedCmd::MarkPlayedCmd(Duplicate &ioDuplicate,
+ unsigned int iPlayerId,
+ bool iPlayedFlag)
+ : m_duplicateGame(ioDuplicate), m_playerId(iPlayerId),
+ m_newPlayedFlag(iPlayedFlag)
+{
+}
+
+
+void MarkPlayedCmd::doExecute()
+{
+ m_oldPlayedFlag = m_duplicateGame.hasPlayed(m_playerId);
+ m_duplicateGame.setPlayedFlag(m_playerId, m_newPlayedFlag);
+}
+
+
+void MarkPlayedCmd::doUndo()
+{
+ m_duplicateGame.setPlayedFlag(m_playerId, m_oldPlayedFlag);
+}
+
+
+wstring MarkPlayedCmd::toString() const
+{
+ wostringstream oss;
+ oss << L"MarkPlayedCmd (player " << m_playerId
+ << L" marked " << m_newPlayedFlag << L")";
+ return oss.str();
+}
+
Index: game/mark_played_cmd.h
===================================================================
RCS file: game/mark_played_cmd.h
diff -N game/mark_played_cmd.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ game/mark_played_cmd.h 29 Nov 2009 16:01:32 -0000 1.1
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * Eliot
+ * Copyright (C) 2009 Olivier Teulière
+ * Authors: Olivier Teulière <ipkiss @@ gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#ifndef MARK_PLAYED_CMD_H_
+#define MARK_PLAYED_CMD_H_
+
+#include "command.h"
+
+class Duplicate;
+
+
+/**
+ * Command used internally to change the "has played" flag of a player
+ * in a duplicate game.
+ */
+class MarkPlayedCmd: public Command
+{
+ public:
+ MarkPlayedCmd(Duplicate &ioDuplicate,
+ unsigned int iPlayerId,
+ bool iPlayedFlag);
+
+ virtual wstring toString() const;
+
+ protected:
+ virtual void doExecute();
+ virtual void doUndo();
+
+ private:
+ Duplicate &m_duplicateGame;
+ unsigned int m_playerId;
+ bool m_newPlayedFlag;
+ bool m_oldPlayedFlag;
+};
+
+#endif
+
Index: game/xml_reader.cpp
===================================================================
RCS file: game/xml_reader.cpp
diff -N game/xml_reader.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ game/xml_reader.cpp 29 Nov 2009 16:01:32 -0000 1.1
@@ -0,0 +1,337 @@
+/*******************************************************************
+ * Eliot
+ * Copyright (C) 2009 Olivier Teulière
+ * Authors: Olivier Teulière <ipkiss @@ gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#include <fstream>
+#include <SAX/XMLReader.hpp>
+#include <SAX/InputSource.hpp>
+
+#include "xml_reader.h"
+#include "dic.h"
+#include "game_exception.h"
+#include "game_factory.h"
+#include "training.h"
+#include "duplicate.h"
+#include "freegame.h"
+#include "player.h"
+#include "ai_percent.h"
+#include "encoding.h"
+#include "game_move_cmd.h"
+#include "player_rack_cmd.h"
+#include "player_move_cmd.h"
+#include "player_points_cmd.h"
+#include "navigation.h"
+
+using namespace std;
+
+
+Game * XmlReader::read(const string &iFileName, const Dictionary &iDic)
+{
+ // Try to load the old format first
+ try
+ {
+ FILE *fin = fopen(iFileName.c_str(), "r");
+ if (fin != NULL)
+ {
+ Game *game = Game::load(fin, iDic);
+ fclose(fin);
+
+ if (game != NULL)
+ return game;
+ }
+ }
+ catch (const GameException &e)
+ {
+ // Ignore the exception
+ }
+
+ ifstream is(iFileName.c_str());
+ if (!is.is_open())
+ throw LoadGameException("Cannot open file '" + iFileName + "'");
+
+ XmlReader handler(iDic);
+
+ // Set up of the parser
+ Arabica::SAX::XMLReader<std::string> parser;
+ parser.setContentHandler(handler);
+ parser.setErrorHandler(handler);
+
+ // Parsing
+ Arabica::SAX::InputSource<std::string> source(is);
+ parser.parse(source);
+
+ Game *game = handler.getGame();
+ if (game == NULL)
+ throw LoadGameException(handler.errorMessage);
+ return game;
+}
+
+
+static wstring fromUtf8(const string &str)
+{
+ return readFromUTF8(str.c_str(), str.size(), "Loading game");
+}
+
+
+static int toInt(const string &str)
+{
+ if (str.empty())
+ throw LoadGameException("Invalid string to int conversion: empty
string received");
+ return atoi(str.c_str());
+}
+
+
+static Player & getPlayer(map<string, Player*> &players, const string &id)
+{
+ if (players.find(id) == players.end())
+ throw LoadGameException("Invalid player ID: " + id);
+ return *players[id];
+}
+
+
+static Move buildMove(const Game &iGame, map<string, string> &attr,
+ bool checkRack)
+{
+ // Build the Move object
+ string type = attr["type"];
+ if (type == "valid")
+ {
+ Round round;
+ int res = iGame.checkPlayedWord(fromUtf8(attr["coord"]),
+ fromUtf8(attr["word"]),
+ round, checkRack);
+ if (res != 0)
+ {
+ throw LoadGameException("Invalid move marked as valid: " +
+ attr["word"] + " (" + attr["coord"] + ")");
+ }
+ return Move(round);
+ }
+ else if (type == "invalid")
+ {
+ return Move(fromUtf8(attr["word"]),
+ fromUtf8(attr["coord"]));
+ }
+ else if (type == "change")
+ {
+ return Move(fromUtf8(attr["letters"]));
+ }
+ else if (type == "pass")
+ {
+ return Move(L"");
+ }
+ else
+ throw LoadGameException("Invalid move type: " + type);
+}
+
+
+Game * XmlReader::getGame()
+{
+ // TODO
+ return m_game;
+}
+
+
+void XmlReader::startElement(const string& namespaceURI,
+ const string& localName,
+ const string& qName,
+ const Arabica::SAX::Attributes<string>& atts)
+{
+ (void) namespaceURI;
+ (void) qName;
+#if 0
+ if (!localName.empty())
+ std::cout << "Start Element: " << namespaceURI << ":" << localName <<
std::endl;
+ else
+ std::cout << "Start Element: " << qName << std::endl;
+#endif
+ m_data.clear();
+ const string &tag = localName;
+ if (tag == "Player")
+ {
+ m_context = "Player";
+ m_attributes.clear();
+ for (int i = 0; i < atts.getLength(); ++i)
+ {
+ m_attributes[atts.getLocalName(i)] = atts.getValue(i);
+ }
+ }
+ else if (tag == "PlayerRack")
+ {
+ m_attributes.clear();
+ for (int i = 0; i < atts.getLength(); ++i)
+ {
+ m_attributes[atts.getLocalName(i)] = atts.getValue(i);
+ }
+ }
+ else if (tag == "PlayerMove" || tag == "GameMove")
+ {
+ m_attributes.clear();
+ for (int i = 0; i < atts.getLength(); ++i)
+ {
+ m_attributes[atts.getLocalName(i)] = atts.getValue(i);
+ }
+ }
+}
+
+
+void XmlReader::endElement(const string& namespaceURI,
+ const string& localName,
+ const string&)
+{
+ (void) namespaceURI;
+#if 0
+ std::cout << "endElement: " << namespaceURI << ":" << localName << "(" <<
m_data << ")" << std::endl;
+#endif
+ const string &tag = localName;
+ if (tag == "Mode")
+ {
+ if (m_data == "duplicate")
+ m_game = GameFactory::Instance()->createDuplicate(m_dic);
+ else if (m_data == "freegame")
+ m_game = GameFactory::Instance()->createFreeGame(m_dic);
+ else if (m_data == "training")
+ m_game = GameFactory::Instance()->createTraining(m_dic);
+ else
+ throw LoadGameException("Invalid game mode: " + m_data);
+ return;
+ }
+
+ // At this point, m_game must not be null anymore
+ if (m_game == NULL)
+ throw LoadGameException("The 'Mode' tag should be the first one to be
closed");
+
+ if (tag == "Variant")
+ {
+ if (m_data == "bingo")
+ m_game->setVariant(Game::kJOKER);
+ else if (m_data == "explosive")
+ m_game->setVariant(Game::kEXPLOSIVE);
+ else
+ throw LoadGameException("Invalid game variant: " + m_data);
+ }
+
+ else if (m_context == "Player")
+ {
+ if (tag == "Name")
+ m_attributes["name"] = m_data;
+ else if (tag == "Type")
+ m_attributes["type"] = m_data;
+ else if (tag == "Level")
+ m_attributes["level"] = m_data;
+ else if (tag == "Player")
+ {
+ if (m_players.find(m_attributes["id"]) != m_players.end())
+ throw LoadGameException("A player ID must be unique: " +
m_attributes["id"]);
+ // Create the player
+ Player *p;
+ if (m_attributes["type"] == "human")
+ p = new HumanPlayer();
+ else if (m_attributes["type"] == "computer")
+ {
+ int level = toInt(m_attributes["level"]);
+ p = new AIPercent(0.01 * level);
+ }
+ else
+ throw LoadGameException("Invalid player type: " +
m_attributes["type"]);
+ m_players[m_attributes["id"]] = p;
+
+ // Set the name
+ p->setName(fromUtf8(m_attributes["name"]));
+
+ m_game->addPlayer(p);
+
+ m_context = "";
+ }
+ }
+
+ else if (tag == "Turn")
+ {
+ m_game->accessNavigation().newTurn();
+ }
+
+ else if (tag == "PlayerRack")
+ {
+ // Build a rack for the correct player
+ PlayedRack pldrack;
+ if (!m_dic.validateLetters(fromUtf8(m_data), L"-+"))
+ {
+ throw LoadGameException("Rack invalid for the current dictionary:
" + m_data);
+ }
+ pldrack.setManual(fromUtf8(m_data));
+#if 0
+ cerr << "loaded rack: " << convertToMb(pldrack.toString()) << endl;
+#endif
+
+ Player &p = getPlayer(m_players, m_attributes["playerid"]);
+ PlayerRackCmd *cmd = new PlayerRackCmd(p, pldrack);
+ m_game->accessNavigation().addAndExecute(cmd);
+#if 0
+ cerr << "rack: " << convertToMb(pldrack.toString()) << endl;
+#endif
+ }
+
+ else if (tag == "PlayerMove")
+ {
+ const Move &move = buildMove(*m_game, m_attributes, /*XXX:true*/false);
+ Player &p = getPlayer(m_players, m_attributes["playerid"]);
+ PlayerMoveCmd *cmd = new PlayerMoveCmd(p, move);
+ m_game->accessNavigation().addAndExecute(cmd);
+ }
+
+ else if (tag == "GameMove")
+ {
+ const Move &move = buildMove(*m_game, m_attributes, false);
+ Player &p = getPlayer(m_players, m_attributes["playerid"]);
+ GameMoveCmd *cmd = new GameMoveCmd(*m_game, move, p.getId());
+ m_game->accessNavigation().addAndExecute(cmd);
+ }
+
+}
+
+
+void XmlReader::characters(const string& ch)
+{
+ m_data += ch;
+#if 0
+ std::cout << "Characters: " << ch << std::endl;
+#endif
+}
+
+
+void XmlReader::warning(const Arabica::SAX::SAXParseException<string>&
exception)
+{
+ errorMessage = string("warning: ") + exception.what();
+ //throw LoadGameException(string("warning: ") + exception.what());
+}
+
+
+void XmlReader::error(const Arabica::SAX::SAXParseException<string>& exception)
+{
+ errorMessage = string("error: ") + exception.what();
+ //throw LoadGameException(string("error: ") + exception.what());
+}
+
+
+void XmlReader::fatalError(const Arabica::SAX::SAXParseException<string>&
exception)
+{
+ errorMessage = string("fatal error: ") + exception.what();
+ //throw LoadGameException(string("fatal error: ") + exception.what());
+}
+
Index: game/xml_reader.h
===================================================================
RCS file: game/xml_reader.h
diff -N game/xml_reader.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ game/xml_reader.h 29 Nov 2009 16:01:33 -0000 1.1
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ * Copyright (C) 2009 Eliot
+ * Authors: Olivier Teuliere <address@hidden>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#ifndef XML_READER_H_
+#define XML_READER_H_
+
+#include <map>
+#include <SAX/helpers/DefaultHandler.hpp>
+#include <SAX/Locator.hpp>
+#include <SAX/Attributes.hpp>
+#include <SAX/SAXException.hpp>
+
+class Dictionary;
+class Game;
+class Player;
+
+using std::string;
+using std::map;
+
+
+class XmlReader : public Arabica::SAX::DefaultHandler<string>
+{
+public:
+ virtual ~XmlReader() {}
+
+ /**
+ * Only entry point of the class.
+ * Create a Game object, from a XML file created using the XmlWriter class.
+ * The method throws an exception in case of problem.
+ */
+ static Game * read(const string &iFileName, const Dictionary &iDic);
+
+ // Return the built game
+ Game * getGame();
+
+ ////////////////////////////////////////////////////
+ // ContentHandler
+ virtual void startElement(const string& namespaceURI,
+ const string& localName,
+ const string& qName,
+ const AttributesT& atts);
+ virtual void endElement(const string& namespaceURI,
+ const string& localName,
+ const string& qName);
+ virtual void characters(const string& ch);
+
+ /////////////////////////////////////////////////////
+ // ErrorHandler
+ virtual void warning(const Arabica::SAX::SAXParseException<string>&);
+ virtual void error(const Arabica::SAX::SAXParseException<string>&);
+ virtual void fatalError(const Arabica::SAX::SAXParseException<string>&
exception);
+
+private:
+ const Dictionary &m_dic;
+ Game *m_game;
+ string errorMessage;
+
+ string m_context;
+ string m_data;
+ map<string, Player*> m_players;
+ map<string, string> m_attributes;
+
+ // Private constructor, because we only want the read() method
+ // to be called externally
+ XmlReader(const Dictionary &iDic) : m_dic(iDic), m_game(NULL) {}
+
+ XmlReader(const XmlReader&);
+ XmlReader& operator=(const XmlReader&);
+ bool operator==(const XmlReader&);
+};
+
+#endif
+
Index: game/xml_writer.cpp
===================================================================
RCS file: game/xml_writer.cpp
diff -N game/xml_writer.cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ game/xml_writer.cpp 29 Nov 2009 16:01:33 -0000 1.1
@@ -0,0 +1,212 @@
+/*******************************************************************
+ * Eliot
+ * Copyright (C) 2009 Olivier Teulière
+ * Authors: Olivier Teulière <ipkiss @@ gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#include <vector>
+#include <fstream>
+#include <boost/foreach.hpp>
+
+#include "xml_writer.h"
+#include "encoding.h"
+#include "turn_cmd.h"
+#include "game.h"
+#include "player.h"
+#include "ai_percent.h"
+#include "game_exception.h"
+#include "turn_cmd.h"
+#include "game_move_cmd.h"
+#include "player_rack_cmd.h"
+#include "player_move_cmd.h"
+#include "player_points_cmd.h"
+#include "mark_played_cmd.h"
+
+using namespace std;
+
+
+static void addIndent(string &s)
+{
+ s += " ";
+}
+
+static void removeIndent(string &s)
+{
+ if (s.size() >= 4)
+ s.resize(s.size() - 4);
+}
+
+static string toUtf8(const wstring &s)
+{
+ return writeInUTF8(s, "Saving game");
+}
+
+static void writeMove(ostream &out, const Move &iMove,
+ const string &iTag, unsigned int iPlayerId)
+{
+ out << "<" << iTag << " playerid=\"" << iPlayerId << "\" type=\"";
+ if (iMove.getType() == Move::VALID_ROUND)
+ {
+ const Round &round = iMove.getRound();
+ out << "valid\" word=\"" << toUtf8(round.getWord())
+ << "\" coord=\"" << toUtf8(round.getCoord().toString()) << "\" />";
+ }
+ else if (iMove.getType() == Move::INVALID_WORD)
+ {
+ out << "invalid\" word=\"" << toUtf8(iMove.getBadWord())
+ << "\" coord=\"" << toUtf8(iMove.getBadCoord()) << "\" />";
+ }
+ else if (iMove.getType() == Move::CHANGE_LETTERS)
+ out << "change\" letters=\"" << toUtf8(iMove.getChangedLetters()) <<
"\" />";
+ else if (iMove.getType() == Move::PASS)
+ out << "pass\" />";
+ else
+ throw SaveGameException("Unsupported move: " +
convertToMb(iMove.toString()));
+}
+
+void XmlWriter::write(const Game &iGame, const string &iFileName)
+{
+ ofstream out(iFileName.c_str());
+ if (!out.is_open())
+ throw SaveGameException("Cannot open file for writing: '" + iFileName
+ "'");
+
+
+ out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
+
+ string indent = "";
+ out << indent << "<EliotGame format=\"1\">" << endl;
+ addIndent(indent);
+
+ // ------------------------
+ // Write the header
+ out << indent << "<Game>" << endl;
+ addIndent(indent);
+ // Game type
+ out << indent << "<Mode>";
+ if (iGame.getMode() == Game::kDUPLICATE)
+ out << "duplicate";
+ else if (iGame.getMode() == Game::kFREEGAME)
+ out << "freegame";
+ else
+ out << "training";
+ out << "</Mode>" << endl;
+
+ // Game variant
+ if (iGame.getVariant() == Game::kJOKER)
+ out << indent << "<Variant>bingo</Variant>" << endl;
+ if (iGame.getVariant() == Game::kEXPLOSIVE)
+ out << indent << "<Variant>explosive</Variant>" << endl;
+
+ // Players
+ for (unsigned int i = 0; i < iGame.getNPlayers(); ++i)
+ {
+ const Player &player = iGame.getPlayer(i);
+ out << indent << "<Player id=\"" << player.getId() + 1 << "\">" <<
endl;
+ addIndent(indent);
+ out << indent << "<Name>" << toUtf8(player.getName()) << "</Name>" <<
endl;
+ out << indent << "<Type>" << (player.isHuman() ? "human" : "computer")
<< "</Type>" << endl;
+ if (!player.isHuman())
+ {
+ const AIPercent *ai = dynamic_cast<const AIPercent *>(&player);
+ if (ai == NULL)
+ throw SaveGameException("Invalid player type for player " + i);
+ out << indent << "<Level>" << (int)(ai->getPercent() * 100) <<
"</Level>" << endl;
+ }
+ removeIndent(indent);
+ out << indent << "</Player>" << endl;
+ }
+
+ // Number of turns
+ out << indent << "<Turns>"
+ << iGame.getNavigation().getNbTurns() << "</Turns>" << endl;
+
+ removeIndent(indent);
+ out << indent << "</Game>" << endl;
+ // End of the header
+ // ------------------------
+
+ // ------------------------
+ // Write the game history
+ out << indent << "<History>" << endl;
+ addIndent(indent);
+
+#if 0
+ iGame.getNavigation().print();
+#endif
+ const vector<TurnCmd *> &turnCmdVect = iGame.getNavigation().getCommands();
+ BOOST_FOREACH(const TurnCmd *turn, turnCmdVect)
+ {
+ if (turn->getCommands().empty() && turn == turnCmdVect.back())
+ continue;
+ out << indent << "<Turn>" << endl;
+ addIndent(indent);
+ BOOST_FOREACH(const Command *cmd, turn->getCommands())
+ {
+ if (dynamic_cast<const PlayerRackCmd*>(cmd))
+ {
+ const PlayerRackCmd *rackCmd = static_cast<const
PlayerRackCmd*>(cmd);
+ unsigned int id = rackCmd->getPlayer().getId() + 1;
+ out << indent << "<PlayerRack playerid=\"" << id << "\">"
+ << toUtf8(rackCmd->getRack().toString())
+ << "</PlayerRack>" << endl;
+ }
+ else if (dynamic_cast<const PlayerPointsCmd*>(cmd))
+ {
+ const PlayerPointsCmd *pointsCmd = static_cast<const
PlayerPointsCmd*>(cmd);
+ unsigned int id = pointsCmd->getPlayer().getId() + 1;
+ out << indent << "<PlayerPoints playerid=\"" << id << "\">"
+ << pointsCmd->getPoints() << "</PlayerPoints>" << endl;
+ }
+ else if (dynamic_cast<const PlayerMoveCmd*>(cmd))
+ {
+ const PlayerMoveCmd *moveCmd = static_cast<const
PlayerMoveCmd*>(cmd);
+ unsigned int id = moveCmd->getPlayer().getId() + 1;
+ out << indent;
+ writeMove(out, moveCmd->getMove(), "PlayerMove", id);
+ out << endl;
+ }
+ else if (dynamic_cast<const GameMoveCmd*>(cmd))
+ {
+ const GameMoveCmd *moveCmd = static_cast<const
GameMoveCmd*>(cmd);
+ unsigned int id = moveCmd->getPlayerId() + 1;
+ out << indent;
+ writeMove(out, moveCmd->getMove(), "GameMove", id);
+ out << endl;
+ }
+ else if (dynamic_cast<const MarkPlayedCmd*>(cmd))
+ {
+ // Ignore this command, as it is an implementation detail
+ }
+ else
+ {
+ // XXX
+ //throw SaveGameException("Unsupported command: " +
convertToMb(cmd->toString()));
+ }
+ // TODO
+ }
+ removeIndent(indent);
+ out << indent << "</Turn>" << endl;
+ }
+
+ removeIndent(indent);
+ out << indent << "</History>" << endl;
+ // End of the game history
+ // ------------------------
+
+ out << "</EliotGame>" << endl;
+}
+
Index: game/xml_writer.h
===================================================================
RCS file: game/xml_writer.h
diff -N game/xml_writer.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ game/xml_writer.h 29 Nov 2009 16:01:33 -0000 1.1
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (C) 2009 Eliot
+ * Authors: Olivier Teuliere <address@hidden>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#ifndef XML_WRITER_H_
+#define XML_WRITER_H_
+
+#include <iosfwd>
+
+class Game;
+
+using std::string;
+
+
+class XmlWriter
+{
+public:
+ static void write(const Game &iGame, const string &iFileName);
+};
+
+#endif
+
Index: test/rosace
===================================================================
RCS file: test/rosace
diff -N test/rosace
--- test/rosace 5 Nov 2006 13:34:27 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,26 +0,0 @@
-Eliot
-
- WAEROSC ROSACE 22 H 8
- W+TSREIN WESTERN 54 13 G
- I+RDTVI? DIVeRTIR * 83 8 A
- ELMOEAH AH 30 I 8
- EELMO+PI DIPLOMEE * 89 A 8
- OHUMJUI JOUI 37 12 K
- HMU+EAUA HUE 34 14 F
- AAMU+UBS SAMBA 57 15 H
- UU+NYTEP TYPE 61 O 12
- NUU+S?GE SaUGRENU * 82 E 4
- EBOILLF BIEF 36 J 7
- LLO+TETE TELETYPE 57 O 8
- LOT+DGOE GODET 23 D 1
- LO+KRIIR LOOK 33 2 C
- IIRR+ACQ CINQ 29 10 C
- AIRR+TVE VERRAIT * 88 K 2
- USAXANZ SAX 51 B 12
- ANUZ+MNE RAMEZ 50 4 K
- NNU+SALE LAUZES 45 O 1
- NN+EAURF FRENE 38 N 2
- ANU+NNID ANDINE 20 3 F
- NU+OL GNOU 19 1 D
-
- total 1038
Index: test/training_joker2.input
===================================================================
RCS file: test/training_joker2.input
diff -N test/training_joker2.input
--- test/training_joker2.input 24 Jan 2009 17:43:57 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,14 +0,0 @@
-c rosace
-h p 13
-h r
-a P
-a t
-a l
-a g
-a gd # j1
-h r
-t NUUS?GE
-r
-a r
-q
-q
Index: test/training_joker2.ref
===================================================================
RCS file: test/training_joker2.ref
diff -N test/training_joker2.ref
--- test/training_joker2.ref 23 Jun 2009 21:36:33 -0000 1.9
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,92 +0,0 @@
-Using seed: 0
-[?] pour l'aide
-commande> c rosace
-mode entraînement
-[?] pour l'aide
-commande> h p 13
-commande> h r
-commande> a P
-Eliot
-
- WAEROSC ROSACE 22 H 8
- W+TSREIN WESTERN 54 13 G
- I+RDTVI? DIVeRTIR * 83 8 A
- ELMOEAH AH 30 I 8
- EELMO+PI DIPLOMEE * 89 A 8
- OHUMJUI JOUI 37 12 K
- HMU+EAUA HUE 34 14 F
- AAMU+UBS SAMBA 57 15 H
- UU+NYTEP TYPE 61 O 12
-
- total 467
-commande> a t
-NUU
-commande> a l
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ?
- 5 1 1 2 9 2 2 0 4 0 1 4 1 5 3 0 1 3 3 3 4 1 0 1 0 1 1
-commande> a g
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- A - - - - - - - D I P L O M E E
- B - - - - - - - I - - - - - - -
- C - - - - - - - V - - - - - - -
- D - - - - - - - e - - - - - - -
- E - - - - - - - R - - - - - - -
- F - - - - - - - T - - - - - H -
- G - - - - - - - I - - - - W U -
- H - - - - - - - R O S A C E E S
- I - - - - - - - A H - - - S - A
- J - - - - - - - - - - - - T - M
- K - - - - - - - - - - - J E - B
- L - - - - - - - - - - - O R - A
- M - - - - - - - - - - - U N - -
- N - - - - - - - - - - - I - - -
- O - - - - - - - - - - - T Y P E
-commande> a gd # j1
- Ar
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
- Br
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00005040:
1][00200200: 3][00200222: 1][002c4108: 1][00200222: 2][01384100: 1][01384100:
1]
- Cr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1]
- Dr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1]
- Er
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000008:
6][ffffffff:-1]
- Fr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:16][00000000:-1][ffffffff:-1]
- Gr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:
5][00608022: 1][005c795e: 1][00008000: 3][00000000:-1][00000000:-1][00000000:
8]
- Hr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
- Ir
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][00200222:
1][02284302: 1][00000222: 3][00000000:-1][040c0020: 6][00000000:-1]
- Jr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00080200:12][00002020:
5][ffffffff:-1][ffffffff:-1][00000000:12][00000000:-1][ffffffff:-1][00000000:-1]
- Kr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][ffffffff:-1][00000000:-1]
- Lr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][ffffffff:-1][00000000:-1]
- Mr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][ffffffff:-1][00080000:
8]
- Nr
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:26][00000000:
3][005c751c: 1]
- Or
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
- -
- Ac
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:12][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
- Bc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][010d714e:
1][00000000:-1][00005040:
1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1]
- Cc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:
4][00000000:-1][00280022:
4][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1]
- Dc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][005c751c:
0][00000000:-1][01384100:
0][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1]
- Ec
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00008000:
1][00000000:-1][00200222:
1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1]
- Fc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00200020:
1][00000000:-1][00200022: 1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00008022:
4][00000000:-1][00008222: 4]
- Gc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][010d714e:
1][00000000:-1][00005040:
1][ffffffff:-1][ffffffff:-1][00000000:11][00000000:-1][00000000:-1][00080000:11]
- Hc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:10][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
- Ic
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000004:
5][00000000:-1][00000000:-1][00000000: 5][ffffffff:-1][00608022:
1][00000000:-1][00210800: 2][00000000:-1]
- Jc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00200020:
1][00000000:-1][00008000: 3][00000000:-1]
- Kc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:
9][00000000:-1][00000000:-1][00000000:12][00000000:-1]
- Lc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00002048:
2][00000000:-1][00000000:-1][00004000: 3][00000000:-1]
- Mc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000144:
2][00000000:-1][00000000:-1][00080220: 2][ffffffff:-1]
- Nc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][010d714e:
1][00000000:-1][00005040: 1][ffffffff:-1][ffffffff:-1]
- Oc
[ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][ffffffff:-1][00000000:15][00000000:-1][00000000:-1][00000000:-1][00000000:-1]
-commande> h r
-commande> t NUUS?GE
-commande> r
-commande> a r
- 1: SaUGRENU * 82 E4
- 2: eNjUGUES * 66 D8
- 3: GUEUSANt * 66 11C
- 4: NUaGEUSe * 66 D1
- 5: ENjUGUeS * 64 D2
- 6: GUEUSeNt * 64 D3
- 7: GUeUSENt * 64 D6
- 8: NUaGeUSE * 64 D4
- 9: GUeUSENT * 62 F1
- 10: GUEUSaNT * 60 F1
-commande> q
-fin du mode entraînement
-commande> q
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Eliot-dev] eliot TODO configure.in dic/automaton.h dic/dic...,
Olivier Teulière <=