2
respostas

Melhorar o algoritimo de escolha do trajeto dos fantasmas.

Olá, adorei o curso, e consegui fazer tudo sem problemas, e aprendi muito, porem eu tenho uma questão em relação ao jogo, falando dos fantasmas, teria como melhorar o algoritimo de escolha do caminho deles? certos momentos eles ficam presos no meio do labirinto, pois ficam dando voltas.

2 respostas

Oii Caio, como você está? Espero que esteja bem ^-^

Quanto a trajetória atual dos fantasmas ela é aleatória, por isso ocorre essa inconstância em relação ao trajeto.

É possível melhorar, mas, envolve algoritmos complexos para alcançar esse objetivo, pois envolve calcular a distância entre o fantasma e o pacman em relação a todo labirinto analisando todas as possibilidades para saber qual a menor distância para capturar o pacman. Dessa forma, não utilizaríamos o fantasma em posição aleatória, mas o mesmo teria uma certa "inteligência" para percorrer o trajeto. Neste link é explicado a teoria por trás desses algoritmos.

Abraços e bons estudos!

Olá Caio, tudo bem com você??

Obrigado pelo seu feedback e fico feliz que tenha gostado!

A questão da movimentação mencionada você até consegue mexer em alguns parâmetros, como velocidade de movimento mas os nossos fantasmas estão diretamente ligados ao random.choice que você encontra mais sobre aqui na Documentação Técnica.

Por conta disso ficamos um pouco mais limitados quanto a essa movimentação. Perceba que dentro do random.choice é passado como parâmetro direcoes. Que se trata de uma lista vazia e vai sendo preenchida baseada nas movimentações geradas pela movimentação do PACMAN, preenchendo esse array e gerando um novo valor para direcoes, conforme o bloco de códigos do nosso jogo:

def get_direcoes(self, linha, coluna):
        direcoes = []
        if self.matriz[int(linha - 1)][int(coluna)] != 2:
            direcoes.append(ACIMA)
        if self.matriz[int(linha + 1)][int(coluna)] != 2:
            direcoes.append(ABAIXO)
        if self.matriz[int(linha)][int(coluna - 1)] != 2:
            direcoes.append(ESQUERDA)
        if self.matriz[int(linha)][int(coluna + 1)] != 2:
            direcoes.append(DIREITA)
        return direcoes

"Se uma sequência de pesos for especificada, as seleções serão feitas de acordo com os pesos relativos. " então entendemos que ao observar esse bloco, ele encontra-se equilibrado. O ponto de observação mencionado, gera essa percepção, em virtude dos movimentos iniciais, pois, o pacman precisa se movimentar relativamente para que os fantasmas saiam do covil central e comecem a transitar pela fase.

Sugiro que efetue testes nessas partes descritas e se aprofunde na documentação técnica, para verificar as possibilidades de mudanças com relação a movimentação dos fantasmas.

Espero ter te ajudado e qualquer dúvida é só retornar aqui no fórum.

Bons estudos!