Getting ready to run rounds
[progcomp2013.git] / qchess / src / player.py
index b3f0eb7..0cc56c2 100644 (file)
@@ -18,6 +18,9 @@ class Player():
        def update(self, result):
                pass
 
+       def reset_board(self, s):
+               pass
+
 # Player that runs from another process
 class ExternalAgent(Player):
 
@@ -85,6 +88,12 @@ class ExternalAgent(Player):
                        raise Exception("GIBBERISH \"" + str(line) + "\"")
                return result
 
+       def reset_board(self, s):
+               self.send_message("BOARD")
+               for line in s.split("\n"):
+                       self.send_message(line.strip(" \r\n"))
+               self.send_message("END BOARD")
+
        def quit(self, final_result):
                try:
                        self.send_message("QUIT " + final_result)
@@ -167,6 +176,9 @@ class InternalAgent(Player):
                self.board.update(result)
                self.board.verify()
 
+       def reset_board(self, s):
+               self.board.reset_board(s)
+
        def quit(self, final_result):
                pass
 
@@ -203,8 +215,6 @@ class AgentRandom(InternalAgent):
 
 def run_agent(agent):
        #sys.stderr.write(sys.argv[0] + " : Running agent " + str(agent) + "\n")
-       colour = sys.stdin.readline().strip(" \r\n")
-       agent.colour = colour
        while True:
                line = sys.stdin.readline().strip(" \r\n")
                if line == "SELECTION?":
@@ -220,6 +230,14 @@ def run_agent(agent):
                        #sys.stderr.write(sys.argv[0] + " : Quitting\n")
                        agent.quit(" ".join(line.split(" ")[1:])) # Quits the game
                        break
+               elif line.split(" ")[0] == "BOARD":
+                       s = ""
+                       line = sys.stdin.readline().strip(" \r\n")
+                       while line != "END BOARD":
+                               s += line + "\n"
+                               line = sys.stdin.readline().strip(" \r\n")
+                       agent.board.reset_board(s)
+                       
                else:
                        agent.update(line) # Updates agent.board
        return 0
@@ -229,7 +247,7 @@ def run_agent(agent):
 
 class ExternalWrapper(ExternalAgent):
        def __init__(self, agent):
-               run = "python -u -c \"import sys;import os;from qchess import *;agent = " + agent.__class__.__name__ + "('" + agent.name + "','"+agent.colour+"');sys.exit(run_agent(agent))\""
+               run = "python -u -c \"import sys;import os;from qchess import *;agent = " + agent.__class__.__name__ + "('" + agent.name + "','"+agent.colour+"');sys.stdin.readline();sys.exit(run_agent(agent))\""
                # str(run)
                ExternalAgent.__init__(self, run, agent.colour)
 

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