Tidy website a bit
[progcomp2013.git] / qchess / src / main.py
index ea50a1f..3bb80f2 100644 (file)
@@ -20,6 +20,7 @@ sleep_timeout = None
 [game, graphics] = [None, None]
 
 def make_player(name, colour):
+       debug(name)
        if name[0] == '@':
                if name[1:] == "human":
                        return HumanPlayer(name, colour)
@@ -60,7 +61,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 +89,7 @@ def main(argv):
        global sleep_timeout
 
 
+       retry_illegal = False
        server_addr = None
 
        max_moves = None
@@ -105,17 +111,7 @@ def main(argv):
                i += 1
                arg = argv[i]
                if arg[0] != '-':
-                       p = make_player(arg, colour)
-                       if not isinstance(p, Player):
-                               sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
-                               return 100
-                       players.append(p)
-                       if colour == "white":
-                               colour = "black"
-                       elif colour == "black":
-                               pass
-                       else:
-                               sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+                       players.append(arg)
                        continue
 
                # Option parsing goes here
@@ -181,7 +177,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,9 +192,27 @@ 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])
+                       else:
+                               return client(server_addr)
+               
+       for i in xrange(len(players)):
+               p = make_player(players[i], colour)
+               if not isinstance(p, Player):
+                       sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
+                       return 100
+               players[i] = p
+               if colour == "white":
+                       colour = "black"
+               elif colour == "black":
+                       pass
+               else:
+                       sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
                
-
        # Create the board
        
        # Construct a GameThread! Make it global! Damn the consequences!
@@ -222,6 +237,7 @@ def main(argv):
                board = Board(style)
                board.max_moves = max_moves
                game = GameThread(board, players) 
+               game.retry_illegal = retry_illegal
 
 
 
@@ -244,6 +260,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