mirror of
git://git.savannah.nongnu.org/eliot.git
synced 2025-01-18 10:26:15 +01:00
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
This commit is contained in:
parent
eb22343932
commit
3c7a84d543
106 changed files with 2256 additions and 1734 deletions
8
TODO
8
TODO
|
@ -2,10 +2,6 @@ TODO
|
|||
====
|
||||
|
||||
- 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 @@ TODO
|
|||
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 @@ Implementation details
|
|||
- 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
|
||||
=============
|
||||
|
|
|
@ -113,6 +113,13 @@ PKG_CHECK_MODULES(LIBCONFIG, [libconfig++],
|
|||
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],
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -223,10 +223,12 @@ string truncAndConvert(const wstring &iWstr, unsigned int iMaxWidth)
|
|||
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 @@ string truncOrPad(const string &iStr, unsigned int iWidth, char iChar)
|
|||
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 @@ string padAndConvert(const wstring &iWstr, unsigned int iLength,
|
|||
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 @@ string centerAndConvert(const wstring &iWstr, unsigned int iLength, char c)
|
|||
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 @@ unsigned int writeInUTF8(const wstring &iWString, char *oBuffer,
|
|||
#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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 @@ wstring readFromUTF8(const char *iBuffer, unsigned int iBufSize,
|
|||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "config.h"
|
||||
|
||||
#include <cstring> // for strcpy
|
||||
#include <cstdio> // for snprintf
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -2,6 +2,9 @@ ICONV_VERSION = 1.12
|
|||
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_DIR = libiconv-$(ICONV_VERSION)
|
|||
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_DIR = libconfig-$(LIBCONFIG_VERSION)
|
|||
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_DIR = boost_$(BOOST_VERSION)
|
|||
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_ARCHIVE = qt4-$(QT_VERSION)-win32-bin.tar.bz2
|
|||
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 @@ $(QT_DIR): $(QT_ARCHIVE)
|
|||
(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/$@?use_mirror=ovh
|
||||
|
||||
$(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 $@
|
||||
|
||||
|
|
|
@ -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 @@ libgame_a_SOURCES= \
|
|||
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
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ AIPercent::AIPercent(float iPercent)
|
|||
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;
|
||||
|
|
|
@ -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 @@ public:
|
|||
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 @@ public:
|
|||
virtual Move getMove() const;
|
||||
|
||||
private:
|
||||
float m_percent;
|
||||
/// Container for all the found solutions
|
||||
Results *m_results;
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <boost/foreach.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <cstdio>
|
||||
#include <cstdlib> // For rand()
|
||||
|
||||
#include <dic.h>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include <wctype.h>
|
||||
#include <algorithm>
|
||||
#include <cstdio>
|
||||
|
||||
#include "dic.h"
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*****************************************************************************/
|
||||
|
||||
#include <string>
|
||||
#include <cstdio>
|
||||
#include "cross.h"
|
||||
|
||||
#define CROSS_MASK 0xFFFFFFFF
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 @@ void Duplicate::endTurn()
|
|||
}
|
||||
|
||||
// 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 @@ void Duplicate::setPlayedFlag(unsigned int iPlayerId, bool iNewFlag)
|
|||
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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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 @@ using std::wstring;
|
|||
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 @@ private:
|
|||
|
||||
/// 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_ */
|
||||
|
|
|
@ -148,9 +148,7 @@ int FreeGame::endTurn()
|
|||
{
|
||||
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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -501,7 +501,8 @@ void Game::nextPlayer()
|
|||
|
||||
|
||||
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,28 +551,31 @@ int Game::checkPlayedWord(const wstring &iCoord,
|
|||
return 10;
|
||||
}
|
||||
|
||||
// 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
|
||||
Rack rack;
|
||||
Player *player = m_players[m_currPlayer];
|
||||
player->getCurrentRack().getRack(rack);
|
||||
|
||||
Tile t;
|
||||
for (unsigned int i = 0; i < oRound.getWordLen(); i++)
|
||||
if (checkRack)
|
||||
{
|
||||
if (oRound.isPlayedFromRack(i))
|
||||
{
|
||||
if (oRound.isJoker(i))
|
||||
t = Tile::Joker();
|
||||
else
|
||||
t = oRound.getTile(i);
|
||||
// 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
|
||||
Rack rack;
|
||||
Player *player = m_players[m_currPlayer];
|
||||
player->getCurrentRack().getRack(rack);
|
||||
|
||||
if (!rack.in(t))
|
||||
Tile t;
|
||||
for (unsigned int i = 0; i < oRound.getWordLen(); i++)
|
||||
{
|
||||
if (oRound.isPlayedFromRack(i))
|
||||
{
|
||||
return 4;
|
||||
if (oRound.isJoker(i))
|
||||
t = Tile::Joker();
|
||||
else
|
||||
t = oRound.getTile(i);
|
||||
|
||||
if (!rack.in(t))
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
rack.remove(t);
|
||||
}
|
||||
rack.remove(t);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
49
game/game.h
49
game/game.h
|
@ -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 @@ public:
|
|||
***************/
|
||||
|
||||
/**
|
||||
* 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 @@ public:
|
|||
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;
|
||||
|
@ -317,15 +313,6 @@ protected:
|
|||
*/
|
||||
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 @@ protected:
|
|||
*/
|
||||
static Game* gameLoadFormat_15(FILE *fin, const Dictionary& iDic);
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* Training games ares saved using the initial Eliot format
|
||||
*/
|
||||
|
@ -347,6 +335,7 @@ protected:
|
|||
* Advanced game file format output
|
||||
*/
|
||||
void gameSaveFormat_15(ostream &out) const;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -40,3 +40,15 @@ EndGameException::EndGameException(const string &iMessage)
|
|||
{
|
||||
}
|
||||
|
||||
|
||||
LoadGameException::LoadGameException(const string &iMessage)
|
||||
: GameException(iMessage)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SaveGameException::SaveGameException(const string &iMessage)
|
||||
: GameException(iMessage)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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 @@ class EndGameException: public GameException
|
|||
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
|
||||
|
|
|
@ -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::createFromCmdLine(int argc, char **argv)
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
173
game/game_io.cpp
173
game/game_io.cpp
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include <cstring>
|
||||
#include <cstdlib> // For atoi
|
||||
#include <cstdio>
|
||||
|
||||
#include "dic.h"
|
||||
#include "pldrack.h"
|
||||
|
@ -106,6 +107,7 @@ Game* Game::gameLoadFormat_14(FILE *fin, const Dictionary& iDic)
|
|||
Game *pGame = NULL;
|
||||
|
||||
pGame = GameFactory::Instance()->createTraining(iDic);
|
||||
pGame->addPlayer(new HumanPlayer);
|
||||
pGame->start();
|
||||
|
||||
/* rack word ?bonus pts coord */
|
||||
|
@ -390,9 +392,7 @@ Game* Game::gameLoadFormat_15(FILE *fin, const Dictionary& iDic)
|
|||
// 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 @@ Game* Game::gameLoadFormat_15(FILE *fin, const Dictionary& iDic)
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -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 @@ class GameMoveCmd: public Command
|
|||
{
|
||||
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();
|
||||
|
|
|
@ -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>
|
||||
|
|
57
game/mark_played_cmd.cpp
Normal file
57
game/mark_played_cmd.cpp
Normal file
|
@ -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();
|
||||
}
|
||||
|
54
game/mark_played_cmd.h
Normal file
54
game/mark_played_cmd.h
Normal file
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ wstring Move::toString() const
|
|||
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;
|
||||
|
|
|
@ -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 @@ class Move
|
|||
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
|
||||
|
|
|
@ -172,12 +172,18 @@ void Navigation::clearFuture()
|
|||
}
|
||||
|
||||
|
||||
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;
|
||||
|
|
|
@ -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 @@ class Navigation
|
|||
*/
|
||||
void clearFuture();
|
||||
|
||||
const vector<TurnCmd *> & getCommands() const;
|
||||
|
||||
/**
|
||||
* Print the contents of the commands history, to ease debugging
|
||||
*/
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 @@ class PlayerMoveCmd: public Command
|
|||
|
||||
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();
|
||||
|
|
|
@ -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 @@ class PlayerPointsCmd: public Command
|
|||
|
||||
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();
|
||||
|
|
|
@ -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 @@ class PlayerRackCmd: public Command
|
|||
|
||||
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();
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 @@ PublicGame::GameVariant PublicGame::getVariant() const
|
|||
{
|
||||
if (m_game.getVariant() == Game::kJOKER)
|
||||
return kJOKER;
|
||||
else if (m_game.getVariant() == Game::kEXPLOSIVE)
|
||||
return kEXPLOSIVE;
|
||||
else
|
||||
return kNONE;
|
||||
}
|
||||
|
@ -251,21 +255,16 @@ int PublicGame::freeGamePass(const wstring &iToChange)
|
|||
|
||||
/***************************/
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/***************************/
|
||||
|
|
|
@ -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 @@ public:
|
|||
***************/
|
||||
|
||||
/**
|
||||
* 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
|
||||
};
|
||||
static PublicGame * load(const string &iFileName, const Dictionary &iDic);
|
||||
|
||||
/**
|
||||
* 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
|
||||
* Save a game to a XML file
|
||||
*/
|
||||
static PublicGame * 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 kFILE_FORMAT_ADVANCED
|
||||
*/
|
||||
void save(ostream &out, GameFileFormat format = kFILE_FORMAT_STANDARD) const;
|
||||
void save(const string &iFileName) const;
|
||||
|
||||
/***************
|
||||
* Navigation in the game history
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 @@ void Training::endTurn()
|
|||
|
||||
// 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 @@ int Training::playResult(unsigned int n)
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 @@ class TurnCmd: public Command
|
|||
|
||||
bool isEmpty() const { return m_commands.empty(); }
|
||||
|
||||
const vector<Command *> & getCommands() const { return m_commands; }
|
||||
|
||||
virtual bool isAutoExecution() const;
|
||||
|
||||
virtual wstring toString() const;
|
||||
|
|
337
game/xml_reader.cpp
Normal file
337
game/xml_reader.cpp
Normal file
|
@ -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());
|
||||
}
|
||||
|
89
game/xml_reader.h
Normal file
89
game/xml_reader.h
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2009 Eliot
|
||||
* Authors: Olivier Teuliere <ipkiss@via.ecp.fr>
|
||||
*
|
||||
* 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
|
||||
|
212
game/xml_writer.cpp
Normal file
212
game/xml_writer.cpp
Normal file
|
@ -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;
|
||||
}
|
||||
|
37
game/xml_writer.h
Normal file
37
game/xml_writer.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2009 Eliot
|
||||
* Authors: Olivier Teuliere <ipkiss@via.ecp.fr>
|
||||
*
|
||||
* 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
|
||||
|
|
@ -80,7 +80,7 @@ eliot_SOURCES = \
|
|||
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)
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include "config.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <QtGui/QLabel>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QFileDialog>
|
||||
|
@ -263,19 +262,17 @@ void MainWindow::updateForGame(const PublicGame *iGame)
|
|||
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 @@ void MainWindow::onGameLoad()
|
|||
QString fileName = QFileDialog::getOpenFileName(this, _q("Load a game"));
|
||||
if (fileName != "")
|
||||
{
|
||||
destroyCurrentGame();
|
||||
Game *tmpGame = GameFactory::Instance()->load(qtl(fileName), *m_dic);
|
||||
if (tmpGame == NULL)
|
||||
try
|
||||
{
|
||||
displayErrorMsg(_q("Error while loading the game"));
|
||||
PublicGame *tmpGame = PublicGame::load(qtl(fileName), *m_dic);
|
||||
destroyCurrentGame();
|
||||
m_game = tmpGame;
|
||||
}
|
||||
catch (std::exception &e)
|
||||
{
|
||||
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,9 +528,15 @@ void MainWindow::onGameSaveAs()
|
|||
QString fileName = QFileDialog::getSaveFileName(this, _q("Save a game"));
|
||||
if (fileName != "")
|
||||
{
|
||||
ofstream fout(qtl(fileName));
|
||||
m_game->save(fout);
|
||||
displayInfoMsg(_q("Game saved"));
|
||||
try
|
||||
{
|
||||
m_game->save(qtl(fileName));
|
||||
displayInfoMsg(_q("Game saved"));
|
||||
}
|
||||
catch (std::exception &e)
|
||||
{
|
||||
displayErrorMsg(_q("Error saving game: %1").arg(e.what()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ PublicGame * NewGame::createGame(const Dictionary &iDic) const
|
|||
}
|
||||
else
|
||||
{
|
||||
const_cast<Player *>(&game->getPlayer(0))->setName(qtw(_q("Training")));
|
||||
game->addPlayer(new HumanPlayer);
|
||||
}
|
||||
|
||||
// Joker game?
|
||||
|
|
|
@ -49,10 +49,6 @@ training_cross4 0
|
|||
# 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
|
||||
#################
|
||||
|
|
|
@ -4,15 +4,15 @@ commande> d 1 0
|
|||
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 @@ commande> a g
|
|||
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
|
||||
|
|
|
@ -4,48 +4,47 @@ commande> d 0 2
|
|||
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: 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 |
|
||||
|
||||
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 |
|
||||
|
||||
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 - - -
|
||||
|
|
|
@ -21,36 +21,35 @@ commande> a g
|
|||
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
|
||||
|
|
|
@ -4,38 +4,38 @@ commande> d 2 1
|
|||
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 @@ commande> a g
|
|||
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
|
||||
|
|
|
@ -9,48 +9,46 @@ ILERERU
|
|||
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: player 1 out of 2
|
||||
Game: mode=Duplicate
|
||||
Game: variant=unknown
|
||||
Game: history:
|
||||
N | P | RACK | SOLUTION | REF | PTS | BONUS
|
||||
===|===|==========|================|=====|=====|======
|
||||
|
||||
Game type: Duplicate
|
||||
Player 0: Human
|
||||
Player 1: Human
|
||||
|
||||
N | RACK | SOLUTION | REF | PTS | P | 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: 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 | *
|
||||
|
||||
Game type: Duplicate
|
||||
Player 0: Human
|
||||
Player 1: Human
|
||||
|
||||
N | RACK | SOLUTION | REF | PTS | P | BONUS
|
||||
===|==========|=================|=====|=====|===|======
|
||||
1 | EEILRRU | RELIURE | H4 | 66 | 0 | *
|
||||
|
||||
Total: 66
|
||||
|
||||
Rack 0: GUAUVBP
|
||||
Rack 1: GUAUVBP
|
||||
Score 0: 66
|
||||
Score 1: 66
|
||||
commande> q
|
||||
fin du mode duplicate
|
||||
commande> q
|
||||
|
|
|
@ -7,8 +7,8 @@ commande> a t
|
|||
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 @@ 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 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 @@ 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
|
||||
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 @@ 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 ?
|
||||
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: 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 | *
|
||||
|
||||
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 | *
|
||||
|
||||
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 @@ 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 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 @@ commande> a g
|
|||
N - - - - - - - - - - - - - - -
|
||||
O - - - - - - - - - - - - - - -
|
||||
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 | *
|
||||
|
||||
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 | *
|
||||
|
||||
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 @@ commande> a g
|
|||
N - - - - - - - - - - - - - - -
|
||||
O - - - - - - - - - - - - - - -
|
||||
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> 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
|
||||
|
|
|
@ -24,21 +24,20 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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: 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 @@ commande> a g
|
|||
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> 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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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
|
||||
===|===|==========|================|=====|=====|======
|
||||
|
||||
Game type: Duplicate
|
||||
Player 0: Human
|
||||
Player 1: Human
|
||||
Player 2: Computer
|
||||
|
||||
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
|
||||
|
@ -195,32 +190,31 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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: 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 @@ commande> a g
|
|||
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 |
|
||||
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: 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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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: 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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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> h p
|
||||
commande> a g
|
||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
|
@ -456,23 +444,22 @@ commande> a g
|
|||
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: 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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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
|
||||
commande> j JE 7G
|
||||
commande> a g
|
||||
|
@ -565,23 +550,22 @@ commande> a g
|
|||
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 |
|
||||
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: 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
|
||||
|
|
|
@ -9,26 +9,25 @@ ATNE??A
|
|||
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: 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 |
|
||||
|
||||
Game type: Duplicate
|
||||
Player 0: Human
|
||||
Player 1: Human
|
||||
|
||||
N | RACK | SOLUTION | REF | PTS | P | BONUS
|
||||
===|==========|=================|=====|=====|===|======
|
||||
1 | ATNE??A | ay | H8 | 0 | 1 |
|
||||
|
||||
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 - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -4,46 +4,45 @@ commande> l 0 3
|
|||
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: 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 | *
|
||||
|
||||
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 | *
|
||||
|
||||
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
|
||||
|
|
|
@ -4,46 +4,45 @@ commande> l 2 0
|
|||
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: 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 |
|
||||
|
||||
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 |
|
||||
|
||||
Total: 0
|
||||
|
||||
Rack 0: EEENN+ER
|
||||
Rack 1: HAAUAUO
|
||||
Score 0: 0
|
||||
Score 1: 0
|
||||
commande> q
|
||||
fin du mode partie libre
|
||||
commande> q
|
||||
|
|
|
@ -4,8 +4,8 @@ commande> le 1 1
|
|||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 @@ commande> a gm
|
|||
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 @@ commande> a g
|
|||
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
|
||||
|
|
|
@ -4,8 +4,8 @@ commande> lj 1 1
|
|||
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 @@ 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
|
||||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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: 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 | *
|
||||
|
||||
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 | *
|
||||
|
||||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
N - - - - - - - - - - - - - - -
|
||||
O - - - - - - - - - - - - - - -
|
||||
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> 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
|
||||
|
|
|
@ -4,9 +4,9 @@ commande> l 1 2
|
|||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 | WELcHE | 3C | 48 |
|
||||
5 | 1 | BNU+FYTE | BEY | 2H | 43 |
|
||||
6 | 2 | DGU+IDVA | VAGI | 1I | 25 |
|
||||
|
||||
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 |
|
||||
|
||||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 |
|
||||
2 | 1 | NBZEUAU | AUNEZ | 6F | 36 |
|
||||
3 | 2 | NUDATMG | MATON | 5E | 18 |
|
||||
4 | 0 | EL+HI?WE | WELcHE | 3C | 48 |
|
||||
|
||||
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 |
|
||||
|
||||
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: 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 |
|
||||
|
||||
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 |
|
||||
|
||||
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 @@ commande> a g
|
|||
O - - - - - - - - - - - - - - -
|
||||
commande> h f
|
||||
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> a g
|
||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
A - - - - - - - - - - - - - - -
|
||||
|
@ -254,22 +248,21 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 |
|
||||
|
||||
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 |
|
||||
|
||||
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 @@ commande> a g
|
|||
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> h n
|
||||
commande> j aWELE 3f
|
||||
commande> a g
|
||||
|
@ -363,27 +354,26 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
N - T U R F S - - - - - - - - -
|
||||
O - - - E - - - - - - - - - - -
|
||||
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 |
|
||||
7 | 0 | HI+CEEEP | (PASS) | - | 0 |
|
||||
8 | 1 | FNTU+FSR | TURFS | N2 | 38 |
|
||||
9 | 2 | DDU+OREE | REDORE | 4J | 22 |
|
||||
|
||||
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 |
|
||||
|
||||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
N - T U R F S - - - - - - - - -
|
||||
O - - - E - - - - - - - - - - -
|
||||
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 |
|
||||
7 | 0 | HI+CEEEP | (PASS) | - | 0 |
|
||||
8 | 1 | FNTU+FSR | TURFS | N2 | 38 |
|
||||
9 | 2 | DDU+OREE | REDORE | 4J | 22 |
|
||||
|
||||
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 |
|
||||
|
||||
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
|
||||
|
|
|
@ -4,8 +4,8 @@ commande> l 1 1
|
|||
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> 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: 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 |
|
||||
|
||||
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 |
|
||||
|
||||
Total: 782
|
||||
|
||||
Rack 0: AGSSTUV
|
||||
Rack 1:
|
||||
Score 0: -11
|
||||
Score 1: 793
|
||||
commande> q
|
||||
fin du mode partie libre
|
||||
commande> q
|
||||
|
|
|
@ -9,56 +9,53 @@ commande> p
|
|||
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: 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 | *
|
||||
|
||||
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 | *
|
||||
|
||||
Total: 68
|
||||
|
||||
Rack 0: ESEASTU
|
||||
Score 0: 68
|
||||
commande> p
|
||||
commande> j SAUTEES 11H
|
||||
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 |
|
||||
2 | 0 | AELMNU? | (PASS) | - | 0 |
|
||||
3 | 0 | AELMNU? | MALvENU | H4 | 68 | *
|
||||
4 | 0 | ESEASTU | (PASS) | - | 0 |
|
||||
5 | 0 | AEESSTU | SAUTEES | 11H | 72 | *
|
||||
|
||||
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 | *
|
||||
|
||||
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 - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -24,38 +24,37 @@ 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 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
|
||||
|
|
|
@ -50,21 +50,20 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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
|
||||
|
|
26
test/rosace
26
test/rosace
|
@ -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
|
|
@ -1,5 +1,5 @@
|
|||
c hutte
|
||||
a g
|
||||
a P
|
||||
a p
|
||||
q
|
||||
q
|
||||
|
|
|
@ -20,33 +20,39 @@ commande> a g
|
|||
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
|
||||
|
|
|
@ -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
|
|
@ -1,92 +0,0 @@
|
|||
Using seed: 0
|
||||
[?] pour l'aide
|
||||
commande> c rosace
|
||||
mode entra絜ement
|
||||
[?] 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絜ement
|
||||
commande> q
|
|
@ -116,21 +116,20 @@ 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 ?
|
||||
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
|
||||
|
|
|
@ -36,20 +36,19 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 p
|
||||
commande> a g
|
||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
|
@ -102,19 +100,18 @@ commande> a g
|
|||
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 |
|
||||
|
||||
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 |
|
||||
|
||||
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 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 l
|
||||
commande> a g
|
||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
|
@ -195,20 +190,19 @@ commande> a g
|
|||
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> +
|
||||
commande> a t
|
||||
C?BETNL
|
||||
|
@ -237,20 +231,19 @@ commande> a g
|
|||
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> +
|
||||
Cannot add a command to an old turn
|
||||
commande> h f
|
||||
|
@ -272,17 +265,16 @@ commande> a g
|
|||
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 @@ commande> a g
|
|||
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 n
|
||||
commande> a g
|
||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
|
@ -333,19 +324,18 @@ commande> a g
|
|||
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 |
|
||||
|
||||
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 |
|
||||
|
||||
Total: 63
|
||||
|
||||
Rack 0: ORSU
|
||||
Score 0: 63
|
||||
commande> *
|
||||
Cannot add a command to an old turn
|
||||
commande> +
|
||||
|
@ -376,20 +366,19 @@ commande> a g
|
|||
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 | HELLO | OHE | J7 | 18 |
|
||||
|
||||
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 |
|
||||
|
||||
Total: 81
|
||||
|
||||
Rack 0: LL
|
||||
Score 0: 81
|
||||
commande> q
|
||||
fin du mode entraînement
|
||||
commande> q
|
||||
|
|
|
@ -19,7 +19,7 @@ t UU+NYTEP
|
|||
j TYPE O12
|
||||
a gd # r1
|
||||
t NUU+S?GE
|
||||
a P
|
||||
a p
|
||||
a t
|
||||
a l
|
||||
a g
|
||||
|
|
|
@ -54,20 +54,26 @@ commande> a gd # r1
|
|||
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
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue