示例#1
0
    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)
示例#2
0
	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)