Add screen blackout to qchess
authorSam Moore <matches@ucc.asn.au>
Mon, 18 Mar 2013 23:40:34 +0000 (07:40 +0800)
committerSam Moore <matches@ucc.asn.au>
Mon, 18 Mar 2013 23:40:34 +0000 (07:40 +0800)
Just because it bugged [BOB] that the screen never went to sleep when using qchess_login.sh
Aren't I nice?

qchess/data/help.txt
qchess/qchess.py
qchess/src/graphics.py
qchess/src/main.py
qchess_login.sh

index 4d2e5e5..8911f3b 100644 (file)
@@ -103,6 +103,14 @@ OPTIONS
                If no time is given, the timeout is disabled.
 
                By default the timeout is disabled.
+               
+       --blackout[=time]
+               Setting a blackout time will cause the display to become black if the mouse is not moved and no keys or buttons are pressed.
+               If no time is given, the blackout time is disabled.
+               
+               By default the blackout is disabled.
+               
+               This switch was introduced for entirely obscure purposes.
 
        --classical
                If this option is used, the game will treat pieces "classically", ie: as in standard chess.
index 48ada31..d139462 100755 (executable)
@@ -1877,6 +1877,7 @@ try:
 except:
        graphics_enabled = False
        
+import time
 
 
 
@@ -1897,12 +1898,14 @@ 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))
 
                #load_images()
-               create_images(grid_sz)
+               load_images()
 
                """
                for c in images.keys():
@@ -1920,18 +1923,24 @@ 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():
+                               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:
@@ -1944,8 +1953,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)                    
+                               
+                               
                                        
 
                                
@@ -2329,6 +2341,7 @@ import os
 import time
 
 turn_delay = 0.5
+sleep_timeout = None
 [game, graphics] = [None, None]
 
 def make_player(name, colour):
@@ -2381,6 +2394,7 @@ def main(argv):
        global src_file
        global graphics_enabled
        global always_reveal_states
+       global sleep_timeout
 
        max_moves = None
        src_file = None
@@ -2462,6 +2476,12 @@ def main(argv):
                                agent_timeout = -1
                        else:
                                agent_timeout = float(arg[2:].split("=")[1])
+               elif (arg[1] == '-' and arg[2:].split("=")[0] == "blackout"):
+                       # Screen saver delay
+                       if len(arg[2:].split("=")) == 1:
+                               sleep_timeout = -1
+                       else:
+                               sleep_timeout = float(arg[2:].split("=")[1])
                                
                elif (arg[1] == '-' and arg[2:] == "help"):
                        # Help
@@ -2501,6 +2521,8 @@ def main(argv):
        if graphics_enabled == True:
                try:
                        graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread!
+                       
+                       graphics.sleep_timeout = sleep_timeout
 
                except Exception,e:
                        graphics = None
@@ -2607,4 +2629,4 @@ if __name__ == "__main__":
                sys.exit(102)
 
 # --- main.py --- #
-# EOF - created from make on Thu Mar 14 22:36:37 WST 2013
+# EOF - created from make on Tue Mar 19 07:36:32 WST 2013
index 8d95db8..6fd646d 100644 (file)
@@ -4,6 +4,7 @@ try:
 except:
        graphics_enabled = False
        
+import time
 
 
 
@@ -24,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))
@@ -47,18 +50,24 @@ 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():
+                               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:
@@ -71,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)                    
+                               
+                               
                                        
 
                                
index 748a459..7e862a9 100644 (file)
@@ -16,6 +16,7 @@ import os
 import time
 
 turn_delay = 0.5
+sleep_timeout = None
 [game, graphics] = [None, None]
 
 def make_player(name, colour):
@@ -68,6 +69,7 @@ def main(argv):
        global src_file
        global graphics_enabled
        global always_reveal_states
+       global sleep_timeout
 
        max_moves = None
        src_file = None
@@ -149,6 +151,12 @@ def main(argv):
                                agent_timeout = -1
                        else:
                                agent_timeout = float(arg[2:].split("=")[1])
+               elif (arg[1] == '-' and arg[2:].split("=")[0] == "blackout"):
+                       # Screen saver delay
+                       if len(arg[2:].split("=")) == 1:
+                               sleep_timeout = -1
+                       else:
+                               sleep_timeout = float(arg[2:].split("=")[1])
                                
                elif (arg[1] == '-' and arg[2:] == "help"):
                        # Help
@@ -188,6 +196,8 @@ def main(argv):
        if graphics_enabled == True:
                try:
                        graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread!
+                       
+                       graphics.sleep_timeout = sleep_timeout
 
                except Exception,e:
                        graphics = None
index 5cb8e4f..428dc1d 100755 (executable)
@@ -1,8 +1,13 @@
 #!/bin/bash
 
 # Qchess login script
+# Forces people to play Quantum Chess in order to login to a UCC clubroom machine
+# (unless they work out that they can just press 'Q')
+
 # Only works with GDM
 # WARNING: Don't use on systems without GDM, because it will probably break everything
+# NOTE: If you have users that never log out (ie: lock the screen instead), this won't be very effective
+
 # Add to root's crontab to run every minute
 
 # Check qchess isn't already running
@@ -31,7 +36,10 @@ win="black"
 
 #espeak "I challenge you to a duel!"
 while [ "$win" == "black" ]; do
-       win=$(./qchess.py @human @internal:AgentBishop)
+       # The game prevents the screen from sleeping automatically...
+       # The blackout option makes the game screen go black if no events happen
+       # It works on clownfish (OpenSUSE); the game is fullscreen. But not cabellera (Scientific Linux); the game isn't fullscreen
+       win=$(./qchess.py --blackout=600 @human @internal:AgentBishop)
 done
 
 #if [ "$win" == "white" ]; then

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