Esempio n. 1
0
class ControloDelib(object):
    def __init__(self, planeador):
        self._planeador = planeador
        self._objectivos = []
        self._modelo_mundo = ModeloMundo()

    def _reconsiderar(self):
        return (not self._objectivos or not self._planeador.plano_pendente()
                or self._modelo_mundo.alterado)

    def _deliberar(self):
        self._objectivos = [
            estado for estado in self._modelo_mundo.estados()
            if self._modelo_mundo.obter_elem(estado) == "alvo"
        ]

    def _planear(self):
        if self._objectivos:
            self._planeador.planear(self._modelo_mundo,
                                    self._modelo_mundo.estado,
                                    self._objectivos)
        else:
            self._planeador.terminar_plano()

    def _executar(self):
        operador = self._planeador.obter_accao(self._modelo_mundo.estado)
        if operador is not None:
            return operador.accao

    def processar(self, percepcao):
        self._assimilar(percepcao)
        if self._reconsiderar():
            self._deliberar()
            self._planear()

        self.mostrar()
        return self._executar()

    def _assimilar(self, per):
        self._modelo_mundo.actualizar(per)

    def mostrar(self):
        vis = psa.vis(1)
        vis.limpar()
        self._modelo_mundo.mostrar(vis)
        self._planeador.mostrar(vis, self._modelo_mundo.estado)