Just because it bugged [BOB] that the screen never went to sleep when using qchess_login.sh
Aren't I nice?
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.
except:
graphics_enabled = False
+import time
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():
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:
break
elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event)
+
elif event.type == pygame.MOUSEBUTTONUP:
- self.mouse_up(event)
+ self.mouse_up(event)
+
+
import time
turn_delay = 0.5
+sleep_timeout = None
[game, graphics] = [None, None]
def make_player(name, colour):
global src_file
global graphics_enabled
global always_reveal_states
+ global sleep_timeout
max_moves = None
src_file = None
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
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
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
except:
graphics_enabled = False
+import time
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))
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:
break
elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event)
+
elif event.type == pygame.MOUSEBUTTONUP:
- self.mouse_up(event)
+ self.mouse_up(event)
+
+
import time
turn_delay = 0.5
+sleep_timeout = None
[game, graphics] = [None, None]
def make_player(name, colour):
global src_file
global graphics_enabled
global always_reveal_states
+ global sleep_timeout
max_moves = None
src_file = None
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
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
#!/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
#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