00001 #ifndef MOVEPARSER_HPP
00002 #define MOVEPARSER_HPP
00003
00004 #include <string>
00005 #include <iostream>
00006
00007 #include "Game/Move.hpp"
00008 #include "Game/Boards/ChessBoard.hpp"
00009
00010 class MoveParser
00011 {
00012 private:
00013 static void deleteSpaces(std::string& str);
00014 public:
00015
00016
00024 static Move<ChessBoard::Coords> parse(const std::string& input, int moveColor)
00025 {
00026 std::string buffer = input;
00027 std::vector<ChessBoard::Coords> coords;
00028
00029 deleteSpaces(buffer);
00030
00031 if ( buffer.length() >= 4 )
00032 {
00033 for ( unsigned int i = 0 ; i < 4 ; i+=2 )
00034 {
00035 int columnNumber = tolower(buffer[i])-'a';
00036 int lineNumber = tolower(buffer[i+1])-'0';
00037
00038 ChessBoard::Coords newCoords(columnNumber,lineNumber-1);
00039 if ( !newCoords.isValid() )
00040 {
00041 std::cout << "Try to parse this move :'" << buffer << "'" << std::endl;
00042 return Move<ChessBoard::Coords>();
00043 }
00044 else
00045 {
00046 coords.push_back(newCoords);
00047 }
00048 }
00049
00050
00051 }
00052 else
00053 {
00054 std::cout << "Try to parse this move :'" << buffer << "'" << std::endl;
00055 return Move<ChessBoard::Coords>();
00056 }
00057
00058 Move<ChessBoard::Coords> move(moveColor,coords[0],coords[1]);
00059
00060 if ( buffer.length() == 5 )
00061 {
00062 if ( buffer[4] != '\n' && buffer[4] != '\r' && buffer[4] != ' ' )
00063 {
00064 move.setProperty("promotion",buffer[4]);
00065 }
00066 }
00067 return move;
00068 }
00069
00070 };
00071
00085 #endif