Commit c0c346f9 authored by Sam Moore's avatar Sam Moore

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?
parent 5287b4f8
...@@ -103,6 +103,14 @@ OPTIONS ...@@ -103,6 +103,14 @@ OPTIONS
If no time is given, the timeout is disabled. If no time is given, the timeout is disabled.
By default 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 --classical
If this option is used, the game will treat pieces "classically", ie: as in standard chess. If this option is used, the game will treat pieces "classically", ie: as in standard chess.
......
...@@ -1877,6 +1877,7 @@ try: ...@@ -1877,6 +1877,7 @@ try:
except: except:
graphics_enabled = False graphics_enabled = False
import time
...@@ -1897,12 +1898,14 @@ class GraphicsThread(StoppableThread): ...@@ -1897,12 +1898,14 @@ class GraphicsThread(StoppableThread):
self.error = 0 self.error = 0
self.lock = threading.RLock() self.lock = threading.RLock()
self.cond = threading.Condition() self.cond = threading.Condition()
self.sleep_timeout = None
self.last_event = time.time()
#print "Test font" #print "Test font"
pygame.font.Font(os.path.join(os.path.curdir, "data", "DejaVuSans.ttf"), 32).render("Hello", True,(0,0,0)) pygame.font.Font(os.path.join(os.path.curdir, "data", "DejaVuSans.ttf"), 32).render("Hello", True,(0,0,0))
#load_images() #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): ...@@ -1920,18 +1923,24 @@ class GraphicsThread(StoppableThread):
while not self.stopped(): while not self.stopped():
#print "Display grid" if self.sleep_timeout == None or (time.time() - self.last_event) < self.sleep_timeout:
self.board.display_grid(window = self.window, grid_sz = self.grid_sz) # Draw the board
#print "Display grid"
self.board.display_grid(window = self.window, grid_sz = self.grid_sz) # Draw the board
#print "Display overlay" #print "Display overlay"
self.overlay() self.overlay()
#print "Display pieces" #print "Display pieces"
self.board.display_pieces(window = self.window, grid_sz = self.grid_sz) # Draw the board 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() pygame.display.flip()
for event in pygame.event.get(): 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 event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_q):
if isinstance(game, GameThread): if isinstance(game, GameThread):
with game.lock: with game.lock:
...@@ -1944,8 +1953,11 @@ class GraphicsThread(StoppableThread): ...@@ -1944,8 +1953,11 @@ class GraphicsThread(StoppableThread):
break break
elif event.type == pygame.MOUSEBUTTONDOWN: elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event) 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 ...@@ -2329,6 +2341,7 @@ import os
import time import time
turn_delay = 0.5 turn_delay = 0.5
sleep_timeout = None
[game, graphics] = [None, None] [game, graphics] = [None, None]
def make_player(name, colour): def make_player(name, colour):
...@@ -2381,6 +2394,7 @@ def main(argv): ...@@ -2381,6 +2394,7 @@ def main(argv):
global src_file global src_file
global graphics_enabled global graphics_enabled
global always_reveal_states global always_reveal_states
global sleep_timeout
max_moves = None max_moves = None
src_file = None src_file = None
...@@ -2462,6 +2476,12 @@ def main(argv): ...@@ -2462,6 +2476,12 @@ def main(argv):
agent_timeout = -1 agent_timeout = -1
else: else:
agent_timeout = float(arg[2:].split("=")[1]) 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"): elif (arg[1] == '-' and arg[2:] == "help"):
# Help # Help
...@@ -2501,6 +2521,8 @@ def main(argv): ...@@ -2501,6 +2521,8 @@ def main(argv):
if graphics_enabled == True: if graphics_enabled == True:
try: try:
graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread! graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread!
graphics.sleep_timeout = sleep_timeout
except Exception,e: except Exception,e:
graphics = None graphics = None
...@@ -2607,4 +2629,4 @@ if __name__ == "__main__": ...@@ -2607,4 +2629,4 @@ if __name__ == "__main__":
sys.exit(102) sys.exit(102)
# --- main.py --- # # --- 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
...@@ -4,6 +4,7 @@ try: ...@@ -4,6 +4,7 @@ try:
except: except:
graphics_enabled = False graphics_enabled = False
import time
...@@ -24,6 +25,8 @@ class GraphicsThread(StoppableThread): ...@@ -24,6 +25,8 @@ class GraphicsThread(StoppableThread):
self.error = 0 self.error = 0
self.lock = threading.RLock() self.lock = threading.RLock()
self.cond = threading.Condition() self.cond = threading.Condition()
self.sleep_timeout = None
self.last_event = time.time()
#print "Test font" #print "Test font"
pygame.font.Font(os.path.join(os.path.curdir, "data", "DejaVuSans.ttf"), 32).render("Hello", True,(0,0,0)) 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): ...@@ -47,18 +50,24 @@ class GraphicsThread(StoppableThread):
while not self.stopped(): while not self.stopped():
#print "Display grid" if self.sleep_timeout == None or (time.time() - self.last_event) < self.sleep_timeout:
self.board.display_grid(window = self.window, grid_sz = self.grid_sz) # Draw the board
#print "Display grid"
self.board.display_grid(window = self.window, grid_sz = self.grid_sz) # Draw the board
#print "Display overlay" #print "Display overlay"
self.overlay() self.overlay()
#print "Display pieces" #print "Display pieces"
self.board.display_pieces(window = self.window, grid_sz = self.grid_sz) # Draw the board 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() pygame.display.flip()
for event in pygame.event.get(): 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 event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_q):
if isinstance(game, GameThread): if isinstance(game, GameThread):
with game.lock: with game.lock:
...@@ -71,8 +80,11 @@ class GraphicsThread(StoppableThread): ...@@ -71,8 +80,11 @@ class GraphicsThread(StoppableThread):
break break
elif event.type == pygame.MOUSEBUTTONDOWN: elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event) self.mouse_down(event)
elif event.type == pygame.MOUSEBUTTONUP: elif event.type == pygame.MOUSEBUTTONUP:
self.mouse_up(event) self.mouse_up(event)
......
...@@ -16,6 +16,7 @@ import os ...@@ -16,6 +16,7 @@ import os
import time import time
turn_delay = 0.5 turn_delay = 0.5
sleep_timeout = None
[game, graphics] = [None, None] [game, graphics] = [None, None]
def make_player(name, colour): def make_player(name, colour):
...@@ -68,6 +69,7 @@ def main(argv): ...@@ -68,6 +69,7 @@ def main(argv):
global src_file global src_file
global graphics_enabled global graphics_enabled
global always_reveal_states global always_reveal_states
global sleep_timeout
max_moves = None max_moves = None
src_file = None src_file = None
...@@ -149,6 +151,12 @@ def main(argv): ...@@ -149,6 +151,12 @@ def main(argv):
agent_timeout = -1 agent_timeout = -1
else: else:
agent_timeout = float(arg[2:].split("=")[1]) 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"): elif (arg[1] == '-' and arg[2:] == "help"):
# Help # Help
...@@ -188,6 +196,8 @@ def main(argv): ...@@ -188,6 +196,8 @@ def main(argv):
if graphics_enabled == True: if graphics_enabled == True:
try: try:
graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread! graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread!
graphics.sleep_timeout = sleep_timeout
except Exception,e: except Exception,e:
graphics = None graphics = None
......
#!/bin/bash #!/bin/bash
# Qchess login script # 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 # Only works with GDM
# WARNING: Don't use on systems without GDM, because it will probably break everything # 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 # Add to root's crontab to run every minute
# Check qchess isn't already running # Check qchess isn't already running
...@@ -31,7 +36,10 @@ win="black" ...@@ -31,7 +36,10 @@ win="black"
#espeak "I challenge you to a duel!" #espeak "I challenge you to a duel!"
while [ "$win" == "black" ]; do 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 done
#if [ "$win" == "white" ]; then #if [ "$win" == "white" ]; then
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment