EP3 - Terceiro Exercício-Programa - Parte B

EP3 - Terceiro Exercício-Programa - Parte B

por Marcelo Queiroz -
Número de respostas: 19

Boa tarde, pessoal!

O Enunciado do EP3 - Parte B está disponível no PACA. A data de entrega é 2a-feira 25/6 às 23:55 pelo PACA. Esse prazo infelizmente é improrrogável pois precisamos de 2 dias livres para estudar para a P3.

Dúvidas, como sempre, podem ser resolvidas no fórum, nas aulas, nos plantões de monitoria, etc.

Boas implementações!

Marcelo

Em resposta à Marcelo Queiroz

Sobre α,β e δ

por Arthur Sakayan Vieira de Melo -

Seria δ a porcentagem de casas livres no tabuleiro e seriam α e β  a porcentagem de muros e poços nas casas restantes, ou entendi algo errado?

Em resposta à Arthur Sakayan Vieira de Melo

Re: Sobre α,β e δ

por Marcelo Queiroz -

Bom dia, Arthur!

Os parâmetros α, β e δ se referem a frações do número total de casas do tabuleiro, que é N². A fórmula do enunciado diz como calcular N em função desses parâmetros (e do γ), para que depois seja possível calcular as quantidades exatas de muros, poços e casas livres, que serão respectivamente αN², βN² e δN². Há uma sugestão no enunciado de como gerar o conteúdo do tabuleiro a partir de um tabuleiro inicial todo livre; você pode verificar que após o posicionamento de αN² muros, βN² poços e γP Wumpus, as casas remanescentes serão δN².

Abraços,

Marcelo

Em resposta à Marcelo Queiroz

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Caio Túlio de Deus Andrade -

Boa Tarde, Professor

     No método MundoDeWumpus, devo me preocupar com a possiblidade de meu programa gerar um mundo no qual um wumpus "nasce" cercado de Muros ou Poços? A possibilidade, apesar de altamente improvável, implicaria em um jogo impossível de se vencer.

Em resposta à Caio Túlio de Deus Andrade

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Marcelo Queiroz -

Oi, Caio!

Não se preocupe com isso! Não é trivial verificar a viabilidade de vitória em um mundo qualquer... Além da situação que você citou, imagine se o Wumpus tivesse um monte de casas livres em volta, mas uma muralha distante que o isolasse de todas as personagens? Imagine que houvesse 2 Wumpus e 1 personagem em uma dessas "ilhas" isoladas do resto do tabuleiro? Agora imagine ter que escrever códigos para testar todas as situações semelhantes? Se imaginou, esqueça... piscando

Abraço,

Marcelo

Em resposta à Marcelo Queiroz

Quantidade de Wumpus

por Lucas Toshio Löschner Fujiwara -

Professor, na parte: "crie um mundo com N**2 salas livres e depois sorteie floor(α*N**2) salas distintas e livres para abrigar muros, repetindo a operação para poços e Wumpus).", quer dizer que devo criar um mundo com floor(α*N**2) Wumpus?

Ou a quantidade de wumpus deve ser floor(γ*P)?

Me perdoe se estiver sendo redudante.

Em resposta à Lucas Toshio Löschner Fujiwara

Re: Quantidade de Wumpus

por Marcelo Queiroz -

Oi, Lucas!

A "operação" a ser repetida era o sorteio da quantidade especificada de salas distintas e livres para posicionar os elementos desejados (isso depende de sortear, ver se está livre, e se não estiver tentar de novo e de novo e de novo sem incrementar o contador). As quantidades são:

floor(α*N**2) muros

floor(β*N**2) poços

floor(γ*P) Wumpus

Abraços,

Marcelo

Em resposta à Marcelo Queiroz

Re: Quantidade de Wumpus

por Rodrigo Vidotti de Souza -

O que acontece quando só tiver 1 personagem? Pois seguindo essa fórmula, o número de Wumpus será 0 e o jogo acabará assim que começar.

Em resposta à Rodrigo Vidotti de Souza

Re: Quantidade de Wumpus

por Marcelo Queiroz -

Olá, Rodrigo!

> O que acontece quando só tiver 1 personagem? Pois seguindo essa fórmula, o número de Wumpus será 0 e o jogo acabará assim que começar.

Sim, uma personagem sozinha viverá feliz para sempre sem se preocupar com Wumpus. Esse é um jogo para equipes. Mas se você quiser (temporariamente) explorar sua implementação com 1 personagem só, troque o floor() por ceil() no cálculo do número de Wumpus.

Abraço,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Quantidade de Wumpus

por Caio Túlio de Deus Andrade -

Professor, mas essa conta não apresentará erros de arrendondamentos? Se tomarmos o número de salas como 23**2 (alfa = beta = 0.2, gama = 0.9, epsilon = 0.5) - posso estar enganado quanto ao nome das letras, mas enfim haha -, ou seja, 529 salas. Devido ao valor de epsilon, temos um total de salas Livre = floor(529 * 0.5), logo, 264 salas livres. Seguindo, fazemos floor(0.2 * 529) para calcular o numero de salas com muros e poços, ou seja, temos  105 muros e 105 poços (até agora temos 474 salas designadas). Como temos 54 personagens, o numero de wumpus é floor(54*0.9) = 48 wumpus. Logo, temos 522 salas. Mas isso nos deixa com um total de 7 salas não designadas. Devo preenche-las com salas livres? É que isso contraria a ideia expressa no enunciado de ter um numero de salas livres ( floor(epsilon*N**2) ) que funciona como entrada do usuário via sys.argv . 

Em resposta à Caio Túlio de Deus Andrade

Re: Quantidade de Wumpus

por Marcelo Queiroz -

Boa noite, Caio!

Aquelas equações só valem exatamente para os números reais... mas como "quantidade de salas do tipo X" tem que ser inteiro, forçosamente as equações deixarão de valer. A proposta do enunciado: "Use math.ceil() (arredondamento para cima) no cálculo de N e math.floor() (arredondamento para baixo) no cálculo do número de muros, poços e Wumpus" visa apenas facilitar um pouco a vida dos personagens: um mundo "um tiquinho maior" do que o valor fracionário de N e com "um tiquinho menos" do que o número fracionário de muros e poços. A frase "(ou seja, crie um mundo com N**2 salas livres e depois sorteie floor(α*N**2) salas distintas e livres para abrigar muros, repetindo a operação para poços e Wumpus)" deixa claro exatamente qual é o algoritmo, e também dá a resposta à sua pergunta: o "saldo" de salas que não foram para muros, poços e Wumpus irá aumentar o número de salas livres. Você não irá preencher esse saldo com salas livres, elas foram inicializadas como livres (antes de mais nada).

Agora, se o que te incomodou foi o trecho "e gere um mundo que tenha exatamente o número especificado de salas de cada tipo", note que ele vem explicando a passagem anterior "Use [aquelas aproximações] no cálculo do número de muros, poços e Wumpus", então o termo "cada tipo" na frase se refere aos tipos mencionados.

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Vinicius Guimaraes Pereira -

Olá professor!

Quando o mundo é iniciado e as posicões das personagens são determinadas, pode ocorrer de mais de uma personagem 'nascer' num mesmo lugar do mundo? Ou devo priorizar o 'nascimento' das personagens em locais diferentes?

Obrigado!

Vinícius

Em resposta à Vinicius Guimaraes Pereira

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Marcelo Queiroz -

Oi, Vinícius!

As personagens devem nascer em casas "livres", que pela especificação são aquelas que não têm muros, poços nem Wumpus. Então nada impede as personagens de nascerem numa mesma casa.

Para os que estiverem preocupados com as personagens ficarem paralisadas tentando compartilhar para o resto de suas vidas, postem versões corrigidas das personagens no tópico correspondente do fórum!

Abraços,

Marcelo

Em resposta à Marcelo Queiroz

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Alessandro Bezerra da Silva -

Professor, estou entrando em loop infinito sempre que dois personagens estão na mesma casa. Foi sugerido editar o código da personagem e aplicar uma correção. O Sr tem alguma sugestão de como eu posso fazer isso? E irei precisar fazer a correção em todos os personagensda sala?

Em resposta à Alessandro Bezerra da Silva

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Marcelo Queiroz -

Olá, Alessandro!

> Professor, estou entrando em loop infinito sempre que dois personagens estão na mesma casa. Foi sugerido editar o código da personagem e aplicar uma correção. O Sr tem alguma sugestão de como eu posso fazer isso? E irei precisar fazer a correção em todos os personagensda sala?

Não!! A tarefa da parte B não depende em nada do comportamento das personagens. Você só corrige o que quiser, se quiser e se estiver com tempo sobrando para isso. Duas personagens que decidem compartilhar para sempre não provocam um "loop infinito" na simulação do mundo, elas simplesmente param de se movimentar (outras personagens continuariam suas vidas normalmente). Se por acaso alguma personagem estiver realmente entrando em loop e travando a simulação (sem devolver o controle para o mundo), nesse caso minha recomendação é apagar essa personagem e continuar o desenvolvimento e testes com as outras.

Abraços,

Marcelo

Em resposta à Marcelo Queiroz

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Joao Mauad Seckler -

Boa noite! Só para verificar se eu estou enganado ou se é um problema da especificação mesmo:

"Todos os parâmetros mencionados poderão ser redefinidos pelo usuário através de parâmetros posicionais na chamada “python3
mundo.py M S α β γ δ”. Para isso, use sys.argv[] e trate os parâmetros como opcionais, ou seja, se a lista tiver
menos que 6 argumentos então cada valor ausente deve ser configurado pelo valor default."

De acordo com com a documentação, sys.argv[0] é o nome do próprio script. Então teria que checar para menos de 7 elementos nessa lista.

Boa noite,

João

Em resposta à Joao Mauad Seckler

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Marcelo Queiroz -

Boa noite, João!

Você tem razão, os argumentos de sys.argv são os argumentos do comando python3, e eu ao escrever o enunciado estava pensando nos argumentos do mundo.py, que começam na posição 1 de sys.argv. Então a frase "se a lista tiver menos que 6 argumentos" se refere à lista de argumentos do nosso código, que vai de sys.argv[1] até sys.argv[len(sys.argv)-1] (e tem len(sys.argv)-1 elementos).

Provavelmente na implementação você não vai perguntar se len(sys.argv)<7 pois isso não ajuda muito a saber quantos tem e quais são. Você fará várias perguntas.

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Cainã Setti Galante -

Professor e/ou Monitores, eu gostaria de saber oq fazer se mais de um personagem se encontra na casa ao mesmo tempo, eu tenho que indicar a orientação dos dois ou posso indicar só uma ?

 

Em resposta à Cainã Setti Galante

Re: EP3 - Terceiro Exercício-Programa - Parte B

por Marcelo Queiroz -

Bom dia, Cainã!

> Professor e/ou Monitores, eu gostaria de saber oq fazer se mais de um personagem se encontra na casa ao mesmo tempo, eu tenho que indicar a orientação dos dois ou posso indicar só uma ?

Visto que a indicação de orientação não é parte obrigatória do EP, estamos falando do bônus nº1, correto? Nesse caso, isso não está especificado, bem como não está especificado como mostrar a própria imagem das várias personagens que ocupam o mesmo quadrado na tela de exibição do pygame (imaginando que as personagens pudessem ter imagens diferentes, outro aspecto livre = não-especificado). Uma solução simples para colocar todos os elementos gráficos na mesma posição é usar a função pygame.transform.average_surfaces(), que cria uma "Surface" que é a média de várias outras. Como exemplo, se a, b e c são imagens obtidas com pygame.image.load(), o comando

d = pygame.transform.average_surfaces([a, b, c])

gera uma nova imagem com uma mescla das 3 imagens, como se as 3 estivessem desenhadas em folha transparente e sobrepostas.

Abraços,

Marcelo