X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=judge%2Fmanager%2Fgame.cpp;h=0e768c5fe60333b099c4b072738f6315c29db91f;hp=f25c9f381cfcc62f25eaa951b3928bd34e44468d;hb=5f9adddd695f2664a0d690b59a779e40b51ade3d;hpb=341297b4dce9528d54fe9dceeff0d6dc33f70abe diff --git a/judge/manager/game.cpp b/judge/manager/game.cpp index f25c9f3..0e768c5 100644 --- a/judge/manager/game.cpp +++ b/judge/manager/game.cpp @@ -7,7 +7,7 @@ using namespace std; Game* Game::theGame = NULL; bool Game::gameCreated = false; -Game::Game(const char * redPath, const char * bluePath, const bool enableGraphics, double newStallTime, const bool allowIllegal, FILE * newLog, const Piece::Colour & newReveal, int newMaxTurns, bool newPrintBoard, double newTimeoutTime) : red(NULL), blue(NULL), turn(Piece::RED), theBoard(10,10), graphicsEnabled(enableGraphics), stallTime(newStallTime), allowIllegalMoves(allowIllegal), log(newLog), reveal(newReveal), turnCount(0), input(NULL), maxTurns(newMaxTurns), printBoard(newPrintBoard), timeoutTime(newTimeoutTime) +Game::Game(const char * redPath, const char * bluePath, const bool enableGraphics, double newStallTime, const bool allowIllegal, FILE * newLog, const Piece::Colour & newReveal, int newMaxTurns, bool newPrintBoard, double newTimeoutTime, const char * newImageOutput) : red(NULL), blue(NULL), turn(Piece::RED), theBoard(10,10), graphicsEnabled(enableGraphics), stallTime(newStallTime), allowIllegalMoves(allowIllegal), log(newLog), reveal(newReveal), turnCount(0), input(NULL), maxTurns(newMaxTurns), printBoard(newPrintBoard), timeoutTime(newTimeoutTime), imageOutput(newImageOutput) { gameCreated = false; if (gameCreated) @@ -43,10 +43,10 @@ Game::Game(const char * redPath, const char * bluePath, const bool enableGraphic fprintf(stderr, "BLUE! (blue: \"%s\")\n", bluePath); exit(EXIT_FAILURE); } - logMessage("Game initialised.\n"); +// logMessage("Game initialised.\n"); } -Game::Game(const char * fromFile, const bool enableGraphics, double newStallTime, const bool allowIllegal, FILE * newLog, const Piece::Colour & newReveal, int newMaxTurns, bool newPrintBoard, double newTimeoutTime) : red(NULL), blue(NULL), turn(Piece::RED), theBoard(10,10), graphicsEnabled(enableGraphics), stallTime(newStallTime), allowIllegalMoves(allowIllegal), log(newLog), reveal(newReveal), turnCount(0), input(NULL), maxTurns(newMaxTurns), printBoard(newPrintBoard), timeoutTime(newTimeoutTime) +Game::Game(const char * fromFile, const bool enableGraphics, double newStallTime, const bool allowIllegal, FILE * newLog, const Piece::Colour & newReveal, int newMaxTurns, bool newPrintBoard, double newTimeoutTime,const char * newImageOutput) : red(NULL), blue(NULL), turn(Piece::RED), theBoard(10,10), graphicsEnabled(enableGraphics), stallTime(newStallTime), allowIllegalMoves(allowIllegal), log(newLog), reveal(newReveal), turnCount(0), input(NULL), maxTurns(newMaxTurns), printBoard(newPrintBoard), timeoutTime(newTimeoutTime), imageOutput(newImageOutput) { gameCreated = false; if (gameCreated) @@ -479,10 +479,10 @@ MovementResult Game::Play() - logMessage("Messaging red with \"START\"\n"); +// logMessage("Messaging red with \"START\"\n"); red->Message("START"); - + int moveCount = 0; while (!Board::HaltResult(result) && (turnCount < maxTurns || maxTurns < 0)) { @@ -501,7 +501,15 @@ MovementResult Game::Play() #ifdef BUILD_GRAPHICS if (graphicsEnabled) + { theBoard.Draw(toReveal); + if (imageOutput != "") + { + string imageFile = "" + imageOutput + "/"+ itostr(moveCount) + ".bmp"; + Graphics::ScreenShot(imageFile.c_str()); + } + + } #endif //BUILD_GRAPHICS turn = Piece::RED; @@ -541,10 +549,19 @@ MovementResult Game::Play() theBoard.PrintPretty(stdout, toReveal); fprintf(stdout, "\n\n"); } + + ++moveCount; #ifdef BUILD_GRAPHICS if (graphicsEnabled) + { theBoard.Draw(toReveal); + if (imageOutput != "") + { + string imageFile = "" + imageOutput + "/" + itostr(moveCount) + ".bmp"; + Graphics::ScreenShot(imageFile.c_str()); + } + } #endif //BUILD_GRAPHICS @@ -589,7 +606,7 @@ MovementResult Game::Play() else ReadUserCommand(); - + ++moveCount; ++turnCount; } @@ -771,6 +788,9 @@ void Game::MakeControllers(const char * redPath, const char * bluePath) { Network * redNetwork = NULL; Network * blueNetwork = NULL; + //To allow for running two network controllers (I don't know why you would, but beside the point...) use two ports + static const int port1 = 4560; + static const int port2 = 4561; if (redPath[0] == '@') { @@ -789,7 +809,7 @@ void Game::MakeControllers(const char * redPath, const char * bluePath) if (network == NULL) { logMessage("Creating server for red AI... "); - redNetwork = new Server(); + redNetwork = new Server(port1); logMessage("Successful!\n"); } @@ -797,7 +817,7 @@ void Game::MakeControllers(const char * redPath, const char * bluePath) { network = (const char*)(network+1); logMessage("Creating client for red AI... "); - redNetwork = new Client(network); + redNetwork = new Client(network, port2); logMessage("Connected to address %s\n", network); } @@ -825,7 +845,7 @@ void Game::MakeControllers(const char * redPath, const char * bluePath) if (network == NULL) { logMessage("Creating server for blue AI... "); - blueNetwork = new Server(); + blueNetwork = new Server(port2); logMessage("Successful!\n"); } @@ -833,7 +853,7 @@ void Game::MakeControllers(const char * redPath, const char * bluePath) { network = (const char*)(network+1); logMessage("Creating client for blue AI... "); - blueNetwork = new Client(network); + blueNetwork = new Client(network, port1); logMessage("Connected to address %s\n", network); } logMessage(" (Blue's responses will be received over the connection)\n"); @@ -855,6 +875,15 @@ void Game::MakeControllers(const char * redPath, const char * bluePath) red = new NetworkSender(Piece::RED, red, blueNetwork); logMessage(" (Red's responses will be copied over the connection)\n"); } + + red->FixName(); blue->FixName(); } +string itostr(int i) +{ + stringstream s; + s << i; + return s.str(); +} +