Changed directory structure (again)
[progcomp2012.git] / judge / manager / game.h
diff --git a/judge/manager/game.h b/judge/manager/game.h
new file mode 100644 (file)
index 0000000..1212b89
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef MAIN_H
+#define MAIN_H
+
+#include "stratego.h"
+#include "ai_controller.h"
+#include "human_controller.h"
+
+
+
+/**
+ * Class to manage the game
+ */
+class Game
+{
+       public:
+               Game(const char * redPath, const char * bluePath, const bool enableGraphics, double newStallTime = 1.0, const bool allowIllegal=false, FILE * newLog = NULL, const Piece::Colour & newRevealed = Piece::BOTH, int maxTurns = 5000, const bool printBoard = false);
+               Game(const char * fromFile, const bool enableGraphics, double newStallTime = 1.0, const bool allowIllegal=false, FILE * newLog = NULL, const Piece::Colour & newRevealed = Piece::BOTH, int maxTurns = 5000, const bool printBoard = false);
+               virtual ~Game();
+
+               
+
+               void Wait(double wait); 
+
+               Piece::Colour Setup(const char * redName, const char * blueName);
+               MovementResult Play();
+               void PrintEndMessage(const MovementResult & result);
+               
+
+               static void HandleBrokenPipe(int signal);
+               void ReadUserCommand();
+               
+               const Piece::Colour Turn() const {return turn;}
+               void ForceTurn(const Piece::Colour & newTurn) {turn = newTurn;}
+               int TurnCount() const {return turnCount;}
+
+               static Game * theGame;
+       public:
+               int logMessage(const char * format, ...);
+               FILE * GetLogFile() const {return log;}
+               Controller * red;
+               Controller * blue;
+       private:
+               Piece::Colour turn;
+               
+       public:
+               Board theBoard;
+       private:
+               const bool graphicsEnabled;
+               double stallTime;
+       public:
+               const bool allowIllegalMoves;
+
+       private:
+               FILE * log;
+               
+       public:
+               const Piece::Colour reveal;
+               int turnCount;
+
+               static bool gameCreated;
+
+               FILE * input;
+
+               int maxTurns;
+               const bool printBoard;
+               
+};
+
+class FileController : public Controller
+{
+       public:
+               FileController(const Piece::Colour & newColour, FILE * newFile) : Controller(newColour, "file"), file(newFile) {}
+               virtual ~FileController() {}
+
+               virtual void Message(const char * string) {} //Don't send messages
+               virtual MovementResult QuerySetup(const char * opponentName, std::string setup[]);
+               virtual MovementResult QueryMove(std::string & buffer);
+               virtual bool Valid() const {return file != NULL;}
+
+       private:
+               FILE * file;
+
+
+};
+
+
+
+#endif //MAIN_H

UCC git Repository :: git.ucc.asn.au