def handle_play(self, args): try: colour_s, vertex_s = args[:2] except ValueError: gtp_engine.report_bad_arguments() colour = gtp_engine.interpret_colour(colour_s) move = gtp_engine.interpret_vertex(vertex_s, self.board_size) if move is None: self.simple_ko_point = None self.move_history.append(History_move(colour, None)) return row, col = move try: self.simple_ko_point = self.board.play(row, col, colour) self.simple_ko_player = opponent_of(colour) except ValueError: raise GtpError("illegal move") self.move_history.append(History_move(colour, move))
def handle_set_free_handicap(self, args): max_points = handicap_layout.max_free_handicap_for_board_size( self.board_size) if not 2 <= len(args) <= max_points: raise GtpError("invalid number of stones") if not self.board.is_empty(): raise GtpError("board not empty") try: for vertex_s in args: move = gtp_engine.interpret_vertex(vertex_s, self.board_size) if move is None: raise GtpError("'pass' not permitted") row, col = move try: self.board.play(row, col, 'b') except ValueError: raise GtpError("engine error: %s is occupied" % vertex_s) except Exception: self.reset() raise self.set_history_base(self.board.copy()) self.handicap = len(args) self.simple_ko_point = None