Upgrade to Pro — share decks privately, control downloads, hide ads and more …

COLABORAÇÃO COM O FREE PYTHON GAMES, UMA COLEÇÃ...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

COLABORAÇÃO COM O FREE PYTHON GAMES, UMA COLEÇÃO PARA ENSINO/APRENDIZAGEM DE PROGRAMAÇÃO DE COMPUTADORES - FASE 1

As disciplinas relacionadas à programação têm apresentado elevados índices de reprovação. Diante disso, novas metodologias e ferramentas de ensino/aprendizagem têm sido pesquisadas e desenvolvidas. Uma dessas abordagens é a utilização de jogos digitais. Free Python Games é uma coleção de jogos que objetiva educação e diversão e possui seu código-fonte disponibilizado na plataforma Github, licenciada sob a licença de software livre Apache 2. Os jogos são escritos em código Python simples e projetados para experimentação e desafios. São incluídas versões simplificadas de jogos de arcade clássicos. Contudo, seu uso está restrito ao ensino/aprendizagem de programação estruturada, não contemplando programação orientada a objetos. O projeto teve como objetivo contribuir com o Free Python Games submetendo versões dos jogos para serem utilizadas no ensino/aprendizagem de programação orientada a objetos. Como resultado, foram criadas versões dos jogos Snake e Pacman, já existentes no Free Python Games, com o paradigma de programação orientada a objetos. Com isto, espera-se que os professores e alunos disponham de uma ferramenta útil e melhorada para o ensino/aprendizagem de disciplinas iniciais relacionadas a programação com a linguagem de programação Python, incluindo cursos de programação orientada a objetos.
Palavras-Chaves: programação de computadores; Python; jogos; objetos de aprendizagem

Other Decks in Programming

Transcript

  1. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE

    DO NORTE BRENO NASCIMENTO DE ALMEIDA COLABORAÇÃO COM O FREE PYTHON GAMES, UMA COLEÇÃO PARA ENSINO/APRENDIZAGEM DE PROGRAMAÇÃO DE COMPUTADORES - FASE 1 CEARÁ-MIRIM/RN 2021
  2. BRENO NASCIMENTO DE ALMEIDA COLABORAÇÃO COM O FREE PYTHON GAMES,

    UMA COLEÇÃO PARA ENSINO/APRENDIZAGEM DE PROGRAMAÇÃO DE COMPUTADORES - FASE 1 Relatório de Prática Profissional apresentado ao Curso Técnico Integrado em Programação de Jogos Digitais do Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte, em cumprimento às exigências legais como requisito parcial para a obtenção do título de Técnico em Programação de Jogos Digitais. Aprovado em: 19 / 04 / 2021 Nota Final: 100 AVALIADORES Prof. Ms. Adorilson Bezerra de Araújo Orientador(a) Matrícula: 3461909 Prof. Dr. Tiago Fernando Barbosa de Sousa Coordenador(a) do Curso Técnico Integrado em Programação de jogos digitais Matrícula: 2303267 Prof. Jose Ewerton da Cruz de Souza Professor de Sistemas de Informação Matrícula: 3214300 CEARÁ-MIRIM/RN 2021
  3. RESUMO As disciplinas relacionadas à programação têm apresentado elevados índices

    de reprovação. Diante disso, novas metodologias e ferramentas de ensino/aprendizagem têm sido pesquisadas e desenvolvidas. Uma dessas abordagens é a utilização de jogos digitais. Free Python Games é uma coleção de jogos que objetiva educação e diversão e possui seu código-fonte disponibilizado na plataforma Github, licenciada sob a licença de software livre Apache 2. Os jogos são escritos em código Python simples e projetados para experimentação e desafios. São incluídas versões simplificadas de jogos de arcade clássicos. Contudo, seu uso está restrito ao ensino/aprendizagem de programação estruturada, não contemplando programação orientada a objetos. O projeto teve como objetivo contribuir com o Free Python Games submetendo versões dos jogos para serem utilizadas no ensino/aprendizagem de programação orientada a objetos. Como resultado, foram criadas versões dos jogos Snake e Pacman, já existentes no Free Python Games, com o paradigma de programação orientada a objetos. Com isto, espera-se que os professores e alunos disponham de uma ferramenta útil e melhorada para o ensino/aprendizagem de disciplinas iniciais relacionadas a programação com a linguagem de programação Python, incluindo cursos de programação orientada a objetos. Palavras-Chaves: programação de computadores; Python; jogos; objetos de aprendizagem
  4. SUMÁRIO 1 INTRODUÇÃO 6 2 JUSTIFICATIVA 7 3 OBJETIVOS 8

    3.1 Objetivo Geral 8 3.2 Objetivos Específicos 8 4 DADOS GERAIS DO PROJETO 9 4.1 Síntese de Carga Horária e Atividades 9 5 METODOLOGIA 10 6 FUNDAMENTAÇÃO TEÓRICA 11 7 DESCRIÇÃO DAS ATIVIDADES 14 7.1 Estudo do paradigma POO na linguagem de programação Python 14 7.2 Estudo de Git e Github e do processo de contribuição com software livre nessa plataforma 14 7.3 Estudo do código-fonte dos jogos do Free Python Games 17 7.4 Selecionar jogos que já estejam no Free Python Games para serem adaptados para o paradigma orientado a objetos 21 7.5 Implementação do jogo Snake com o paradigma orientado a objetos 21 7.6 Implementação do jogo Pacman com o paradigma orientado a objetos 27 8 CONSIDERAÇÕES FINAIS 32 8.1 Trabalhos Futuros 32
  5. 6 1 INTRODUÇÃO Com a popularização do acesso à Internet,

    novos recursos foram introduzidos no ambiente escolar para auxiliar docentes e discentes no processo de ensino/aprendizagem. Sobretudo, recursos que buscam tornar as aulas mais atrativas, engajadoras, estimulantes e proveitosas (Flores e Tarouco, 2008). Alguns desses recursos, criados com o propósito educativo, são conhecidos como objetos de aprendizagem (OAs). Segundo a definição de Wiley (2000), objeto de aprendizagem é uma entidade que pode ou não ser digital, e que pode ser usada, reusada ou referenciada durante o ensino com suporte tecnológico. Este trabalho surgiu da necessidade de auxiliar docentes e discentes no processo de ensino/aprendizagem nas disciplinas de Introdução a Programação e Programação Orientada a objetos, ofertadas nos 1º e 2º anos dos Cursos Técnico em Informática, nos diversos campi do IFRN, além do curso de Programador de Jogos Digitais do Campus Ceará-Mirim. O índice de reprovação nessas disciplinas é muito alto, e essa realidade se repete ano após ano. Adicionalmente a este cenário, a linguagem de programação Python vem sendo cada vez mais adotada pelos professores do IFRN, contudo carecem de objetos de aprendizagem para essa linguagem, uma vez que para a linguagem de programação Java, também bastante utilizada, esses objetos existem em maior número e são de mais amplo conhecimento, tais como Greenfoot, BlueJ, JavaTool e DrJava (Silva, 2015).
  6. 7 2 JUSTIFICATIVA A importância deste trabalho residiu na abordagem

    de um problema comum, que é o alto índice de reprovação nas disciplinas de programação. Além disso, é importante para que os professores e alunos de tais disciplinas com a linguagem de programação Python, disponham de mais um recurso para utilização em sala de aula e demais ambientes de ensino/aprendizagem. Adicionalmente, a proposta foi colaborar com um projeto já existente e já disponível para ser utilizado por quem tiver interesse. Dessa forma, acreditamos que o impacto deste trabalho será maior em relação a uma abordagem de iniciar um novo projeto do zero. Essa abordagem também permitiu aos nossos pesquisadores ganharem experiência na colaboração com projetos de software livre.
  7. 8 3 OBJETIVOS 3.1 OBJETIVO GERAL Contribuir com a coleção

    de jogos Free Python Games, possibilitando que alunos e professores disponham de mais um objeto de aprendizagem para as disciplinas introdutórias de programação. 3.2 OBJETIVOS ESPECÍFICOS Os objetivos específicos deste trabalho foram: • Adquirir conhecimentos em Python, sobretudo no paradigma orientado a objetos • Adquirir conhecimentos em Git e na plataforma Github, compreendendo como funciona o processo de contribuição com software livre nessa plataforma • Reescrever jogos já existentes no Free Python Games utilizando o paradigma orientado a objetos • Contribuir com um software livre já existe e estável, disponibilizado na Internet
  8. 9 4 DADOS GERAIS DO PROJETO TÍTULO DO PROJETO: Colaboração

    com Free Python Games, uma coleção para ensino/aprendizagem de programação de computadores - Fase 1 PERÍODO DE REALIZAÇÃO: 18/08/2020 à 19/03/2021 TOTAL DE HORAS: 400 O projeto foi selecionado pelo Edital nº 04/2020 - PROPI/RE/IFRN - Projetos de Pesquisa e Inovação com Fomento - Edital de Pesquisa, sem concessão de bolsas. Porém, recebemos uma doação no valor de R$ 2.000,00 (dois mil reais) do empresário e youtuber Fábio Akita e sua empresa Codeminer42. 4.1 SÍNTESE DE CARGA HORÁRIA E ATIVIDADES Tabela 1 – Síntese de Carga horária e Atividades. CARGA HORÁRIA ATIVIDADES DESENVOLVIDAS 80 horas Estudar o paradigma POO na linguagem de programação Python 20 horas Estudar git, github e processo de contribuição com software Livre 50 horas Estudar o código-fonte do Free Python Games 10 horas Selecionar jogos que já estejam no Python Free Games para serem adaptados para o paradigma orientado a objetos 120 horas Implementar o jogo Snake, que já estava no Python Free Games com o paradigma orientado a objetos 120 horas Implementar o jogo Pacman, que já estava no Python Free Games com o paradigma orientado a objetos
  9. 10 5 METODOLOGIA A execução deste trabalho foi dividida em

    quatro etapas. A primeira etapa foi um estudo das tecnologias necessárias para o desenvolvimento do trabalho, dentre elas a implementação do paradigma de programação orientada a objetos na linguagem Python e Git/Github. Na segunda etapa foi feito um estudo do código-fonte do Free Python Games e também um estudo das bibliotecas utilizadas por eles, para assim compreender melhor o funcionamento dos jogos. Na terceira etapa uma análise dos jogos foi feita com o intuito de selecionar jogos que já estejam no Free Python Games para serem adaptados para o paradigma orientado a objetos. Na quarta e última etapa os jogos selecionados foram reescritos utilizando o paradigma orientado a objetos. E então foram enviados como contribuição para o repositório do Free Python Games no Github, através do mecanismo de pull request da plataforma.
  10. 11 6 FUNDAMENTAÇÃO TEÓRICA Python é uma linguagem de programação

    criada no início dos anos 90. Segundo sua documentação oficial (2020), Foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Combina uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros. Assim, Python é conhecida por ser uma linguagem de fácil aprendizado, e uma excelente opção para a primeira linguagem de programação a ser aprendida, conforme seu próprio autor, Guido Van Rossum (1999). Devido isso, professores de diversas instituições brasileiras e de outros países estão utilizando Python em seus cursos (Bosse & Gerosa, 2015) (Bell, Grimson, & Guttag, 2016) (Rodrigues, 2013), incluindo vários docentes do IFRN. Pesquisa de mercado recente já aponta Python como sendo uma das 3 linguagens mais populares do mundo (Ventura, 2020). Contudo, sem levar em consideração a linguagem de programação utilizada, o fato é que no IFRN a taxa de reprovação nas disciplinas introdutórias de programação é bastante alta. Cenário não tão diferente de outras instituições de ensino (Bosse & Gerosa, 2015). Objeto de aprendizagem (OA) é uma entidade que pode ou não ser digital, e que pode ser usada, reusada ou referenciada durante o ensino com suporte tecnológico (Wiley, 2000). Dentre os diversos tipos de OAs, o contexto de jogos é bastante utilizado. Diversas pesquisas investigam os benefícios da utilização de jogos no processo de ensino/aprendizagem de programação (Silva et al., 2015) (Chagas, Oliveira e Lopes, 2019) (Gomes, et al. 2016). Dentre as opções de OAs que têm surgido nos últimos anos, uma delas é o Python Birds, um projeto para ensino de programação orientada a objetos em Python. Nele, os aprendizes são desafiados a desenvolver uma versão simplificada
  11. 12 do jogo Angry Birds (Python Pro, 2021). O projeto

    disponibiliza uma infra-estrutura necessária para que o jogo seja executado, mas que não tem relação direta com o objetivo do ensino de programação orientada a objetos como por exemplo, apresentar os atores do jogo na tela ou carregar imagens do disco rígido do computador. Além disso, existe uma bateria de testes já escrita. O que permite um desenvolvimento orientado a teste, trazendo mais agilidade para o aprendizado, em comparação a uma abordagem em que o desenvolvedor teria de escrever todo o código necessário para o jogo ser feito, e ainda ter que escrever os testes ou testar o jogo manualmente. Dessa forma, o foco serão os conceitos e prática de orientação a objetos. Outro OA no contexto de ensino de programação com Python é o Free Python Games (FPG), uma coleção de jogos que objetiva educação e diversão. São incluídas versões simplificadas de jogos de arcade clássicos, como o Pacman, apresentado na Figura 1. Figura 1 - Imagem do jogo Pacman da Free Python Games Os jogos dessa coleção são escritos em código Python simples e projetados para experimentação e desafios. Contudo, o seu uso está restrito a aprendizagem de programação estruturada, não contemplando programação orientada a objetos. Todos os jogos dessa coleção foram implementados sobre o módulo Turtle, da biblioteca padrão do Python. segundo a sua documentação oficial (Python, 2001), o módulo Turtle é uma maneira popular para introduzir programação para crianças. E
  12. 13 foi parte da linguagem de programação Logo originalmente desenvolvida

    por Wally Feurzig, Seymour Papert e Cynthia Solomon em 1967. Tanto Python Birds quanto Free Python Games estão licenciadas como software livre e seus códigos-fontes estão disponíveis na Internet, podendo receber contribuições de terceiros ou mesmo serem criados trabalhos derivados. Outro ponto em comum é que ambos decidiram não utilizar bibliotecas que trariam facilidades para o desenvolvimento e atratividade visual para os jogos, como o Pygame. Tal decisão foi motivada em evitar uma barreira de entrada, que seria a instalação de ferramentas que não fazem parte da biblioteca Python padrão. Entretanto, enquanto Python Birds é direcionado para o ensino/aprendizagem de programação orientada a objetos e é um único jogo, mas composto de vários componentes, o que pode ser intimidador para iniciantes, Free Python Games não contempla esse paradigma de programação, além de apresentar jogos simples, escritos em um único arquivo. Existe, portanto, uma lacuna de objetos de aprendizagem para o ensino de programação orientada a objetos, como Python Birds, mas com a simplicidade apresentada por Free Python Games.
  13. 14 7 DESCRIÇÃO DAS ATIVIDADES Esta seção discorre sobre o

    passo a passo decorrido durante o desenvolvimento do projeto, desde a fase de estudos até a última refatoração, descrevendo de forma sucinta todo o caminho traçado nas atividades desenvolvidas. 7.1 ESTUDO DO PARADIGMA POO NA LINGUAGEM DE PROGRAMAÇÃO PYTHON Para esta atividade fez-se uso da ferramenta de ensino Python Birds que é um curso online completo disponibilizado pela Python Pro, onde visa ensinar Orientação a objetos utilizando a linguagem de programação Python. Ministrado por Renzo Nuccitelli, Engenheiro de Computação formado pelo ITA e Especialista em programação web, o curso contém seis módulos, e visa introduzir programação Procedural e Orientação a Objetos em Python. Onde vai do Python básico à orientação a objetos. Durante o curso é desenvolvido uma versão simplificada do jogo "Angry Birds" para ensinar conceitos como: classes, herança, polimorfismo, dentre outros. Assim os alunos aprenderão os conceitos ao mesmo tempo em que implementam o projeto prático. Outro material importante utilizado nessa fase de estudo foi uma apostila de Python e orientação a objetos produzida e distribuída pela Caelum, uma plataforma de ensino de programação que disponibiliza vários cursos de programação utilizando diferentes linguagens de programação. Os cursos são pagos, mas pode se ter acesso às apostilas de forma gratuita no site. 7.2 ESTUDO DE GIT E GITHUB E DO PROCESSO DE CONTRIBUIÇÃO COM SOFTWARE LIVRE NESSA PLATAFORMA Para essa atividade fez-se uso da plataforma de ensino Curso em Vídeo, um projeto do professor Gustavo Guanabara, lançado em 2013 e que busca ensinar tecnologia através de um site que disponibiliza cursos completos em vídeo de forma a distância e 100% gratuita. A plataforma conta com diversos cursos e um deles é o de Git e Github, que busca ensinar versionamento no Git/Github na prática. Também fiz uso de materiais disponibilizados online para me aprofundar mais em Git/Github.
  14. 15 Alguns dos conceitos importantes aprendidos nesses estudos, e que

    serão utilizados ao longo deste trabalho são: • repositório: um diretório monitora pela sistema Git, pra que seja feito o controle de versão dos arquivos nele presente. Eles podem ser locais, que estão no computador local, ou remotos, que estão em outros computadores. Os repositórios no Github são repositórios remotos. • fork: cópia de um outro repositório na plataforma Github. Isso permite que um outro usuário tenha o mesmo código de outra pessoa e possa alterá-lo sem interferir no código original. • issue: recurso da plataforma Github onde os usuários reportam os problemas encontrados e sugerem melhorias, assim tornando mais fácil corrigir problemas e obter informações para melhoria do projeto. • pull request: mecanismo da plataforma Github que permite informar a outras pessoas sobre alterações feitas em um cópia (fork) e que você deseja que seja incorporado ao repositório original. • clone: uma cópia do repositório para uma máquina local, assim extraindo uma cópia completa de todos os dados do repositório para o computador. • commit: é como uma foto dos arquivos em um determinado momento. O controle de versão é baseado neles. Permitindo avançar ou retroceder no histórico do código. • organização no Github: são contas compartilhadas onde empresas e projetos de código aberto podem colaborar em projetos diversos ao mesmo tempo. Para o início do projeto, foi aberto uma issue1 para o repositório do Free Python Games, onde apresentamos a ideia das implementações em versões orientada a objetos para os jogos existentes. Grant Jenks, o criador do Free Python Games, respondeu dizendo que estava aberto a essa ideia e que poderíamos seguir em frente e fazer os pull requests, conforme pode ser visto na Figura 2. Após isso, foi feito um fork de lá para a organização IFRN2, que foi de onde 2 Disponível em: https://github.com/IFRN/free-python-games 1 Disponível em: https://github.com/grantjenks/free-python-games/issues/52
  15. 16 eu fiz o fork para a minha conta pessoal

    no Github3 e dele um clone para a minha máquina para desenvolver o trabalho propriamente dito. Quando fizemos o fork do Free Python Games, o último commit era o ca99e103134 de 31 de dezembro de 2019. O fluxo de trabalho seria fazer o pull request para este fork na organização do IFRN e apenas quando finalizado ser feito um novo pull request para o repositório original. O motivo disso foi não poluir o repositório original com discussões de orientações e em um idioma diferente do inglês. Devido a pandemia e o isolamento social, as orientações e discussões foram feitas de forma remota, com transmissão pela plataforma Twitch5. Inicialmente, as anotações de melhorias foram feitas exclusivamente de forma audiovisual ou documentos de texto. Contudo, depois percebemos que deveríamos estar utilizando o recurso de comentários e revisão dos pull request, e por lá fazer as solicitações de alterações no código e assim foi feito daí em diante, o que pode ser visto no pull request com a versão OO do Pacman6. O primeiro pull request (com o Snake versão OO) seguiu o fluxo definido inicialmente: primeiro para a organização IFRN e depois para o Free Python Games. Porém, para o segundo resolvemos fazer diretamente para o Free Python Games, já que agora tínhamos um modelo de pull request e estávamos com mais experiência e segurança na manipulação de Git e Github. Mais detalhes sobre estes pull requests encontram-se nas seções específicas sobre as implementações das versões OO dos jogos Snake e Pacman. 6 Disponível em: https://github.com/IFRN/free-python-games/pull/4 5 Dísponível em: http://twich.tv/adorilson 4 Disponível em: https://github.com/grantjenks/free-python-games/tree/ca99e10313 3 Disponível em: https://github.com/BrenoNAlmeida/free-python-games
  16. 17 Figura 2 - Issue no repositório do Free Python

    Games 7.3 ESTUDO DO CÓDIGO-FONTE DOS JOGOS DO FREE PYTHON GAMES Este estudo se fez necessário para que pudéssemos ter conhecimento dos jogos existentes no Free Python Games. Ele foi feito inicialmente em duas etapas: a) leitura dos códigos fontes dos jogos para poder ter uma noção do funcionamento dos mesmos; b) resolução dos exercícios propostos no código-fonte de cada jogo, como exemplificado na Figura 3. Ao tentar fazer as atividades, notamos que seria necessário um aprofundamento no estudo, e estudar a biblioteca utilizada neles, que é a Turtle. Turtle é uma biblioteca Python que nos permite desenhar em uma tela formas e gráficos tanto de forma orientada a objetos quanto orientada a procedimentos. Mas se forem combinados comandos, formas e imagens complexas podem ser facilmente desenhadas e criadas, como na Figura 4. Cujo código necessário está na
  17. 18 Figura 5. Figura 3 - Exercícios propostos para o

    jogo Snake na versão estruturada Vemos que é um código de simples implementação, mas para que seja possível implementá-lo, é preciso ter conhecimento das funções da biblioteca Turtle, bastante utilizada nos jogos do Free Python Games (FPG). Para facilitar a implementação dos jogos, os autores do FPG criaram um módulo chamado utils, com o propósito de ser uma biblioteca de funções, ela faz uso da biblioteca Turtle para criar métodos que facilitam o uso do Turtle nos jogos. como por exemplo o método square(x, y, size, name), apresentado na Figura 6. Graças a essa função é possível desenhar um quadrado na posição x e y, de tamanho size e com a cor name, com apenas uma linha no jogo. Ao passo que sem esta função seria necessário uma quantidade de linhas bem maior. Figura 4 - Imagem feita usando Turtle.
  18. 19 Figura 5 - Código fonte da Figura 3. Figura

    6 - Código fonte do método square. Outro componente importante contido no módulo utils é a classe vector. Essa classe representa um vetor (geométrico) no espaço bi-dimensional, fornecendo operações básicas mas muito comuns à aritmética de vetores, como soma e comparação. Esses vetores são utilizados nos jogos para definir posições dos elementos, facilitando a movimentação deles. Um exemplo de método dessa classe é o método move, apresentado na Figura 7, e que faz uso do método especial __iadd__, apresentado na Figura 8. Figura 7 - Código fonte do método move( )
  19. 20 Figura 8 - Código fonte do método __iadd__ (

    ) Enquanto o método move pode ser utilizado para mover um vetor, alterando suas propriedades internas (posições x e y no plano), graças ao método __iadd__ é possível somar vetores de forma tão simples quanto somar valores escalares como o operador +, conforme apresentado na Figura 9. Figura 9 - Código exemplificando a soma de vetores com operador + Exemplos concretos de utilização dessa classe estão presentes nos jogos Snake e Pacman. A Figura 10 apresenta o código necessário para mover um objeto destes jogos. O objeto position é da classe vector, da mesma forma o parâmetro aim do método move. aim representa o sentido e intensidade em que um objeto deve se mover, assim quando somada a sua posição atual, teremos a nova posição do objeto. Figura 10 - Código utilizando o método move( )
  20. 21 7.4 SELECIONAR JOGOS QUE JÁ ESTEJAM NO FREE PYTHON

    GAMES PARA SEREM ADAPTADOS PARA O PARADIGMA ORIENTADO A OBJETOS Esta seleção foi feita depois dos estudos dos códigos fontes, analisamos quais jogos mais se encaixavam para implementação da versão orientada a objetos, discutimos em reunião que os jogos que seriam reescritos consistiria no Snake (Figura 11) e no Pacman (Figura 12) por serem jogos que poderiam ser facilmente relacionados a objetos e também por serem uns dos jogos mais famosos dentre os presentes na coleção. Figura 11 - Jogo Snake Figura 12 - Jogo Pacman 7.5 IMPLEMENTAÇÃO DO JOGO SNAKE COM O PARADIGMA ORIENTADO A OBJETOS Para a adaptação do jogo Snake, utilizamos a ferramenta Visual Studio Code, para escrever os códigos e a Draw.io para fazer o diagrama de classes. Após reescrita do jogo, foi feito o diagrama de classes, conforme apresentado na figura 13. Temos a classe Head que se refere a cabeça da cobra e a classe Snake ao corpo dela. A classe Food é uma comida que com base no valor da sua caloria (atributo cal) a cobra irá crescer. A classe GameSnake é o sistema principal onde métodos são chamados conforme o comportamento da cobra/jogador. Ao fazer uma análise vimos que as atividades originais do jogo Snake da sua
  21. 22 versão estruturada, já não se encaixavam mais tão bem,

    sendo assim foram desenvolvidas novas atividades que o aluno terá que resolver ao estudar o código do Snake na versão orientada a objetos, as atividades propostas foram: 1. Como você cria as classes SnakeFast ou SnakeSlow? 2. Como você faz um SnakeSmart, que muda a direção quando colide com as arestas? 3. Como você faria um novo tipo de alimento? Quando a cobra comê-los vai mais rápido ou diminui? 4. Como você cria um Ator que será a superclasse Head and Food? Figura 13 - Diagrama de classes do jogo Snake Para as atividades propostas, espera-se que o aluno desenvolva algo semelhante ao diagrama da Figura 14, nela estão destacadas em vermelho as
  22. 23 novas classes implementadas. Na resolução da atividade 1 foram

    criadas as classes SnakeFast e SnakeSlow onde ambas herdam a classe Snake, se diferenciando apenas no atributo de classe speed, para a SnakeFast basta o speed ser maior que 1 para notar a diferença na velocidade da cobra e para a SnakeSlow o atributo speed terá que ter um valor entre 0 e 0.9 para poder notar a cobra mais lenta. Para a solução da atividade 2, realizamos uma alteração no método is_colliding_with_border(), para que ao invés de a cobra morrer ao colidir com a parede, ela mude para uma direção possível, por exemplo, caso ela colida na borda da direita da tela, ela vire para a esquerda ou direita, com base no seu eixo, (essa escolha é feita de modo randômico para que haja mais fluidez no jogo e a cobra não precise ficar esperando um comando do jogador para essa ação). Na resolução da atividade 3, foram criadas as classes Mouse, Apple e BadFood. Todas elas herdam de Food. Mouse e Apple têm valores do atributo cal positivos e diferentes, fazendo com que a cobra cresça conforme ela coma cada. Já BadFood tem o valor no atributo cal negativo, fazendo com que a cobra diminua de tamanho ao comer comida desse tipo, na Figura 15 vemos o comportamento das cobras ao comer cada tipo. Podemos observar um dos tipos de comida da cobra que ao comê-la irá crescer com base no atributo cal da comida. Notasse que ela cresceu duas unidades após comer a comida marrom e em seguida surgiu outro tipo de comida no mapa, a verde, e ao comer a comida verde ela cresceu mais três unidades. Em seguida surgiu a comida vermelha que é a BadFood (Figura 16), que ao comê-la a Cobra diminui três unidades. Uma animação completa dessa sequência está disponível na plataforma Giphy7. Para a atividade 4, podemos ver a classe Actor, superclasse de Head e 7 https://media.giphy.com/media/SSAGKjgQDwV4l1lxej/giphy.gif
  23. 24 Food, nela estão contidos os métodos e atributos e

    que estão repetidos no código original (Figura 17). Ao final da adaptação do código fonte para o paradigma orientado a objetos, foi feito o envio do código fonte sem a resolução das atividades como contribuição para o repositório do Free Python Games no Github, através do mecanismo de pull request da plataforma, conforme apresentado na Figura 18. Figura 14 - Diagrama de classes do Jogo Snake com resolução possível
  24. 25 a b Figura 15 - Cobra antes (a) e

    depois de comer a comida do tipo Mouse e surgimento de Apple (b) a b Figura 16 - Cobra antes de comer a comida do tipo BadFood
  25. 26 Figura 17 - Classes Head e Food contendo métodos

    e atributos repetidos Figura 18 - Tela do Github com o pull request do jogo Snake OO
  26. 27 7.6 IMPLEMENTAÇÃO DO JOGO PACMAN COM O PARADIGMA ORIENTADO

    A OBJETOS Assim como no jogo do Snake, utilizamos o Visual Studio Code para escrita dos códigos e o Draw.io para construir os diagramas de classes. Após reescrita do jogo, foi criado o diagrama de classes, conforme apresentado na Figura 19. A classe Pacman refere-se ao próprio personagem principal do jogo, a classe Ghost são os inimigos do pacman e a classe GamePacman é o sistema principal, onde os métodos são chamados com base nas ações do jogador e interação dos elementos do jogo. As novas atividades propostas para o jogo Pacman na versão orientado a objetos foram as seguintes: 1. Mova a variável/atributo score para a classe Pacman. Este atributo deve ser incrementado por um novo método no código do Pacman. Altere draw_score de GamePacman, de acordo com as mudanças necessárias. 2. Crie um atributo de velocidade e faça as alterações necessárias para alterar a velocidade do Pacman de acordo com seu valor. 3. Crie uma subclasse de Ghost em que cada um deles tenha fantasmas com valores de velocidades diferentes (use o segundo exercício como exemplo). 4. Crie uma superclasse para Pacman e Ghost. 5. Crie diferentes tipos de alimentos. Para essas atividades propostas, espera-se que o aluno desenvolva algo semelhante ao diagrama da Figura 20, nela estão destacadas em vermelho as novas classes implementadas. Para a atividade 1, foi movido da classe GamePacman para a classe Pacman o atributo score. Assim, o próprio objeto pacman passa a manter o sua pontuação, e não mais como um atributo de GamePacman, o que permite que se tenha mais de um personagem pacman, cada um mantendo a sua pontuação.
  27. 28 Na atividade 2, foi adicionado na classe Actor o

    atributo de classe speed, visto que tanto no Pacman quanto em Ghost usariam o atributo speed para manipular sua velocidade e foram feitas as alterações necessários no método move para que os objetos se moverem conforme o valor do atributo speed. Figura 19 - Diagrama de classes do Jogo Pacman Para a atividade 3, foram geradas duas classes: FastGhost e SlowGhost. Elas herdam os atributos e métodos da classe Ghost com alteração no valor da atributo de classe speed, semelhante ao jogo do Snake basta speed ser maior que 1 para notar a diferença na velocidade do fantasma e para o fantasma ficar lento o
  28. 29 atributo speed terá que ter um valor entre 0

    e 0.9. A solução da atividade 4 é notada pela presença da classe Actor, superclasse de Pacman e de Ghost. Este exercício também está presente em Snake, discutido anteriormente. Para a atividade 5, foi criada a classe Food que detém o poder de atribuir 10 pontos a mais no score do pacman ao ser capturada, para que isso fosse possível, alterações no método eat de Pacman foram necessárias e também no check_collision de GamePacman para poder analisar colisão do objeto do tipo Pacman com um objeto Food. Na Figura 21 é possível notar o aparecimento do novo tipo de comida em amarelo no canto inferior esquerdo do mapa, sua posição é gerada de modo randômico, e ao ser capturada adiciona 5 pontos ao pacman. Uma animação mais completa do jogo Pacman está disponível na plataforma Giphy8. Ao final da adaptação do código fonte do jogo Pacman para o paradigma orientado a objetos, foi feito o envio do código fonte sem a resolução das atividades como contribuição para o repositório do Free Python Games no Github, através do mecanismo de pull request da plataforma, conforme Figura 22. 8 Disponível em: https://media.giphy.com/media/czVyBiUWpgcVFUN9uo/giphy.gif
  29. 31 Figura 21 - Pacman versão OO com novo tipo

    de comida Figura 22 - Tela do Github com o pull request do jogo Snake OO
  30. 32 8 CONSIDERAÇÕES FINAIS Diante dos resultados obtidos, a contribuição

    feita ao Free Python Games apresenta uma nova ferramenta para o ensino/aprendizagem de Python, agora, com versão orientada a objetos de alguns jogos, assim possibilitando a utilização dos jogos da coleção para aprender um conteúdo mais avançado que é a orientação a objetos. Embora sejam jogos simples, com Snake e Pacman será possível praticar os 4 pilares da programação orientada a objetos: herança, encapsulamento, composição e polimorfismo. Além de outros conceitos, como atributos de classes e de instâncias. Para a experiência de contribuição com um software livre que o projeto proporcionou, a metodologia aplicada mostrou-se eficiente, visto que os passos do processos foram mostrados com clareza e trilhados de forma eficaz. Após todo o desenvolvimento do projeto, foram concluídas as adaptações dos códigos fontes para a versão orientada a objetos dos jogos Snake e Pacman, com isso também a adaptação das atividades propostas nos jogos para um melhor aprendizado dos alunos. 8.1 TRABALHOS FUTUROS O grupo de pesquisa tem como intuito prosseguir com a adaptação de novos jogos para a versão orientada a objetos, visando assim, obter um amplo portfólio de jogos na versão orientada a objetos. Dessa forma professores e alunos terão a disposição mais um objeto de aprendizagem para o ensino/aprendizagem de programação orientada a objetos com Python. Outra linha de contribuição do grupo será na internalização e tradução da documentação do Free Python Games, além de melhorias no site.
  31. 33 REFERÊNCIAS Ana Bell, Eric Grimson, and John Guttag. 6.0001

    Introduction to Computer Science and Programming in Python. Fall 2016. Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. License: Creative Commons BY-NC-SA. Bosse, Yorah & Gerosa, Marco Aurelio. (2015). As Disciplinas de Introdução à Programação na USP: um Estudo Preliminar. 1389. 10.5753/cbie.wcbie.2015.1389. Chagas, Lucinéia Barbosa da Costa; Oliveira, Márcia Gonçalves; Lopes, Mônica Ferreira Silva. Desenvolvimento de Jogos para compreensão de Técnicas de Programação na Linguagem Python. In: Conhecimento em Destaque 2019. ISSN 2238-6548. FLÔRES. M. L. P.; TAROUCO. L. M. R. Diferentes tipos de objetos para dar suporte a aprendizagem. RENOTE - Revista Novas Tecnologias na Educação, V. 6 No 1, Julho, 2008. GOMES, T. C. S.: Melo, J. C. B.; Tedesco, P.C.A.R.(2016), ”Jogos Digitais no Ensino de Conceitos de Programação para Crianças”. In: V Congresso Brasileiro de informática na educação - Anais do XXVII Simpósio Brasileiro de Informática na Educação PYTHON. In: WIKIPÉDIA: a enciclopédia livre. Wikimedia, 2020. Disponível em: <https://pt.wikipedia.org/wiki/Python>. Acesso em: 02 ago. 2020. R. S. Rodrigues; L. A. M. Morais; S. Dantas; J. G. Lopes Filho; C. Isidro; P. Suárez. Ensino de Algoritmos e Linguagem de Programação no Nível Médio: Um Relato de Experiência. In: XXI Workshop sobre Educação em Computação, Maceió, Brasil, 2013 SILVA, Thiago Reis da et al. Ensino-aprendizagem de programação: uma revisão sistemática da literatura. Revista Brasileira de Informática na Educação, [S.l.], v. 23, n. 01, p. 182, abr. 2015. ISSN 2317-6121. Disponível em: <https://www.br-ie.org/pub/index.php/rbie/article/view/2838>. Acesso em: 02 ago. 2020. doi:http://dx.doi.org/10.5753/rbie.2015.23.01.182. VAN ROSSUM, G. (1999) “Computer Programming for Everybody”. Disponível em:
  32. 34 https://www.python.org/doc/essays/cp4e/ Acesso em: 2 ago. 2020. VENTURA, Felipe. Python

    e Java empatam em ranking de linguagens de programação. Tecnoblog, 2020. Disponível em: <https://tecnoblog.net/327488/python-java-empatam-ranking-linguagens-programaca o/>. Acesso em: 02 de ago. de 2020. WILEY, D. A. (2000). Connecting learning objects to instructional design theory: A definition, a metaphor, and a taxonomy. In D. A. Wiley (Ed.), The Instructional Use of Learning Objects: Online Version. Disponível em: http://reusability.org/read/chapters/wiley.doc Acesso em 22 jul. 2020. PYTHON PRO. Python Pro, c2021. Página Sobre o curso Python Birds. Disponível em: <https://www.python.pro.br/modulos/descricao/python-birds/>. Acesso em: 14 de abr. de 2021. PYTHON DOCUMENTATION. Turtle - Turtle graphics, c2021. Página Sobre a documentação do Turtle. Disponível em: <https://docs.python.org/3/library/turtle.html>. Acesso em: 15 de abr. de 2021.