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
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 through a fifo
+class FifoPlayer(Player):
+ def __init__(self, name, colour):
+ Player.__init__(self, name, colour)
+ os.mkfifo(self.name+".in")
+ os.mkfifo(self.name+".out")
+
+
+
+
+
+ def update(self, result):
+ sys.stderr.write("update fifo called\n")
+ self.fifo_out = open(self.name+".out", "w")
+ self.fifo_out.write(result +"\n")
+ self.fifo_out.close()
+ return result
+
+ def select(self):
+ sys.stderr.write("select fifo called\n")
+ self.fifo_out = open(self.name+".out", "w")
+ self.fifo_out.write("SELECT?\n")
+ self.fifo_out.close()
+ self.fifo_in = open(self.name+".in", "r")
+ s = map(int, self.fifo_in.readline().strip(" \r\n").split(" "))
+ self.fifo_in.close()
+ return s
+
+ def get_move(self):
+ sys.stderr.write("get_move fifo called\n")
+ self.fifo_out = open(self.name+".out", "w")
+ self.fifo_out.write("MOVE?\n")
+ self.fifo_out.close()
+ self.fifo_in = open(self.name+".in", "r")
+ s = map(int, self.fifo_in.readline().strip(" \r\n").split(" "))
+ self.fifo_in.close()
+ return s
+
+ def quit(self, result):
+ self.fifo_out = open(self.name+".out", "w")
+ self.fifo_out.write(result + "\n")
+ self.fifo_out.close()
+ os.remove(self.name+".in")
+ os.remove(self.name+".out")
# Player that runs from another process
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:
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
def update(self, result):
#print "Update " + str(result) + " called for AgentPlayer"
self.send_message(result)
-
+ return result
def get_move(self):
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
pass
else:
sys.stdout.write(result + "\n")
+ return result
# Default internal player (makes random moves)
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)