X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=blobdiff_plain;f=qchess%2Fsrc%2Fgraphics.py;h=8d95db8c74223249cb2cafa074378cd5a1ee3534;hp=c068900e64b5d6dbfc517765a7c84f2dd787de64;hb=5287b4f869be70ddae4b59a44c448be33f95ccda;hpb=444244d5c7698bb7861cdb7c0ec6bfb0e8cebfb7 diff --git a/qchess/src/graphics.py b/qchess/src/graphics.py index c068900..8d95db8 100644 --- a/qchess/src/graphics.py +++ b/qchess/src/graphics.py @@ -1,10 +1,9 @@ -import pygame - - - - - - +graphics_enabled = True +try: + import pygame +except: + graphics_enabled = False + @@ -60,7 +59,7 @@ class GraphicsThread(StoppableThread): pygame.display.flip() for event in pygame.event.get(): - if event.type == pygame.QUIT: + if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_q): if isinstance(game, GameThread): with game.lock: game.final_result = "" @@ -367,38 +366,51 @@ class GraphicsThread(StoppableThread): if choice == 0: players.append(HumanPlayer("human", colour)) elif choice == 1: - if True: - import Tkinter - from tkFileDialog import askopenfilename - root = Tkinter.Tk() # Need a root to make Tkinter behave - root.withdraw() # Some sort of magic incantation - path = askopenfilename(parent=root, initialdir="../agents",title= -'Choose an agent.') - if path == "": - return self.SelectPlayers() - players.append(make_player(path, colour)) + import inspect + internal_agents = inspect.getmembers(sys.modules[__name__], inspect.isclass) + internal_agents = [x for x in internal_agents if issubclass(x[1], InternalAgent)] + internal_agents.remove(('InternalAgent', InternalAgent)) + if len(internal_agents) > 0: + choice2 = self.SelectButton(["internal", "external"], prompt="Type of agent") else: - print "Exception was " + str(e.message) - p = None - while p == None: - self.board.display_grid(self.window, self.grid_sz) - pygame.display.flip() - path = self.getstr(prompt = "Enter path:") - if path == None: - return None + choice2 = 1 + if choice2 == 0: + agent = internal_agents[self.SelectButton(map(lambda e : e[0], internal_agents), prompt="Choose internal agent")] + players.append(agent[1](agent[0], colour)) + elif choice2 == 1: + try: + import Tkinter + from tkFileDialog import askopenfilename + root = Tkinter.Tk() # Need a root to make Tkinter behave + root.withdraw() # Some sort of magic incantation + path = askopenfilename(parent=root, initialdir="../agents",title= +'Choose an agent.') if path == "": return self.SelectPlayers() - - try: - p = make_player(path, colour) - except: + players.append(make_player(path, colour)) + except: + + p = None + while p == None: self.board.display_grid(self.window, self.grid_sz) pygame.display.flip() - self.message("Invalid path!") - time.sleep(1) - p = None - players.append(p) + path = self.getstr(prompt = "Enter path:") + if path == None: + return None + + if path == "": + return self.SelectPlayers() + + try: + p = make_player(path, colour) + except: + self.board.display_grid(self.window, self.grid_sz) + pygame.display.flip() + self.message("Invalid path!") + time.sleep(1) + p = None + players.append(p) elif choice == 2: address = "" while address == "":