def handle_time_settings(self, args): try: main_time = gtp_engine.interpret_int(args[0]) canadian_time = gtp_engine.interpret_int(args[1]) canadian_stones = gtp_engine.interpret_int(args[2]) except IndexError: gtp_engine.report_bad_arguments() self.time_settings = (main_time, canadian_time, canadian_stones)
def handle_time_left(self, args): # colour time stones try: colour = gtp_engine.interpret_colour(args[0]) time_remaining = gtp_engine.interpret_int(args[1]) stones_remaining = gtp_engine.interpret_int(args[2]) except IndexError: gtp_engine.report_bad_arguments() if stones_remaining == 0: stones_remaining = None self.time_status[colour] = (time_remaining, stones_remaining)
def handle_place_free_handicap(self, args): try: number_of_stones = gtp_engine.interpret_int(args[0]) except IndexError: gtp_engine.report_bad_arguments() max_points = handicap_layout.max_free_handicap_for_board_size( self.board_size) if not 2 <= number_of_stones <= max_points: raise GtpError("invalid number of stones") if not self.board.is_empty(): raise GtpError("board not empty") if number_of_stones == max_points: number_of_stones = max_points - 1 moves = self._choose_free_handicap_moves(number_of_stones) try: try: if len(moves) > number_of_stones: raise ValueError for row, col in moves: self.board.play(row, col, 'b') except (ValueError, TypeError): raise GtpError("invalid result from move generator: %s" % format_vertex_list(moves)) except Exception: self.reset() raise self.simple_ko_point = None self.handicap = number_of_stones self.set_history_base(self.board.copy()) return " ".join(format_vertex((row, col)) for (row, col) in moves)
def handle_boardsize(self, args): try: size = gtp_engine.interpret_int(args[0]) except IndexError: gtp_engine.report_bad_arguments() if size not in self.acceptable_sizes: raise GtpError("unacceptable size") self.board_size = size self.reset()
def handle_fixed_handicap(self, args): try: number_of_stones = gtp_engine.interpret_int(args[0]) except IndexError: gtp_engine.report_bad_arguments() if not self.board.is_empty(): raise GtpError("board not empty") try: points = handicap_layout.handicap_points(number_of_stones, self.board_size) except ValueError: raise GtpError("invalid number of stones") for row, col in points: self.board.play(row, col, 'b') self.simple_ko_point = None self.handicap = number_of_stones self.set_history_base(self.board.copy()) return " ".join(format_vertex((row, col)) for (row, col) in points)
def handle_fixed_handicap(self, args): try: number_of_stones = gtp_engine.interpret_int(args[0]) except IndexError: gtp_engine.report_bad_arguments() if not self.board.is_empty(): raise GtpError("board not empty") try: points = handicap_layout.handicap_points( number_of_stones, self.board_size) except ValueError: raise GtpError("invalid number of stones") for row, col in points: self.board.play(row, col, 'b') self.simple_ko_point = None self.handicap = number_of_stones self.set_history_base(self.board.copy()) return " ".join(format_vertex((row, col)) for (row, col) in points)
def handle_loadsgf(self, args): try: pathname = args[0] except IndexError: gtp_engine.report_bad_arguments() if len(args) > 1: move_number = gtp_engine.interpret_int(args[1]) else: move_number = None # The GTP spec mandates the "cannot load file" error message, so we # can't be more helpful. try: s = self._load_file(pathname) except EnvironmentError: raise GtpError("cannot load file") try: sgf_game = sgf.Sgf_game.from_string(s) except ValueError: raise GtpError("cannot load file") new_size = sgf_game.get_size() if new_size not in self.acceptable_sizes: raise GtpError("unacceptable size") self.board_size = new_size try: komi = sgf_game.get_komi() except ValueError: raise GtpError("bad komi") try: handicap = sgf_game.get_handicap() except ValueError: # Handicap isn't important, so soldier on handicap = None try: sgf_board, plays = sgf_moves.get_setup_and_moves(sgf_game) except ValueError, e: raise GtpError(str(e))
def handle_boardsize(self, args): self.boardsize = gtp_engine.interpret_int(args[0])