X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=blobdiff_plain;f=qchess%2Fsrc%2Fplayer.py;h=53edb44f7758e84e5a6a93e85db3e22f63153dc7;hp=0cc56c2f9d57ea28fdf258f1dc90016c2e128e32;hb=df2c20df9b55fd3ab24c494d745a260662f1da67;hpb=3decbfd61b59ee2611700e7fa96368e02f643d4d diff --git a/qchess/src/player.py b/qchess/src/player.py index 0cc56c2..53edb44 100644 --- a/qchess/src/player.py +++ b/qchess/src/player.py @@ -1,7 +1,7 @@ import subprocess import select import platform - +import re agent_timeout = -1.0 # Timeout in seconds for AI players to make moves # WARNING: Won't work for windows based operating systems @@ -16,10 +16,16 @@ class Player(): self.colour = colour def update(self, result): - pass + return result def reset_board(self, s): pass + + def __str__(self): + return self.name + "<"+str(self.colour)+">" + + def base_player(self): + return self # Player that runs from another process class ExternalAgent(Player): @@ -53,7 +59,7 @@ class ExternalAgent(Player): if self.p.stdout in ready: #sys.stderr.write("Reading from " + str(self.p) + " 's stdout...\n") try: - result = self.p.stdout.readline().strip("\r\n") + result = self.p.stdout.readline().strip(" \t\r\n") #sys.stderr.write("Read \'" + result + "\' from " + str(self.p) + "\n") return result except: # Exception, e: @@ -67,7 +73,8 @@ class ExternalAgent(Player): line = self.get_response() try: - result = map(int, line.split(" ")) + m = re.match("\s*(\d+)\s+(\d+)\s*", line) + result = map(int, [m.group(1), m.group(2)]) except: raise Exception("GIBBERISH \"" + str(line) + "\"") return result @@ -75,7 +82,7 @@ class ExternalAgent(Player): def update(self, result): #print "Update " + str(result) + " called for AgentPlayer" self.send_message(result) - + return result def get_move(self): @@ -83,7 +90,9 @@ class ExternalAgent(Player): line = self.get_response() try: - result = map(int, line.split(" ")) + m = re.match("\s*(\d+)\s+(\d+)\s*", line) + result = map(int, [m.group(1), m.group(2)]) + except: raise Exception("GIBBERISH \"" + str(line) + "\"") return result @@ -159,6 +168,7 @@ class HumanPlayer(Player): pass else: sys.stdout.write(result + "\n") + return result # Default internal player (makes random moves) @@ -174,7 +184,8 @@ class InternalAgent(Player): def update(self, result): self.board.update(result) - self.board.verify() + #self.board.verify() + return result def reset_board(self, s): self.board.reset_board(s)