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
......@@ -104,6 +104,14 @@ OPTIONS
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.
Note that the game does not enforce rules related to check and checkmate.
......
......@@ -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,6 +1923,8 @@ class GraphicsThread(StoppableThread):
while not self.stopped():
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
......@@ -1929,9 +1934,13 @@ class GraphicsThread(StoppableThread):
#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,6 +1953,7 @@ class GraphicsThread(StoppableThread):
break
elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event)
elif event.type == pygame.MOUSEBUTTONUP:
self.mouse_up(event)
......@@ -1952,6 +1962,8 @@ class GraphicsThread(StoppableThread):
self.message("Game ends, result \""+str(game.final_result) + "\"")
time.sleep(1)
......@@ -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
......@@ -2502,6 +2522,8 @@ def main(argv):
try:
graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread!
graphics.sleep_timeout = sleep_timeout
except Exception,e:
graphics = None
sys.stderr.write(sys.argv[0] + " : Got exception trying to initialise graphics\n"+str(e.message)+"\nDisabled graphics\n")
......@@ -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
......@@ -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,6 +50,8 @@ class GraphicsThread(StoppableThread):
while not self.stopped():
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
......@@ -56,9 +61,13 @@ class GraphicsThread(StoppableThread):
#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,6 +80,7 @@ class GraphicsThread(StoppableThread):
break
elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event)
elif event.type == pygame.MOUSEBUTTONUP:
self.mouse_up(event)
......@@ -79,6 +89,8 @@ class GraphicsThread(StoppableThread):
self.message("Game ends, result \""+str(game.final_result) + "\"")
time.sleep(1)
......
......@@ -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
......@@ -189,6 +197,8 @@ def main(argv):
try:
graphics = GraphicsThread(game.board, grid_sz = [64,64]) # Construct a GraphicsThread!
graphics.sleep_timeout = sleep_timeout
except Exception,e:
graphics = None
sys.stderr.write(sys.argv[0] + " : Got exception trying to initialise graphics\n"+str(e.message)+"\nDisabled graphics\n")
......
#!/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
......
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