Add screen blackout to qchess
[progcomp2013.git] / qchess / src / graphics.py
index c068900..6fd646d 100644 (file)
@@ -1,10 +1,10 @@
-import pygame
-
-
-
-
-
-
+graphics_enabled = True
+try:
+       import pygame
+except:
+       graphics_enabled = False
+       
+import time
 
 
 
@@ -25,6 +25,8 @@ class GraphicsThread(StoppableThread):
                self.error = 0
                self.lock = threading.RLock()
                self.cond = threading.Condition()
+               self.sleep_timeout = None
+               self.last_event = time.time()
 
                #print "Test font"
                pygame.font.Font(os.path.join(os.path.curdir, "data", "DejaVuSans.ttf"), 32).render("Hello", True,(0,0,0))
@@ -48,19 +50,25 @@ 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                
+                               
+                       else:
+                               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,8 +80,11 @@ 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)                    
+                               
+                               
                                        
 
                                
@@ -367,38 +378,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 == "":

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