O projeto da disciplina deverá ser feito em grupos de 4 alunos. Pode haver mistura de alunos entre as duas turmas. Teremos dois tipos de projetos para escolha. O primeiro fará você virar gente grande em desenvolvimento pois envolve desenvolver um sistema Web que coleta dados da Web e oferece um sistema Web usando o padrão MVC. O segundo fará você virar um ótimo desenvolvedor mas não necessariamente gente grande :-) pois envolve a criação de um videogame, o que exercitará interfaces gráficas 2D, tempo real, estruturas de dados e padrões de projeto OO.

Deveremos ter pelo menos 3 grupos de cada um dos projetos. Cada grupo deverá criar um repositório no gitlab que será acompanhado semanalmente. Pelo repositório será possível acompanhar as contribuições de cada membro do grupo. Se vocês fizerem programação em pares, é importante dividir os commits entre os dois membros alternadamente (um dia faz o commit no nome de um dos alunos e no outro dia faz o commit no nome do outro aluno para termos certeza que todos estão trabalhando).


Projeto 1 - Super agregador de blogs e notícias


A Internet está cheia de fontes de notícias e informações interessantes (e mais cheia ainda de lixo inútil). Para auxiliar os internautas a localizarem textos de seu interesse, vocês deverão implementar, utilizando o padrão MVC, um agregador de notícias e blogs customizável por um usuário específico.

Requisitos:

1) Por meio de uma página Web do seu sistema, um usuário deve ser capaz de fornecer uma série de blogs e canais de notícias que ele quer seguir. Cada fonte de dados será dada por uma URI contendo uma fonte de posts no protocolo RSS, por exemplo, https://www.wired.com/category/science/feed,  https://www.nytimes.com/svc/collections/v1/publish/https://www.nytimes.com/section/world/rss.xml, https://www.france24.com/en/rss,  https://feeds.folha.uol.com.br/ciencia/rss091.xml ou http://www.agencia.fapesp.br/rss/

2) O sistema deve permitir remover fontes de dados e listar as fontes cadastradas, sempre de forma intuitiva e visualmente agradável.

3) O sistema deve carregar e mostrar de forma bonita e bem organizada os títulos e fontes das notícias de todos as fontes incluídas pelo usuário.

4) Ao se clicar em uma notícia específica, o sistema abre a notícia em uma nova janela.

5) Inclua um filtro por data/hora das notícias que permita ver apenas notícias publicadas em um determinado intervalo de tempo, por exemplo, hoje, ontem à noite, entre 14:00 e 18:00 do dia 3 de abril, etc.

6) O usuário deve ser capaz de incluir, remover e visualizar uma lista de palavras-chave para as notícias que o interessa e o sistema deve apenas mostrar ao usuário as notícias que contenham essas palavras-chave. Caso a palavra-chave contenha um espaço, o usuário deverá usar aspas como, por exemplo, em "Testes Automatizados".

7) Ao definir as palavras-chave, o usuário deve poder usar expressões regulares

8) No topo da página que mostra as notícias filtradas para o usuário, mostre uma bonita nuvem de palavras com as principais palavras que aparecem nas notícias selecionadas para o usuário.

--------

O projeto deverá ser desenvolvido continuamente ao longo dos próximos 2 meses e terá as seguintes datas de entrega:


Fase 0, até 8 de maio

Criar grupo no gitlab, colocar todos os membros lá e, por último, incluir como Reporter @fabio.kon, @gabriely.pereira e @robson.aleixo.

Fase 1, até 22/maio

requisito 1 + requisito 2

Fase 2, até 12/junho

requisito 3 + requisito 4

Fase 3, até 1/julho

requisito 5 + requisito 6

--------

Itens opcionais que valerão pontos bonus: requisito 7, requisito 8 e qualquer outra melhoria legal que vocês propuserem.

Junto com cada fase, além do código no repositório gitlab, vocês devem apresentar um pequeno relatório (no arquivo README.md na raiz do seu projeto) descrevendo o que vocês fizeram naquela fase e a explicação de como executar o programa. Sempre que possível, as principais funcionalidades do código devem ser cobertos por testes automatizados.

Dicas e sugestões:

- Um artigo de divulgação sobre RSS para leigos meio antigo na boa revista WIRED: https://www.wired.com/2010/02/rss_for_beginnners/

- https://www.vogella.com/tutorials/RSSFeed/article.html

- https://www.youtube.com/watch?v=vtPkZShrvXQ. Intro to SpringBoot - tutorial for beginners - Uma boa ferramenta de MVC em Java que recomendamos que vocês usem neste projeto.

- Fiquem à vontade para usarem qualquer classe da biblioteca padrão de Java ou qualquer biblioteca de software livre disponível na Web.

- É terminantemente proibido a um grupo copiar o código de outro grupo.

- Como esse projeto tem uma interface Web dentro do navegador, pode ser interessante fazer testes usando o Selenium Web Driver ou
Selenium IDE, dêem uma olhada. É uma ferramenta super-útil e poderosa. Não assisti, mas esse vídeo parece ser bem didático: https://youtu.be/YPTlx9vbikM Há vários tutoriais escritos também como, por exemplo, https://saucelabs.com/resources/articles/getting-started-with-webdriver-selenium-for-java-in-eclipse ou https://www.toolsqa.com/selenium-tutorial/

Projeto 2 - O Pac Man do Século 21.


Você deverá implementar uma versão contemporânea do jogo de Pac Man, criando a visão descrita na seguinte matéria:  https://cozinhabruta.blogfolha.uol.com.br/2020/04/18/jantar-solitario-e-sequela-permanente-da-covid-19/

Não vou descrever muito sobre como deve ser o jogo de Pac Man, primeiro porque vocês já devem o conhecer e quem não conhece pode facilmente pesquisa na Web. Segundo, porque quero que vocês sejam criativos e façam o melhor jogo de pac man que já viram em suas vidas.
Vou apenas descrever alguns requisitos obrigatórios; fiquem à vontade para colocar outras melhorias adicionais.

Requisitos:

1) O mapa do jogo definindo o leiaute do tabuleiro deve ser definido em um arquivo .txt que seja facilmente editável manualmente por um ser humano. O mapa deverá conter as paredes e todos os elementos iniciais do jogo, i.e., onde ficam os adversários, o jogador e todos os outros elementos que dão pontos ao serem obtidos.

2) Utilizando o teclado, o jogador poderá se movimentar nas várias direções comendo pontinhos e pegando objetos no tabuleiro.

3) Utilize o padrão Strategy para definir diferentes algoritmos para o movimento dos adversários (fantasminhas).

4) Utilizando o padrão Fábrica Abstrata, implemente a possibilidade do jogo ter diferentes aparências (look-and-feel). Assim, facilmente, o jogador poderá escolher se o espaço do jogo terá uma aparência de supermercado em tempos de covid, velho oeste, espaço sideral ou os corredores do IME, por exemplo. Quando o usuário selecionar uma nova aparência, todos os elementos gráficos do jogo devem se redesenhar imediatamente.

5) Utilize o padrão State para representar as diferentes fases do jogo. Cada fase deve ser um pouquinho mais difícil que a anterior.

6) Utilize o padrão Decorator para acrescentar algum comportamento dinâmico em um jogador quando ele pega alguma coisa que lhe dá super-poderes durante alguns segundos (como o Mario do Super Mario Bros quando come o cogumelo e fica grande e ligadão).

7) Implemente uma música de fundo diferente para cada uma das fases.

8) Eventos especiais devem ter efeitos sonoros interessantes e agradáveis (cuidado para não tornar o jogo insuportável).

O projeto deverá ser desenvolvido continuamente ao longo dos próximos 2 meses e terá as seguintes datas de entrega:

Fase 0, até 8 de maio


Criar grupo no gitlab, colocar todos os membros lá e, por último, incluir como Reporter @fabio.kon, @gabriely.pereira e @robson.aleixo.

Fase 1, até 22/maio

requisito 1 + requisito 2

Fase 2, até 12/junho

requisito 3 + requisito 4

Fase 3, até 1/julho

requisito 5 + requisito 6

--------

Itens opcionais que valerão pontos bonus: requisito 7, requisito 8 e qualquer outra melhoria legal que vocês propuserem.

Junto com cada fase, além do código no repositório gitlab, vocês devem apresentar um pequeno relatório (no arquivo README.md na raiz do seu projeto) descrevendo o que vocês fizeram naquela fase e a explicação de como executar o jogo. Sempre que possível, as principais funcionalidades do código devem ser cobertos por testes automatizados.

As entregas das Fases 2 e 3 devem corrigir os problemas apontados pelos monitores nas fases anteriores.

Dicas e sugestões:

- Uma série de bons vídeos tutoriais sobre a escrita de Jogos em Java: https://www.youtube.com/playlist?list=PLWms45O3n--6TvZmtFHaCWRZwEqnz2MHa

- Um bom livro gratuito sobre padrões específicos para jogos: http://gameprogrammingpatterns.com/contents.html Em particular, a leitura do padrão game loop é super-importante: http://gameprogrammingpatterns.com/game-loop.html

- Fiquem à vontade para usarem qualquer classe da biblioteca padrão de Java, por exemplo, java.awt.Graphics2D e qualquer biblioteca de software livre disponível na Web.

- É terminantemente proibido a um grupo copiar o código de outro grupo.

- É fundamental que vocês só utilizem material que vocês possam usar legalmente. Portanto, usem apenas material licenciado apropriadamente (p.ex., Creative Commons) ou que vocês mesmo criem. Alguns sites bons para achar esse tipo de asset são:
https://opengameart.org e https://freesound.org O mesmo vale para sprites, texturas e fontes de texto usadas. Para fontes de texto o Google Fonts é mais do que suficiente.

- O Wiki do grupo de jogos dos alunos do IME: https://uspgamedev.org/wiki/Referências (aliás, se gostarem da experiência e quiserem mais, vocês podem se juntar ao USPGameDev :-)




Última atualização: segunda-feira, 8 jun. 2020, 09:48