Modified manager program, updated website
[progcomp2012.git] / manager / controller.cpp
index b7ab105..982f0fc 100644 (file)
@@ -80,6 +80,16 @@ MovementResult Controller::MakeMove(string & buffer)
        if (query != MovementResult::OK)
                return query;
 
+       if (buffer == "NO_MOVE")
+       {
+               buffer += " OK";
+               return MovementResult::OK;
+       }
+       if (buffer == "SURRENDER")
+       {
+               buffer += " OK";
+               return MovementResult::SURRENDER;
+       }
        
        int x; int y; string direction="";
        stringstream s(buffer);
@@ -148,9 +158,20 @@ MovementResult Controller::MakeMove(string & buffer)
                
        }
 
-       if (Game::theGame->allowIllegalMoves && !Board::LegalResult(moveResult))
-               return MovementResult::OK; //HACK - Legal results returned!
-       else
-               return moveResult;      
+       if (!Board::LegalResult(moveResult))
+       {
+               if (Game::theGame->allowIllegalMoves)
+                       return MovementResult::OK; //HACK - Illegal results returned as legal! (Move not made)
+               else if (this->HumanController()) //Cut human controllers some slack and let them try again...
+               {
+                       //Yes, checking type of object is "not the C++ way"
+                       //      But sometimes its bloody useful to know!!!
+                       Message("Bad move: \'" + buffer + "\' <- Please try again!");
+                       buffer = "";
+                       return this->MakeMove(buffer);
+               }
+       }
+
+       return moveResult;      
 
 }

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