mirror of
git://git.savannah.nongnu.org/eliot.git
synced 2024-12-27 09:58:08 +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 "game_exception.h"
|
||||
#include "settings.h"
|
||||
#include "move.h"
|
||||
|
||||
class Game;
|
||||
|
||||
|
@ -244,7 +245,7 @@ void helpTraining()
|
|||
printf(" n [] : jouer le résultat numéro []\n");
|
||||
printf(" r : rechercher les meilleurs résultats\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");
|
||||
}
|
||||
|
||||
|
@ -268,7 +269,7 @@ void helpFreegame()
|
|||
printf(" j [] {} : jouer le mot [] aux coordonnées {}\n");
|
||||
printf(" p [] : passer son tour en changeant les lettres []\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");
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
printf(" ? : aide -- cette page\n");
|
||||
|
@ -319,6 +353,14 @@ void help()
|
|||
printf(" [] joueurs humains et {} joueurs IA (partie détonante)\n");
|
||||
printf(" l8 [] {} : démarrer une partie libre avec\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(" x [] {1} {2} {3} : expressions rationnelles\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)
|
||||
{
|
||||
printf("[?] pour l'aide\n");
|
||||
|
@ -899,8 +1079,7 @@ void mainLoop(const Dictionary &iDic)
|
|||
loopDuplicate(*game);
|
||||
break;
|
||||
case PublicGame::kARBITRATION:
|
||||
// TODO
|
||||
printf("The Arbitration mode is not yet supported\n");
|
||||
loopArbitration(*game);
|
||||
break;
|
||||
}
|
||||
//GameFactory::Instance()->releaseGame(*game);
|
||||
|
@ -977,6 +1156,32 @@ void mainLoop(const Dictionary &iDic)
|
|||
delete game;
|
||||
}
|
||||
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':
|
||||
// Regular expression tests
|
||||
handleRegexp(iDic, tokens);
|
||||
|
|
Loading…
Reference in a new issue