X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=qchess%2Fsrc%2Fgraphics.py;h=72b907f36d9f9ee528daafc40619f201cf0c5c4d;hb=52068b63d49f02f4455a4415356ecfe38db72f59;hp=c068900e64b5d6dbfc517765a7c84f2dd787de64;hpb=444244d5c7698bb7861cdb7c0ec6bfb0e8cebfb7;p=progcomp2013.git diff --git a/qchess/src/graphics.py b/qchess/src/graphics.py index c068900..72b907f 100644 --- a/qchess/src/graphics.py +++ b/qchess/src/graphics.py @@ -1,10 +1,12 @@ -import pygame - - - - - +graphics_enabled = True +try: + import pygame + os.environ["SDL_VIDEO_ALLOW_SCREENSAVER"] = "1" +except: + graphics_enabled = False + +import time @@ -25,6 +27,9 @@ class GraphicsThread(StoppableThread): self.error = 0 self.lock = threading.RLock() self.cond = threading.Condition() + self.sleep_timeout = None + self.last_event = time.time() + self.blackout = False #print "Test font" pygame.font.Font(os.path.join(os.path.curdir, "data", "DejaVuSans.ttf"), 32).render("Hello", True,(0,0,0)) @@ -48,19 +53,28 @@ class GraphicsThread(StoppableThread): while not self.stopped(): - #print "Display grid" - self.board.display_grid(window = self.window, grid_sz = self.grid_sz) # Draw the board + if self.sleep_timeout == None or (time.time() - self.last_event) < self.sleep_timeout: + + #print "Display grid" + self.board.display_grid(window = self.window, grid_sz = self.grid_sz) # Draw the board - #print "Display overlay" - self.overlay() + #print "Display overlay" + self.overlay() - #print "Display pieces" - self.board.display_pieces(window = self.window, grid_sz = self.grid_sz) # Draw the board + #print "Display pieces" + self.board.display_pieces(window = self.window, grid_sz = self.grid_sz) # Draw the board + self.blackout = False + + elif pygame.mouse.get_focused() and not self.blackout: + os.system("xset dpms force off") + self.blackout = True + self.window.fill((0,0,0)) pygame.display.flip() for event in pygame.event.get(): - if event.type == pygame.QUIT: + self.last_event = time.time() + 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 = "" @@ -72,10 +86,13 @@ class GraphicsThread(StoppableThread): break elif event.type == pygame.MOUSEBUTTONDOWN: self.mouse_down(event) + elif event.type == pygame.MOUSEBUTTONUP: - self.mouse_up(event) + self.mouse_up(event) + + - + @@ -350,6 +367,18 @@ class GraphicsThread(StoppableThread): #print "Reject " + str(i) + str(event.pos) + " vs " + str(t) + # Function to choose between dedicated server or normal play + def SelectServer(self): + + choice = self.SelectButton(["Normal", "Join Eigenserver"],prompt="Game type?") + if choice == 0: + return None + choice = self.SelectButton(["progcomp.ucc", "other"], prompt="Address?") + if choice == 0: + return "progcomp.ucc.asn.au" + else: + return self.getstr(prompt = "Enter address:") + # Function to pick players in a nice GUI way def SelectPlayers(self, players = []): @@ -367,39 +396,52 @@ 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) - elif choice == 2: + 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 == 1: address = "" while address == "": self.board.display_grid(self.window, self.grid_sz)