-import pygame
-
-
-
-
-
+graphics_enabled = True
+try:
+ import pygame
+ os.environ["SDL_VIDEO_ALLOW_SCREENSAVER"] = "1"
+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()
+ self.blackout = False
#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
+ self.blackout = False
+
+ elif pygame.mouse.get_focused() and not self.blackout:
+ os.system("xset dpms force off")
+ self.blackout = True
+ self.window.fill((0,0,0))
pygame.display.flip()
for event in pygame.event.get():
- if event.type == pygame.QUIT:
+ 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:
game.final_result = ""
break
elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event)
+
elif event.type == pygame.MOUSEBUTTONUP:
- self.mouse_up(event)
+ self.mouse_up(event)
+
+
-
+
#print "Reject " + str(i) + str(event.pos) + " vs " + str(t)
+ # Function to choose between dedicated server or normal play
+ def SelectServer(self):
+
+ choice = self.SelectButton(["Normal", "Join Eigenserver"],prompt="Game type?")
+ if choice == 0:
+ return None
+ choice = self.SelectButton(["progcomp.ucc", "other"], prompt="Address?")
+ if choice == 0:
+ return "progcomp.ucc.asn.au"
+ else:
+ return self.getstr(prompt = "Enter address:")
+
# Function to pick players in a nice GUI way
def SelectPlayers(self, players = []):
if choice == 0:
players.append(HumanPlayer("human", colour))
elif choice == 1:
- if True:
- import Tkinter
- from tkFileDialog import askopenfilename
- root = Tkinter.Tk() # Need a root to make Tkinter behave
- root.withdraw() # Some sort of magic incantation
- path = askopenfilename(parent=root, initialdir="../agents",title=
-'Choose an agent.')
- if path == "":
- return self.SelectPlayers()
- players.append(make_player(path, colour))
+ import inspect
+ internal_agents = inspect.getmembers(sys.modules[__name__], inspect.isclass)
+ internal_agents = [x for x in internal_agents if issubclass(x[1], InternalAgent)]
+ internal_agents.remove(('InternalAgent', InternalAgent))
+ if len(internal_agents) > 0:
+ choice2 = self.SelectButton(["internal", "external"], prompt="Type of agent")
else:
- print "Exception was " + str(e.message)
- p = None
- while p == None:
- self.board.display_grid(self.window, self.grid_sz)
- pygame.display.flip()
- path = self.getstr(prompt = "Enter path:")
- if path == None:
- return None
+ choice2 = 1
+ if choice2 == 0:
+ agent = internal_agents[self.SelectButton(map(lambda e : e[0], internal_agents), prompt="Choose internal agent")]
+ players.append(agent[1](agent[0], colour))
+ elif choice2 == 1:
+ try:
+ import Tkinter
+ from tkFileDialog import askopenfilename
+ root = Tkinter.Tk() # Need a root to make Tkinter behave
+ root.withdraw() # Some sort of magic incantation
+ path = askopenfilename(parent=root, initialdir="../agents",title=
+'Choose an agent.')
if path == "":
return self.SelectPlayers()
-
- try:
- p = make_player(path, colour)
- except:
+ players.append(make_player(path, colour))
+ except:
+
+ p = None
+ while p == None:
self.board.display_grid(self.window, self.grid_sz)
pygame.display.flip()
- self.message("Invalid path!")
- time.sleep(1)
- p = None
- players.append(p)
- elif choice == 2:
+ path = self.getstr(prompt = "Enter path:")
+ if path == None:
+ return None
+
+ if path == "":
+ return self.SelectPlayers()
+
+ try:
+ p = make_player(path, colour)
+ except:
+ self.board.display_grid(self.window, self.grid_sz)
+ pygame.display.flip()
+ self.message("Invalid path!")
+ time.sleep(1)
+ p = None
+ players.append(p)
+ elif choice == 1:
address = ""
while address == "":
self.board.display_grid(self.window, self.grid_sz)