mirror of
git://git.savannah.nongnu.org/eliot.git
synced 2025-01-15 03:44:04 +01:00
Text interface: basic support for the arbitration mode
This commit is contained in:
parent
0b3120a792
commit
a1e06317f0
1 changed files with 209 additions and 4 deletions
|
@ -50,6 +50,7 @@
|
||||||
#include "encoding.h"
|
#include "encoding.h"
|
||||||
#include "game_exception.h"
|
#include "game_exception.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
#include "move.h"
|
||||||
|
|
||||||
class Game;
|
class Game;
|
||||||
|
|
||||||
|
@ -244,7 +245,7 @@ void helpTraining()
|
||||||
printf(" n [] : jouer le résultat numéro []\n");
|
printf(" n [] : jouer le résultat numéro []\n");
|
||||||
printf(" r : rechercher les meilleurs résultats\n");
|
printf(" r : rechercher les meilleurs résultats\n");
|
||||||
printf(" s [] : sauver la partie en cours dans le fichier []\n");
|
printf(" s [] : sauver la partie en cours dans le fichier []\n");
|
||||||
printf(" h [p|n|f|l|r] : naviguer dans l'historique (prev, next, first, last, replay\n");
|
printf(" h [p|n|f|l|r] : naviguer dans l'historique (prev, next, first, last, replay)\n");
|
||||||
printf(" q : quitter le mode entraînement\n");
|
printf(" q : quitter le mode entraînement\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +269,7 @@ void helpFreegame()
|
||||||
printf(" j [] {} : jouer le mot [] aux coordonnées {}\n");
|
printf(" j [] {} : jouer le mot [] aux coordonnées {}\n");
|
||||||
printf(" p [] : passer son tour en changeant les lettres []\n");
|
printf(" p [] : passer son tour en changeant les lettres []\n");
|
||||||
printf(" s [] : sauver la partie en cours dans le fichier []\n");
|
printf(" s [] : sauver la partie en cours dans le fichier []\n");
|
||||||
printf(" h [p|n|f|l|r] : naviguer dans l'historique (prev, next, first, last, replay\n");
|
printf(" h [p|n|f|l|r] : naviguer dans l'historique (prev, next, first, last, replay)\n");
|
||||||
printf(" q : quitter le mode partie libre\n");
|
printf(" q : quitter le mode partie libre\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,6 +297,39 @@ void helpDuplicate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void helpArbitration()
|
||||||
|
{
|
||||||
|
printf(" ? : aide -- cette page\n");
|
||||||
|
printf(" a [g|l|p|r|t] : afficher :\n");
|
||||||
|
printf(" g -- grille\n");
|
||||||
|
printf(" gj -- grille + jokers\n");
|
||||||
|
printf(" gm -- grille + valeur des cases\n");
|
||||||
|
printf(" gn -- grille + valeur des cases (variante)\n");
|
||||||
|
printf(" gd -- grille + debug cross (debug only)\n");
|
||||||
|
printf(" l -- lettres non jouées\n");
|
||||||
|
printf(" p -- partie\n");
|
||||||
|
printf(" pd -- partie (debug)\n");
|
||||||
|
printf(" r -- recherche\n");
|
||||||
|
printf(" s -- score\n");
|
||||||
|
printf(" S -- score de tous les joueurs\n");
|
||||||
|
printf(" t -- tirage\n");
|
||||||
|
printf(" d [] : vérifier le mot []\n");
|
||||||
|
printf(" * : tirage aléatoire\n");
|
||||||
|
printf(" t [] : changer le tirage\n");
|
||||||
|
printf(" j j [] {} : jouer le mot [] aux coordonnées {} pour le joueur j\n");
|
||||||
|
printf(" m [] {} : définir le master move [] aux coordonnées {}\n");
|
||||||
|
printf(" e j [w|p|s] {} : assigner un événement au joueur j :\n");
|
||||||
|
printf(" w -- avertissement\n");
|
||||||
|
printf(" p -- pénalité\n");
|
||||||
|
printf(" s -- solo\n");
|
||||||
|
printf(" {} -- valeur de l'événement\n");
|
||||||
|
printf(" f : finaliser le tour courant\n");
|
||||||
|
printf(" s [] : sauver la partie en cours dans le fichier []\n");
|
||||||
|
printf(" h [p|n|f|l|r] : naviguer dans l'historique (prev, next, first, last, replay)\n");
|
||||||
|
printf(" q : quitter le mode arbitrage\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void help()
|
void help()
|
||||||
{
|
{
|
||||||
printf(" ? : aide -- cette page\n");
|
printf(" ? : aide -- cette page\n");
|
||||||
|
@ -319,6 +353,14 @@ void help()
|
||||||
printf(" [] joueurs humains et {} joueurs IA (partie détonante)\n");
|
printf(" [] joueurs humains et {} joueurs IA (partie détonante)\n");
|
||||||
printf(" l8 [] {} : démarrer une partie libre avec\n");
|
printf(" l8 [] {} : démarrer une partie libre avec\n");
|
||||||
printf(" [] joueurs humains et {} joueurs IA (partie 7 sur 8)\n");
|
printf(" [] joueurs humains et {} joueurs IA (partie 7 sur 8)\n");
|
||||||
|
printf(" a [] {} : démarrer une partie arbitrage avec\n");
|
||||||
|
printf(" [] joueurs humains et {} joueurs IA\n");
|
||||||
|
printf(" aj [] {} : démarrer une partie arbitrage avec\n");
|
||||||
|
printf(" [] joueurs humains et {} joueurs IA (partie joker)\n");
|
||||||
|
printf(" ae [] {} : démarrer une partie arbitrage avec\n");
|
||||||
|
printf(" [] joueurs humains et {} joueurs IA (partie détonante)\n");
|
||||||
|
printf(" a8 [] {} : démarrer une partie arbitrage avec\n");
|
||||||
|
printf(" [] joueurs humains et {} joueurs IA (partie 7 sur 8)\n");
|
||||||
printf(" c [] : charger la partie du fichier []\n");
|
printf(" c [] : charger la partie du fichier []\n");
|
||||||
printf(" x [] {1} {2} {3} : expressions rationnelles\n");
|
printf(" x [] {1} {2} {3} : expressions rationnelles\n");
|
||||||
printf(" [] expression à rechercher\n");
|
printf(" [] expression à rechercher\n");
|
||||||
|
@ -846,6 +888,144 @@ void loopDuplicate(PublicGame &iGame)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loopArbitration(PublicGame &iGame)
|
||||||
|
{
|
||||||
|
printf("mode arbitrage\n");
|
||||||
|
printf("[?] pour l'aide\n");
|
||||||
|
|
||||||
|
bool quit = false;
|
||||||
|
while (!quit)
|
||||||
|
{
|
||||||
|
wstring command = rl_gets();
|
||||||
|
// Split the command
|
||||||
|
vector<wstring> tokens;
|
||||||
|
boost::char_separator<wchar_t> sep(L" ");
|
||||||
|
Tokenizer tok(command, sep);
|
||||||
|
BOOST_FOREACH(const wstring &wstr, tok)
|
||||||
|
{
|
||||||
|
tokens.push_back(wstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tokens.empty())
|
||||||
|
continue;
|
||||||
|
if (tokens[0].size() > 1)
|
||||||
|
{
|
||||||
|
printf("%s\n", "Invalid command");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch (tokens[0][0])
|
||||||
|
{
|
||||||
|
case L'?':
|
||||||
|
helpArbitration();
|
||||||
|
break;
|
||||||
|
case L'a':
|
||||||
|
case L'd':
|
||||||
|
case L'h':
|
||||||
|
case L's':
|
||||||
|
commonCommands(iGame, tokens);
|
||||||
|
break;
|
||||||
|
case L'f':
|
||||||
|
iGame.arbitrationFinalizeTurn();
|
||||||
|
break;
|
||||||
|
case L'j':
|
||||||
|
{
|
||||||
|
const wstring &id = checkNumToken(tokens, 1);
|
||||||
|
const wstring &word = checkLettersToken(tokens, 2, iGame.getDic());
|
||||||
|
const wstring &coord = checkAlphaNumToken(tokens, 3);
|
||||||
|
if (id == L"" || word == L"" || coord == L"")
|
||||||
|
{
|
||||||
|
helpArbitration();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int n = wtoi(id.c_str());
|
||||||
|
if (n < 0 || n >= (int)iGame.getNbPlayers())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Numéro de joueur invalide\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const Move &move = iGame.arbitrationCheckWord(word, coord);
|
||||||
|
iGame.arbitrationAssign(n, move);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case L'm':
|
||||||
|
{
|
||||||
|
const wstring &word = checkLettersToken(tokens, 1, iGame.getDic());
|
||||||
|
const wstring &coord = checkAlphaNumToken(tokens, 2);
|
||||||
|
if (word == L"" || coord == L"")
|
||||||
|
{
|
||||||
|
helpArbitration();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const Move &move = iGame.arbitrationCheckWord(word, coord);
|
||||||
|
iGame.duplicateSetMasterMove(move);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case L'e':
|
||||||
|
{
|
||||||
|
const wstring &id = checkNumToken(tokens, 1);
|
||||||
|
const wstring &type = checkAlphaToken(tokens, 2);
|
||||||
|
const wstring &value = checkNumToken(tokens, 3);
|
||||||
|
if (id == L"" || type == L"" || value == L"")
|
||||||
|
{
|
||||||
|
helpArbitration();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int n = wtoi(id.c_str());
|
||||||
|
if (n < 0 || n >= (int)iGame.getNbPlayers())
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Numéro de joueur invalide\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (type[0])
|
||||||
|
{
|
||||||
|
case L'w':
|
||||||
|
iGame.arbitrationToggleWarning(n);
|
||||||
|
break;
|
||||||
|
case L'p':
|
||||||
|
iGame.arbitrationAddPenalty(n, wtoi(value.c_str()));
|
||||||
|
break;
|
||||||
|
// case L's':
|
||||||
|
// iGame.arbitrationSetSolo(n, value);
|
||||||
|
// break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "Invalid event type\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case L't':
|
||||||
|
{
|
||||||
|
const wstring &letters =
|
||||||
|
checkLettersToken(tokens, 1, iGame.getDic());
|
||||||
|
if (letters == L"")
|
||||||
|
helpArbitration();
|
||||||
|
else
|
||||||
|
iGame.arbitrationSetRackManual(letters);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case L'*':
|
||||||
|
iGame.arbitrationSetRackRandom();
|
||||||
|
break;
|
||||||
|
case L'q':
|
||||||
|
quit = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("commande inconnue\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (std::exception &e)
|
||||||
|
{
|
||||||
|
printf("%s\n", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("fin du mode arbitrage\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void mainLoop(const Dictionary &iDic)
|
void mainLoop(const Dictionary &iDic)
|
||||||
{
|
{
|
||||||
printf("[?] pour l'aide\n");
|
printf("[?] pour l'aide\n");
|
||||||
|
@ -899,8 +1079,7 @@ void mainLoop(const Dictionary &iDic)
|
||||||
loopDuplicate(*game);
|
loopDuplicate(*game);
|
||||||
break;
|
break;
|
||||||
case PublicGame::kARBITRATION:
|
case PublicGame::kARBITRATION:
|
||||||
// TODO
|
loopArbitration(*game);
|
||||||
printf("The Arbitration mode is not yet supported\n");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//GameFactory::Instance()->releaseGame(*game);
|
//GameFactory::Instance()->releaseGame(*game);
|
||||||
|
@ -977,6 +1156,32 @@ void mainLoop(const Dictionary &iDic)
|
||||||
delete game;
|
delete game;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case L'a':
|
||||||
|
{
|
||||||
|
if (tokens.size() != 3)
|
||||||
|
{
|
||||||
|
help();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const wstring &nbHuman = checkNumToken(tokens, 1);
|
||||||
|
const wstring &nbAI = checkNumToken(tokens, 2);
|
||||||
|
if (nbHuman == L"" || nbAI == L"")
|
||||||
|
{
|
||||||
|
help();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// New free game
|
||||||
|
PublicGame *game = readGame(iDic, GameParams::kARBITRATION, tokens[0]);
|
||||||
|
for (int i = 0; i < wtoi(nbHuman.c_str()); i++)
|
||||||
|
game->addPlayer(new HumanPlayer);
|
||||||
|
for (int i = 0; i < wtoi(nbAI.c_str()); i++)
|
||||||
|
game->addPlayer(new AIPercent(1));
|
||||||
|
game->start();
|
||||||
|
loopArbitration(*game);
|
||||||
|
//GameFactory::Instance()->releaseGame(*game);
|
||||||
|
delete game;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case L'x':
|
case L'x':
|
||||||
// Regular expression tests
|
// Regular expression tests
|
||||||
handleRegexp(iDic, tokens);
|
handleRegexp(iDic, tokens);
|
||||||
|
|
Loading…
Reference in a new issue