From: Sam Moore Date: Mon, 18 Mar 2013 23:40:34 +0000 (+0800) Subject: Add screen blackout to qchess X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=commitdiff_plain;h=c0c346f95a6d19d8967928aeeeb4937e1a99f2f4;hp=5287b4f869be70ddae4b59a44c448be33f95ccda Add screen blackout to qchess Just because it bugged [BOB] that the screen never went to sleep when using qchess_login.sh Aren't I nice? --- diff --git a/qchess/data/help.txt b/qchess/data/help.txt index 4d2e5e5..8911f3b 100644 --- a/qchess/data/help.txt +++ b/qchess/data/help.txt @@ -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. diff --git a/qchess/qchess.py b/qchess/qchess.py index 48ada31..d139462 100755 --- a/qchess/qchess.py +++ b/qchess/qchess.py @@ -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 diff --git a/qchess/src/graphics.py b/qchess/src/graphics.py index 8d95db8..6fd646d 100644 --- a/qchess/src/graphics.py +++ b/qchess/src/graphics.py @@ -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) + + diff --git a/qchess/src/main.py b/qchess/src/main.py index 748a459..7e862a9 100644 --- a/qchess/src/main.py +++ b/qchess/src/main.py @@ -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 diff --git a/qchess_login.sh b/qchess_login.sh index 5cb8e4f..428dc1d 100755 --- a/qchess_login.sh +++ b/qchess_login.sh @@ -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