Sobre a Parte B do EP3

Sobre a Parte B do EP3

por Marcelo Queiroz -
Número de respostas: 15

Boa noite, pessoal!

O enunciado da Parte B está dando um pouco mais de trabalho do que eu previ. Para não prejudicá-los, antecipo nessa mensagem uma série de leituras complementares que estão no enunciado e que podem ser realizadas independentemente do resto. Como sabem, a Parte B tem a ver com gerenciar um mundo de Wumpus genérico com várias personagens, e observá-lo através de uma interface gráfica, que permitirá a inspeção do mundo em diversos níveis de detalhamento e também o controle da passagem do tempo; essa interface será feita em pygame, uma biblioteca Python que facilita o gerenciamento de elementos gráficos, sonoros e também de interação com teclado e mouse. Por ser essa a parte menos relacionada com o conteúdo das aulas, é fortemente recomendada a leitura antecipada dos seguintes links:

Tutorial dr0id (simples e direto ao ponto): https://dr0id.bitbucket.io/legacy/pygame_tutorials.html

Outro tutorial: https://www.pygame.org/docs/tut/PygameIntro.html

Mais tutoriais (acho que não precisa): https://www.pygame.org/wiki/tutorials

Exemplos que vêm instalados com pygame: https://github.com/pygame/pygame/tree/master/examples (rode por exemplo “python -m pygame.examples.aliens”)

Manipulação de imagens: https://www.pygame.org/docs/ref/transform.html

Controles do teclado: https://www.pygame.org/docs/ref/key.html

Sons: https://www.pygame.org/docs/ref/mixer.html

 

Além disso, vocês já podem começar a procurar na rede imagens e sons para usar na interface: figuras de personagens, poços, monstros, muros, sons de flechas, urros, etc. Como exercício inicial, pensem em como usar o pygame para criar uma representação gráfica daquele mundo 5x5 que aparece no arquivo mundo.py, em uma janela retangular de 800x800 pixels.

 

Outro exercício preparatório importantíssimo é ler e entender o código do mundo.py. Muito do que vocês terão que implementar já está feito lá com duas personagens, e terá que ser apenas generalizado para múltiplos personagens.

 

Abraços,

 

Marcelo

 

Em resposta à Marcelo Queiroz

Licença de uso

por Robson Shimohara -

Se usarmos imagens e sons sem permissão do autor, não seria ilegal, uma infração de direitos autorais?

Qual é a data de entrega dessa parte?

Em resposta à Robson Shimohara

Re: Licença de uso

por Alessandro Bezerra da Silva -

acho que ninguém precisa saber que estamos usando os audios e imagens. além do mais não vamos sair distribuindo o resultado por aí, vai ficar restrito apenas ao contexto acadêmico. acho que nesse caso é sussa (ou não)

Em resposta à Alessandro Bezerra da Silva

Re: Licença de uso

por Marcelo Queiroz -

Olás!

A preocupação é relevante... se formos fazer uso pessoal do nosso código da parte B, isso realmente não faz tanta diferença, mas se pretendermos publicar o código após a data de entrega, deveríamos usar imagens e sons livres. Alguns sites interessantes para isso são:

Creative Commons:disponibiliza uma ferramenta de busca em diversos outros repositórios (como Flickr, YouTube e SoundCloud)

https://search.creativecommons.org/

Vários repositórios de mídias organizam seu conteúdo por tags:

https://www.flickr.com/creativecommons/

https://500px.com/creativecommons

https://soundcloud.com/wearecc

FreeSounds é um projeto de disponibilização de áudios livres

https://freesound.org/

Free Music Archive:

http://freemusicarchive.org/curator/Creative_Commons/

Guia da biblioteca da escola de direito de Harvard para mídias livres:

https://guides.library.harvard.edu/c.php?g=310751&p=2072816

Divirtam-se!

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Sobre a Parte B do EP3

por Marcelo Queiroz -

BTW, o bug do exemplo que mostrei hoje era bem banal: a cada mudança de nível de zoom o código estava fazendo o rescaling das imagens a partir dos arquivos originais, o que recarregava a imagem original da flechinha para a direita independentemente da orientação real da flecha. Bastou fazer o rescaling da imagem que já estava na memória para o problema desaparecer. Esse parece um daqueles casos de auto-ilusão da personagem: a representação mostrava a orientação de um jeito, mas o mundo sabia que na real a personagem estava olhando para outro lado! boca aberta

Em resposta à Marcelo Queiroz

Re: Sobre a Parte B do EP3

por Marcelo Queiroz -

Olá, pessoal!

Para quem por acaso estiver preemptivamente preocupado com a necessidade de aprender pygame, acreditem que não é de fato nada do outro mundo (nem do Mundo de Wumpus). Aqui vai uma lista completa de tudo o que usei na implementação da parte obrigatória do EP:

# traz pygame e algumas constantes importantes
import pygame
from pygame.locals import *

# funções usadas para imagens
pygame.init() # inicializa o pygame
pygame.display.set_mode() # abre a janela
pygame.image.load() # carrega imagem
pygame.transform.scale() # redimensiona imagem
pygame.display.flip() # atualiza tela

# função usada para receber dados do teclado
pygame.event.get()

Nas coisas opcionais, usei isso:

pygame.transform.rotate() # rotaciona imagem
pygame.transform.average_surfaces() # mescla imagens
import pygame.mixer # parte sonora do pygame
pygame.mixer.init() # inicializa mixer
som = pygame.mixer.Sound() # carrega som
som.play() # toca
pygame.mixer.get_busy() # testa se ainda está tocando

Abraços,

Marcelo

Em resposta à Marcelo Queiroz

Re: Sobre a Parte B do EP3

por Washington Luiz Meireles de Lima -

Marcelo,

Aparentemente, o mundo usa um atributo chamado "urro" ( True se Wumpus morto, False, caso contrário) nos processamentos das percepções, mas acredito que esse atributo não está sendo inicializado no mundo.py. Isso procede? Digo isso, porque assim como eu, muita gente vai usar partes do código, e isso pode passar despercebido.

Quando um Wumpus morre, somente a personagem que o matou recebe a percepção "urro" ou todas recebem ( no código, fala sobre a propagação do som)? Aliás, como funcionária essa percepção  com vários personagens?

 

Obrigado,

Washington.

Em resposta à Washington Luiz Meireles de Lima

Re: Sobre a Parte B do EP3

por Marcelo Queiroz -

Bom dia, Washington!

1) Aparentemente, o mundo usa um atributo chamado "urro" ( True se Wumpus morto, False, caso contrário) nos processamentos das percepções, mas acredito que esse atributo não está sendo inicializado no mundo.py. Isso procede? Digo isso, porque assim como eu, muita gente vai usar partes do código, e isso pode passar despercebido.

No arquivo mundo.py original, essa inicialização ocorre no início da função processaJogo(), na linha 71:

self.personagemNUSP.impacto = self.urro = False

A razão dessa inicialização estar aí e não na função __init__ é porque esse atributo é reinicializado a cada rodada (a reinicialização aparece logo mais na linha 84), após a geração das percepções, a fim de evitar que o urro seja ouvido por mais de uma rodada. A inicialização poderia estar no __init__, mas nesse caso provavelmente quem lesse o código de processaJogo ficaria com a impressão de que faltava inicializar o atributo antes de entrar no laço (para as percepçoes da primeira rodada). Enfim, isso é uma escolha da implementação que vocês podem mudar livremente.

2) Quando um Wumpus morre, somente a personagem que o matou recebe a percepção "urro" ou todas recebem ( no código, fala sobre a propagação do som)? Aliás, como funcionária essa percepção  com vários personagens?

No enunciado da Parte A lemos "se ela [a personagem] conseguir disparar um tiro certeiro, em todo o mundo se ouvirá um urro (“U”) do Wumpus agonizante, que depois de morto não exala mais seu fedor característico". Isso mostra como as percepções de urro e fedor se comportam após a morte do Wumpus: o urro será percebido por todas as personagens vivas, e a ausência do fedor apenas nas casas adjacentes. O comentário sobre "propagação do som" pode ser entendido simplesmente como equivalente a esse ser um atributo do objeto mundo como um todo, afetando simultaneamente as percepções em todas as salas (e não como uma lei física onde a percepção do urro fosse "caminhando" pelo mundo com uma certa velocidade).

Compare essa situação com o atributo impacto, que pertence à personagem e afeta apenas a percepção dela na próxima rodada. No código original aquela inicialização está junto com a do urro, mas isso não faria sentido num mundo com várias personagens (pois haveria um atributo impacto para cada personagem).

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Sobre a Parte B do EP3

por Gustavo Bastos -

Boa noite, professor.

Acha que seria válido se eu (e quem mais quiser) disponibilizasse o arquivo referente à minha personagem para a turma, atualizado para que ele funcione direitinho na parte B? Eu percebi algumas burrices no meu código, e ele pode ficar preso em um loop eterno sem contribuir pro jogo mostrando a língua

Eu me refiro a mudanças mais superficiais, e já que as personagens não estão identificadas, eu pensei que não teria tanto problema.

Obrigado desde já!

Em resposta à Gustavo Bastos

Re: Sobre a Parte B do EP3

por Marcelo Queiroz -

Bom dia, Gustavo!

Sim, podemos disponibilizar quantas personagens quisermos, sejam elas versões corrigidas da parte A, ou personagens completamente novas. Vamos criar uma thread separada aqui no fórum para organizar isso, ok?

Abraços,

Marcelo

Em resposta à Marcelo Queiroz

Re: Sobre a Parte B do EP3 - data de entrega

por Henrique Serra -

Já foi questionado aqui anteriormente, mas eu não consegui achar a resposta, então desculpe pela redundância. Quando,exatamente, será a data de entrega desse EP?