Fix bug with NetworkReceiver
[progcomp2013.git] / qchess / qchess.py
index 48ada31..e2293ae 100755 (executable)
@@ -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

UCC git Repository :: git.ucc.asn.au