Author: Mathieu Pagé
Date: 06:33:16 03/16/04
Go up one level in this thread
#include "CWinboard.h" #include <string> #include <vector> #include <iostream> using namespace std; namespace WinboardWrapper{ // This function is not a method of CWinboard but is required by the parser vector <string> Tokenize(string s, char cDelimiteur) { string strTmp; vector <string> tokens; unsigned int i; for(i = 0; i < s.length(); i++) { if (s[i] != cDelimiteur) { strTmp += s[i]; } else { tokens.push_back(strTmp); strTmp = ""; } } if (strTmp != "") { tokens.push_back(strTmp); } return tokens; } void CWinboard::RunWinboardMode() { int iCmp; // Compteur bon à tout faire string strEntre; // Chaîne que l'utilisateur tappe vector<string> tokens; // Liste des paramêtres incluant la commande const int iNbCommandes = 42; const string strCommandes[] = {"protover", "accepted", "rejected", "new", "variant", "random", "force", "go", "playother", "white", "black", "level", "st", "sd", "time", "otime", "usermove", "movenow", "ping", "draw", "result", "setboard", "edit", "hint", "bk", "undo", "remove", "hard", "easy", "post", "noPost", "analyze", "name", "rating", "ics", "computer", "pause", "resume", "partner", "ptell", "holding", "exit"}; void (CWinboard::*commandes[])(vector<string>) = {ParserProtover, ParserAccepted, ParserRejected, ParserNew, ParserVariant, ParserRandom, ParserForce, ParserGo, ParserPlayOther, ParserWhite, ParserBlack, ParserLevel, ParserSt, ParserSd, ParserTime, ParserOtime, ParserUserMove, ParserMoveNow, ParserPing, ParserDraw, ParserResult, ParserSetBoard, ParserEdit, ParserHint, ParserBk, ParserUndo, ParserRemove, ParserHard, ParserEasy, ParserPost, ParserNoPost, ParserAnalyze, ParserName, ParserRating, ParserIcs, ParserComputer, ParserPause, ParserResume, ParserPartner, ParserPTell, ParserHolding, ParserExit}; // turn off buffering on output cout.setf(ios::unitbuf); do { // On lit une entrée getline(cin, strEntre); // on sépare la ligne de commande en jetons tokens = Tokenize(strEntre, ' '); if (tokens.size() > 0 && tokens[0] != "quit") { iCmp = 0; while(tokens[0] != strCommandes[iCmp] && iCmp < iNbCommandes) { iCmp++; } // Si on a trouvé la commande if (iCmp < iNbCommandes) { (this->*commandes[iCmp])(tokens); } else { // si on a pas trouvé la commande Error("unknown command", tokens[0]); } } } while (tokens.size() == 0 || tokens[0] != "quit"); } void CWinboard::ParserProtover(std::vector<std::string> vecParams) { protover(vecParams[1]); } void CWinboard::ParserAccepted(std::vector<std::string> vecParams) { accepted(vecParams[1]); } void CWinboard::ParserRejected(std::vector<std::string> vecParams) { rejected(vecParams[1]); } void CWinboard::ParserNew(std::vector<std::string> vecParams) { _new(); } void CWinboard::ParserVariant(std::vector<std::string> vecParams) { static const ciNbVariants = 13; string strVariants[] = {"wildcastle", "nocastle", "fisherandom", "bughouse", "crazyhouse", "losers", "suicide", "giveaway", "twokings", "kriegspiel", "atomic", "3check", "unknown"}; int iCmp = 0; while (iCmp < ciNbVariants && strVariants[iCmp] != vecParams[1]) { iCmp++; } if (iCmp < ciNbVariants) { variant((EVariant)iCmp); } else { Error("Unknown variant", "variant"); } } void CWinboard::ParserRandom(std::vector<std::string> vecParams) { random(); } void CWinboard::ParserForce(std::vector<std::string> vecParams) { force(); } void CWinboard::ParserGo(std::vector<std::string> vecParams) { go(); } void CWinboard::ParserPlayOther(std::vector<std::string> vecParams) { playother(); } void CWinboard::ParserWhite(std::vector<std::string> vecParams) { white(); } void CWinboard::ParserBlack(std::vector<std::string> vecParams) { black(); } void CWinboard::ParserLevel(std::vector<std::string> vecParams) { level(atoi(vecParams[1].c_str()), atoi(vecParams[2].c_str()) * 60, atoi(vecParams[3].c_str())); } void CWinboard::ParserSt(std::vector<std::string> vecParams) { st(atoi(vecParams[1].c_str())); } void CWinboard::ParserSd(std::vector<std::string> vecParams) { sd(atoi(vecParams[1].c_str())); } void CWinboard::ParserTime(std::vector<std::string> vecParams) { time(atoi(vecParams[1].c_str())); } void CWinboard::ParserOtime(std::vector<std::string> vecParams) { otime(atoi(vecParams[1].c_str())); } void CWinboard::ParserUserMove(std::vector<std::string> vecParams) { usermove(vecParams[1]); } void CWinboard::ParserMoveNow(std::vector<std::string> vecParams) { movenow(); } void CWinboard::ParserPing(std::vector<std::string> vecParams) { ping(atoi(vecParams[1].c_str())); } void CWinboard::ParserDraw(std::vector<std::string> vecParams) { draw(); } void CWinboard::ParserResult(std::vector<std::string> vecParams) { if (vecParams[1] == "1-0") { result(cWhitesWin, vecParams[2]); } else if (vecParams[1] == "0-1") { result(cBlackWin, vecParams[2]); } else { result(cDraw, vecParams[2]); } } void CWinboard::ParserSetBoard(std::vector<std::string> vecParams) { setboard(vecParams[1] + " " + vecParams[2] + " " + vecParams[3] + " " + vecParams[4] + " " + vecParams[5] + " " + vecParams[6]); } void CWinboard::ParserEdit(std::vector<std::string> vecParams) { edit(); } void CWinboard::ParserHint(std::vector<std::string> vecParams) { hint(); } void CWinboard::ParserBk(std::vector<std::string> vecParams) { bk(); } void CWinboard::ParserUndo(std::vector<std::string> vecParams) { undo(); } void CWinboard::ParserRemove(std::vector<std::string> vecParams) { remove(); } void CWinboard::ParserHard(std::vector<std::string> vecParams) { hard(); } void CWinboard::ParserEasy(std::vector<std::string> vecParams) { easy(); } void CWinboard::ParserPost(std::vector<std::string> vecParams) { post(); } void CWinboard::ParserNoPost(std::vector<std::string> vecParams) { nopost(); } void CWinboard::ParserAnalyze(std::vector<std::string> vecParams) { analyze(); } void CWinboard::ParserName(std::vector<std::string> vecParams) { string str; unsigned int i; for(i = 1; i < vecParams.size(); i++) { str = str + vecParams[i] + " "; } name(str); } void CWinboard::ParserRating(std::vector<std::string> vecParams) { rating(atoi(vecParams[1].c_str()), atoi(vecParams[2].c_str())); } void CWinboard::ParserIcs(std::vector<std::string> vecParams) { ics(vecParams[1]); } void CWinboard::ParserComputer(std::vector<std::string> vecParams) { computer(); } void CWinboard::ParserPause(std::vector<std::string> vecParams) { pause(); } void CWinboard::ParserResume(std::vector<std::string> vecParams) { resume(); } void CWinboard::ParserPartner(std::vector<std::string> vecParams) { if (vecParams.size() == 1) { NoPartner(); } else { partner(vecParams[1]); } } void CWinboard::ParserPTell(std::vector<std::string> vecParams) { string str; unsigned int i; for(i = 1; i < vecParams.size(); i++) { str = str + vecParams[i] + " "; } ptell(str); } void CWinboard::ParserHolding(std::vector<std::string> vecParams) { if (vecParams.size() == 3) { holding(vecParams[1], vecParams[2]); } else { holding(vecParams[1], vecParams[2], vecParams[3][0], vecParams[3][1]); } } void CWinboard::ParserExit(std::vector<std::string> vecParams) { exit(); } void CWinboard::feature(bool ping, bool playother, bool san, bool time, bool draw, bool sigint, bool sigterm, bool reuse, bool analyze, std::string myname, std::string variants, bool colors, bool ics, bool name, bool pause) { cout <<"feature" <<" ping=" <<(ping ? 1 : 0) <<" setboard=1" <<" playother=" <<(playother ? 1 : 0) <<" san=" <<(san ? 1 : 0) <<" usermove=1" <<" time=" <<(time ? 1 : 0) <<" draw=" <<(draw ? 1 : 0) <<" sigint=" <<(sigint ? 1 : 0) <<" analyze=" <<(analyze ? 1 : 0) <<" myname=\"" <<myname <<"\"" <<" variants=\"" <<variants <<"\"" <<" colors=" <<(colors ? 1 : 0) <<" ics=" <<(ics ? 1 : 0) <<" name=" <<(name ? 1 : 0) <<" pause=" <<(pause ? 1 : 0) <<endl; cout <<"feature done=1" <<endl; } void CWinboard::IllegalMove(std::string strMove, std::string strReason) { cout <<"Illegal move"; if (strReason != "") { cout <<" (" <<strReason <<")"; } cout <<": " <<strMove <<endl; } void CWinboard::Error(std::string strErrorType, std::string strCommand) { cout <<"Error (" <<strErrorType <<"): " <<strCommand <<endl; } void CWinboard::Move(std::string strMove) { cout <<"move " <<strMove <<endl; } void CWinboard::Result(EResult ersResultat, std::string strComment) { static const string strResults[] = {"1-0", "0-1", "1/2-1/2"}; cout <<strResults[ersResultat] <<"{" <<strComment <<"}" <<endl; } void CWinboard::Resign() { cout <<"resign" <<endl; } void CWinboard::OfferDraw() { cout <<"offer draw" <<endl; } void CWinboard::TellOpponent(std::string strMessage) { cout <<"tellopponent " <<strMessage <<endl; } void CWinboard::TellOthers(std::string strMessage) { cout <<"tellothers " <<strMessage <<endl; } void CWinboard::TellAll(std::string strMessage) { cout <<"tellall " <<strMessage <<endl; } void CWinboard::TellUser(std::string strMessage) { cout <<"telluser " <<strMessage <<endl; } void CWinboard::TellUserError(std::string strMessage) { cout <<"tellusererror " <<strMessage <<endl; } void CWinboard::AskUser(std::string strRepTag, std::string strMessage) { cout <<"askuser " <<strRepTag <<' ' <<strMessage <<endl; } void CWinboard::TellICS(std::string strMessage) { cout <<"tellics " <<strMessage <<endl; } void CWinboard::TellICSNoAlias(std::string strMessage) { cout <<"tellicsnoalias " <<strMessage <<endl; } void CWinboard::ThinkingOutput(int iPly, int iScore, int iTime, int iNodes, std::string strPV) { cout <<iPly <<' ' <<iScore <<' ' <<iTime <<' ' <<iNodes <<' ' <<strPV <<endl; } void CWinboard::Pong(int iPingNumber) { cout <<"pong " <<iPingNumber <<endl; } };
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.