Bom dia a todos! Segue mais uma série de respostas:
Antônio Carlos: No enunciado do EP3a, está escrito: "se não sinto nem fedor (“F”) nem brisa (“B”), posso concluir que as salas vizinhas estão livres (“L”)". E se, em alguma casa vizinha, houver um muro ainda não detectado, já que um muro é detectado apenas quando um personagem TENTA acessar uma sala murada?
Salas livres significam que estão "livres de perigos", e isso inclui as salas cujas entradas estão lacradas com muros. Tentar entrar em uma sala lacrada e sentir um impacto não põe a vida da personagem em risco. Você deve marcar as salas que você sabe que não possuem perigo e que você não visitou com "L" para ser capaz de voltar para ela e explorá-la alguma hora, mesmo que seja para descobrir que tem um muro. Quando você tentar entrar e sentir o impacto, pode atualizar a informação que possui dele, acrescentando um "M" e um "V" à lista de anotações. Você pode tirar o "L" também, mas isso não é obrigatório (não está especificado).
João Gabriel: Professor, na sua resposta você disse que uma das posições deveria ser atualizada para ["V", "W?"]. No entanto, eu não poderia deixar apenas como
["V"], já que o personagem já visitou aquela sala, e portanto saberia que não existe a possibilidade de haver um Wumpus?
Sim, você poderia deixar só o "V". Talvez minha resposta tenha ficado confusa pois eu estava ilustrando um único raciocínio: (*) se sinto "F" posso concluir "W?" nas salas vizinhas. O raciocínio que você ilustra é outro: (**) se visitei uma sala, sei que ela não possui perigos (e posso apagar "P?" e "W?" se estiverem lá). Os raciocínios podem ser encadeados de várias maneiras diferentes, e possivelmente com resultados diferentes (por exemplo se fizéssemos (**) antes de (*) nesse caso o "W?" iria permanecer lá).
As duas perguntas anteriores se referem a como usar exatamente a lista de anotações, e como atualizá-la. Várias dessas questões não estão especificadas, o que deixa vocês livres para decidir o que fazer. Por exemplo me pareceria conveniente marcar com "V" uma sala que tem um muro, pois se em algum raciocínio você quisesse varrer a vizinhança e checar as salas já visitadas, poderia escrever uma condição simples (if "V" in mundo[i][j]) ao invés de uma condição composta (if "V" in mundo[i][j] and "M" in mundo[i][j]). Isso depende de você interpretar "V" como "já entrei lá" ou "já tentei entrar lá".
Davi: Contudo, nao seria possível usar a variável lista 'percepçao' dentro de agir(), já que é argumento de outra funçao (planejar() ). Alguma sugestao ou iluminaçao divina?
Alessandro: Cria uma variável global booleana...
Essa é uma possibilidade. Outra é transferir suas percepções para a lista mundo[i][j], nesse caso você ainda seria capaz de "perceber" (ou mais propriamente "lembrar de ter percebido") a presença da outra personagem na função agir().
Abraços,
Marcelo