X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=blobdiff_plain;f=qchess%2Fqchess.py;h=e2293ae7e8789ada51d4f2d53351aafcbbb2949f;hp=48ada318b773f629baffe39f6ea8692abba1e823;hb=8a1471b7bee654a02fc205dd4de7bebd12084435;hpb=5287b4f869be70ddae4b59a44c448be33f95ccda diff --git a/qchess/qchess.py b/qchess/qchess.py index 48ada31..e2293ae 100755 --- a/qchess/qchess.py +++ b/qchess/qchess.py @@ -20,7 +20,7 @@ class Piece(): self.move_pattern = None self.coverage = None - self.possible_moves = None + self.possible_moves = {} def init_from_copy(self, c): @@ -59,7 +59,10 @@ class Piece(): # Draw the two possible types underneath the current_type image for i in range(len(self.types)): if always_reveal_states == True or self.types[i][0] != '?': - img = small_images[self.colour][self.types[i]] + if self.types[i][0] == '?': + img = small_images[self.colour][self.types[i][1:]] + else: + img = small_images[self.colour][self.types[i]] else: img = small_images[self.colour]["unknown"] # If the type hasn't been revealed, show a placeholder @@ -405,7 +408,7 @@ class Board(): for i in range(len(p.types)): t = p.types[i] - prob = 0.5 + prob = 1.0 / float(len(p.types)) if t == "unknown" or p.types[i][0] == '?': total_types = 0 for t2 in self.unrevealed_types[p.colour].keys(): @@ -413,17 +416,17 @@ class Board(): for t2 in self.unrevealed_types[p.colour].keys(): prob2 = float(self.unrevealed_types[p.colour][t2]) / float(total_types) - p.current_type = t2 - for point in self.possible_moves(p, reject_allied): + #p.current_type = t2 + for point in self.possible_moves(p, reject_allied, state=t2): result[point[0]][point[1]] += prob2 * prob else: - p.current_type = t - for point in self.possible_moves(p, reject_allied): - result[point[0]][point[1]] += prob + #p.current_type = t + for point in self.possible_moves(p, reject_allied, state=t): + result[point[0]][point[1]] += prob #self.verify() - p.current_type = "unknown" + #p.current_type = "unknown" return result def prob_is_type(self, p, state): @@ -461,8 +464,7 @@ class Board(): p.current_type = old_type return result - if p.possible_moves != None: - return p.possible_moves + result = [] @@ -1254,7 +1256,7 @@ class NetworkSender(Player,Network): class NetworkReceiver(Player,Network): def __init__(self, colour, address=None): - Player.__init__(self, address, colour) + Player.__init__(self, "NetworkReceiver", colour) self.address = address @@ -1347,7 +1349,7 @@ class LogFile(): def setup(self, board, players): for p in players: - self.log.write("# " + p.colour + " : " + p.name + "\n") + self.log.write("# " + str(p.colour) + " : " + str(p.name) + "\n") self.log.write("# Initial board\n") for x in range(0, w): @@ -1872,11 +1874,14 @@ def load_images(image_dir=os.path.join(os.path.curdir, "data", "images")): small_images[c].update({p : pygame.image.load(os.path.join(image_dir, c + "_" + p + "_small.png"))}) # --- images.py --- # graphics_enabled = True + try: import pygame + os.environ["SDL_VIDEO_ALLOW_SCREENSAVER"] = "1" except: graphics_enabled = False +import time @@ -1897,6 +1902,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)) @@ -1920,18 +1927,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 +1957,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 +2345,7 @@ import os import time turn_delay = 0.5 +sleep_timeout = None [game, graphics] = [None, None] def make_player(name, colour): @@ -2381,6 +2398,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 +2480,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 +2525,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 +2633,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 Wed Mar 27 12:42:42 WST 2013