#ifndef CONTROLLER_H #define CONTROLLER_H #include "stratego.h" #include /** * Class to control a player for Stratego * Abstract base class */ class Controller { public: Controller(const Piece::Colour & newColour, const char * newName = "no-name") : colour(newColour), name(newName) {} virtual ~Controller() {} MovementResult Setup(const char * opponentName); MovementResult MakeMove(std::string & buffer); virtual bool HumanController() const {return false;} //Hacky... overrides in human_controller... avoids having to use run time type info void Message(const std::string & buffer) {Message(buffer.c_str());} virtual void Message(const char * string) = 0; virtual MovementResult QuerySetup(const char * opponentName, std::string setup[]) = 0; virtual MovementResult QueryMove(std::string & buffer) = 0; virtual bool Valid() const {return true;} const Piece::Colour colour; std::string name; }; #endif //CONTROLLER_H