Esempio n. 1
0
 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))
Esempio n. 2
0
 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