def make_children(self, children, piece, held, next_can_hold, put_hold): maximum = float('-inf') ind = -1 for i in range(len(children)): # unpack that child x, y, rot, moveset = children[i] # create new board and execute moves new_board = self.board.get_copy() new_piece = Block(piece) new_piece.execute_moves(moveset, self.board) new_piece.set(new_board) # calculate points new_lines = self.lines_sent combo_id = -1 new_combos_so_far = self.combos_so_far + 1 lines_cleared = new_board.clear_lines() if lines_cleared == 0: new_combos_so_far = 0 else: is_tspin = tspin_detect(moveset) is_perf_clear = perf_clear_detect(new_board) combo_id = 1 if is_tspin else 0 if is_perf_clear else -1 if is_tspin and is_perf_clear: combo_id = 2 new_lines += next_points( self.combos_so_far - 1, lines_cleared if lines_cleared != 4 else 0, lines_cleared == 4, is_tspin, is_perf_clear, combo_id == self.last_combo_id) # create the new node new_node = Tree_node(new_board, held, new_lines, new_combos_so_far, combo_id, next_can_hold) self.add_child( ([encode_move('hold')] if put_hold else []) + moveset, new_node) ranking = new_node.get_rank() if ranking > maximum: maximum = ranking ind = i return (maximum, ind)
def make_nodes(self, children, piece_type, held_piece, q, is_held): for child in children: x, y, rot, moveset = child new_board = self.board.get_copy() new_piece = Block(piece_type) new_piece.execute_moves(moveset, self.board) new_piece.set(new_board) new_lines = self.lines_sent combo_id = -1 new_combos_so_far = self.combos_so_far + 1 lines_cleared = new_board.clear_lines() if lines_cleared == 0: new_combos_so_far = 0 else: is_tspin = tspin_detect(moveset) is_perf_clear = perf_clear_detect(new_board) combo_id = 1 if is_tspin else 0 if is_perf_clear else -1 if is_tspin and is_perf_clear: combo_id = 2 new_lines += next_points(self.combos_so_far - 1, lines_cleared if lines_cleared != 4 else 0, lines_cleared == 4, is_tspin, is_perf_clear, combo_id == self.last_combo_id) nq = [] if len(q) < 2 else deepcopy(q[1:]) new_node = Tree_node(new_board, -1 if len(q) == 0 else q[0], held_piece, nq, new_lines, new_combos_so_far, combo_id, self.ranker, is_held) self.add_child(([encode_move('hold')] if is_held else []) + moveset, new_node)