Add screen blackout to qchess
authorSam Moore <[email protected]>
Mon, 18 Mar 2013 23:40:34 +0000 (07:40 +0800)
committerSam Moore <[email protected]>
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.
                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.
 
        --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
        
 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.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()
 
                #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():
 
                """
                for c in images.keys():
@@ -1920,18 +1923,24 @@ class GraphicsThread(StoppableThread):
                
                while not self.stopped():
                        
                
                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():
 
                        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:
                                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)
                                        break
                                elif event.type == pygame.MOUSEBUTTONDOWN:
                                        self.mouse_down(event)
+                                       
                                elif event.type == pygame.MOUSEBUTTONUP:
                                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
 import time
 
 turn_delay = 0.5
+sleep_timeout = None
 [game, graphics] = [None, None]
 
 def make_player(name, colour):
 [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 src_file
        global graphics_enabled
        global always_reveal_states
+       global sleep_timeout
 
        max_moves = None
        src_file = None
 
        max_moves = None
        src_file = None
@@ -2462,6 +2476,12 @@ def main(argv):
                                agent_timeout = -1
                        else:
                                agent_timeout = float(arg[2:].split("=")[1])
                                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
                                
                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!
        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
 
                except Exception,e:
                        graphics = None
@@ -2607,4 +2629,4 @@ if __name__ == "__main__":
                sys.exit(102)
 
 # --- main.py --- #
                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
        
 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.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))
 
                #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():
                        
                
                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():
 
                        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:
                                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)
                                        break
                                elif event.type == pygame.MOUSEBUTTONDOWN:
                                        self.mouse_down(event)
+                                       
                                elif event.type == pygame.MOUSEBUTTONUP:
                                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
 import time
 
 turn_delay = 0.5
+sleep_timeout = None
 [game, graphics] = [None, None]
 
 def make_player(name, colour):
 [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 src_file
        global graphics_enabled
        global always_reveal_states
+       global sleep_timeout
 
        max_moves = None
        src_file = None
 
        max_moves = None
        src_file = None
@@ -149,6 +151,12 @@ def main(argv):
                                agent_timeout = -1
                        else:
                                agent_timeout = float(arg[2:].split("=")[1])
                                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
                                
                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!
        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
 
                except Exception,e:
                        graphics = None
index 5cb8e4f..428dc1d 100755 (executable)
@@ -1,8 +1,13 @@
 #!/bin/bash
 
 # Qchess login script
 #!/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
 # 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
 # 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
 
 #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
 done
 
 #if [ "$win" == "white" ]; then

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