X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=blobdiff_plain;f=qchess%2Fsrc%2Fmain.py;h=cbc07f79db30d13c04de20ac2324e392c100f033;hp=0adecb0e5c1cd362e9315dadcf897ba903cc8899;hb=3decbfd61b59ee2611700e7fa96368e02f643d4d;hpb=877034f05346e24fdf822f6e6149ad50d891f030 diff --git a/qchess/src/main.py b/qchess/src/main.py index 0adecb0..cbc07f7 100644 --- a/qchess/src/main.py +++ b/qchess/src/main.py @@ -64,11 +64,12 @@ def main(argv): global turn_delay global agent_timeout - global log_file + global log_files global src_file global graphics_enabled + global always_reveal_states - + max_moves = None src_file = None style = "quantum" @@ -105,6 +106,8 @@ def main(argv): style = "classical" elif arg[1] == '-' and arg[2:] == "quantum": style = "quantum" + elif arg[1] == '-' and arg[2:] == "reveal": + always_reveal_states = True elif (arg[1] == '-' and arg[2:] == "graphics"): graphics_enabled = not graphics_enabled elif (arg[1] == '-' and arg[2:].split("=")[0] == "file"): @@ -112,13 +115,25 @@ def main(argv): if len(arg[2:].split("=")) == 1: src_file = sys.stdin else: - src_file = open(arg[2:].split("=")[1]) + f = arg[2:].split("=")[1] + if f[0:7] == "http://": + src_file = HttpReplay(f) + else: + src_file = open(f.split(":")[0], "r", 0) + + if len(f.split(":")) == 2: + max_moves = int(f.split(":")[1]) + elif (arg[1] == '-' and arg[2:].split("=")[0] == "log"): # Log file if len(arg[2:].split("=")) == 1: - log_file = sys.stdout + log_files.append(LogFile(sys.stdout)) else: - log_file = open(arg[2:].split("=")[1], "w") + f = arg[2:].split("=")[1] + if f[0] == '@': + log_files.append(ShortLog(f[1:])) + else: + log_files.append(LogFile(open(f, "w", 0))) elif (arg[1] == '-' and arg[2:].split("=")[0] == "delay"): # Delay if len(arg[2:].split("=")) == 1: @@ -144,15 +159,29 @@ def main(argv): # Construct a GameThread! Make it global! Damn the consequences! if src_file != None: - if len(players) == 0: + # Hack to stop ReplayThread from exiting + #if len(players) == 0: + # players = [HumanPlayer("dummy", "white"), HumanPlayer("dummy", "black")] + + # Normally the ReplayThread exits if there are no players + # TODO: Decide which behaviour to use, and fix it + end = (len(players) == 0) + if end: players = [Player("dummy", "white"), Player("dummy", "black")] - game = ReplayThread(players, src_file) + elif len(players) != 2: + sys.stderr.write(sys.argv[0] + " : Usage " + sys.argv[0] + " white black\n") + if graphics_enabled: + sys.stderr.write(sys.argv[0] + " : (You won't get a GUI, because --file was used, and the author is lazy)\n") + return 44 + game = ReplayThread(players, src_file, end=end, max_moves=max_moves) else: board = Board(style) + board.max_moves = max_moves game = GameThread(board, players) + # Initialise GUI if graphics_enabled == True: try: @@ -219,18 +248,24 @@ def main(argv): + log_init(game.board, players) + if graphics != None: game.start() # This runs in a new thread graphics.run() - game.join() + if game.is_alive(): + game.join() + + error = game.error + graphics.error else: game.run() error = game.error + - if log_file != None and log_file != sys.stdout: - log_file.close() + for l in log_files: + l.close() if src_file != None and src_file != sys.stdin: src_file.close() @@ -239,4 +274,18 @@ def main(argv): # This is how python does a main() function... if __name__ == "__main__": - sys.exit(main(sys.argv)) + try: + sys.exit(main(sys.argv)) + except KeyboardInterrupt: + sys.stderr.write(sys.argv[0] + " : Got KeyboardInterrupt. Stopping everything\n") + if isinstance(graphics, StoppableThread): + graphics.stop() + graphics.run() # Will clean up graphics because it is stopped, not run it (a bit dodgy) + + if isinstance(game, StoppableThread): + game.stop() + if game.is_alive(): + game.join() + + sys.exit(102) +