Trying to fix bug with fifo and network players
[progcomp2013.git] / qchess / src / main.py
index ea50a1f..44aa360 100644 (file)
@@ -60,7 +60,11 @@ def make_player(name, colour):
                        sys.stderr.write(sys.argv[0] + " : Can't find an internal agent matching \"" + s[1] + "\"\n")
                        sys.stderr.write(sys.argv[0] + " : Choices are: " + str(map(lambda e : e[0], internal_agents)) + "\n")
                        return None
-                       
+               if s[0] == "fifo":
+                       if len(s) > 1:
+                               return FifoPlayer(s[1], colour)
+                       else:
+                               return FifoPlayer(str(os.getpid())+"."+colour, colour)
 
        else:
                return ExternalAgent(name, colour)
@@ -84,6 +88,7 @@ def main(argv):
        global sleep_timeout
 
 
+       retry_illegal = False
        server_addr = None
 
        max_moves = None
@@ -181,7 +186,8 @@ def main(argv):
                                sleep_timeout = -1
                        else:
                                sleep_timeout = float(arg[2:].split("=")[1])
-                               
+               elif (arg[1] == '-' and arg[2:] == "retry-illegal"):
+                       retry_illegal = not retry_illegal
                elif (arg[1] == '-' and arg[2:] == "help"):
                        # Help
                        os.system("less data/help.txt") # The best help function
@@ -195,7 +201,13 @@ def main(argv):
                if server_addr == True:
                        return dedicated_server()
                else:
-                       return client(server_addr)
+                       if len(players) > 1:
+                               sys.stderr.write("Only a single player may be provided when --server is used\n")
+                               return 1
+                       if len(players) == 1:
+                               return client(server_addr, players[0].name)
+                       else:
+                               return client(server_addr)
                
 
        # Create the board
@@ -222,6 +234,7 @@ def main(argv):
                board = Board(style)
                board.max_moves = max_moves
                game = GameThread(board, players) 
+               game.retry_illegal = retry_illegal
 
 
 
@@ -244,6 +257,7 @@ def main(argv):
                        
                        server_addr = graphics.SelectServer()
                        if server_addr != None:
+                               pygame.quit() # Time to say goodbye
                                if server_addr == True:
                                        return dedicated_server()
                                else:

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