Fazendinha CIn é um projeto feito para aplicar os conceitos e conteúdos vistos durante a disciplina de Programação 1, do Centro de Informática(CIn) da Universidade Federal de Pernambuco(UFPE).
Nesse repositório, é possível encontrar os códigos desenvolvidos ao decorrer do processo e também informações relevantes sobre ele, como a organização dos arquivos, divisão de tarefas, tecnologias utilizadas, etc.
Essas foram as principais tecnologias utilizadas no desenvolvimento do projeto:
Ferramenta | Descrição | Justificativa para o uso |
---|---|---|
Python |
Linguagem de programação | É uma linguagem legível, de fácil manutenção e que possibilita a reutilização de códigos. Além disso, roda em diferentes sistemas operacionais e possui diversas bibliotecas. |
Pygame |
Biblioteca de jogos baseada em Python | É uma biblioteca que nos permite, por meio do Python, criar jogos, já que fornece métodos prontos que facilitam o desenvolvimento. Assim, é possível renderizar imagens, definir larguras e comprimentos para o display, controlar o tempo, etc. |
Git |
Software de controle de versões | É um software que nos permite salvar e controlar versões desenvolvidas do nosso projeto. Ele possibilita a criação de espaços(branchs) de atuação para cada funcionalidade ou membro diferente da equipe, o que permite uma maior agilidade. |
Esses foram os principais conceitos vistos na disciplina de Programação 1 e aplicados no projeto:
Conceito | Local onde foi utilizado |
---|---|
Programação Orientada a Objetos |
A maior parte dos arquivos do projeto possuem classes, as quais representam objetos do mundo real e que possibilitam a aplicação de hierarquias, bem como a reutilização de códigos. Um exemplo disso é a classe GameObject, que representa um objeto gráfico genérico do jogo e que, por isso, outros objetos, como o regador(WateringCan), derivam dela. |
Laços de Repetição |
Um exemplo de arquivo em que laços de repetição são utilizados, mais especificamente o while, é o arquivo Main. Nesse arquivo, que é o arquivo principal do projeto, enquanto o projeto estiver rodando, o display é atualizado seguindo uma largura e uma altura. |
Estruturas Condicionais |
As estruturas condicionais também foram utilizadas em diversos locais do projeto. Um exemplo de arquivo onde isso acontece é o plantation, arquivo que contém a classe da plantação, na qual a evolução das plantas e suas respectivas imagens são controladas graças às condicionais. |
Listas e Dicionários |
Um dos arquivos que utiliza listas e dicionários é o relatório para o usuário(report). Nele, conseguimos armazenar quantas plantas(apresentadas no dicionário) o usuário coletou e, consequentimente, identificar se ele atingiu a meta daquele level. |
Funções e métodos |
Assim como o conceito de POO, as funções também foram utilizadas na maioria dos arquivos. Um dos arquivos em que a utilização de funções é mais recorrente é o arquivo farmer, que representa o fazendeiro e player do jogo. Diante disso, as ações dele, de andar, arar a terra, colher planta, etc., são representadas por funções. |
- Instale o Python a partir da versão 3.6, seguindo a documentação oficial
- Instale o Pygame, seguindo a documentação oficial
- Clone o projeto em sua máquina, seguindo essas instruções
- Execute, utilizando linha de comandos, o arquivo main.py do projeto-programacao1
- Comece a jogar com os comandos:
- Seta para baixo e para cima e enter para manipular o menu
- Use cliques do mouse para mover o seu player
- Colha as plantas movendo o player por cima delas
- Pressione o número do slot da semente (2, 3, 4, 5, 6, 7, 8) ou do regador(1) para utilizá-los no plantio
- Pressione o botão direito do mouse para plantar uma semente ou para regar
📁 projeto-programacao1
|
|- 📁 MainMenu
| |- 📄 game.py
| |- 📄 menu.py
|
|- 📁 assets
| |- 📁 Sounds
| |- 📁 sprites
| |- 📄 Kenney Blocks.ttf
| |- 📄 LogoMenu-removebg-preview (1).png
| |- 📄 TELAA.png
| |- 📄 fonte.ttf
| |- 📄 logo.png
| |- 📄 telaredd.png
|
|- 📁 data
| |- 📁 levels
| |- 📄 levels.json
| |- 📄 plants.json
|
| 📄 .gitignore
| 📄 Events.py
| 📄 LICENSE
| 📄 NodeState.py
| 📄 README.md
| 📄 datamanager.py
| 📄 farmer.py
| 📄 gamemanager.py
| 📄 gameobject.py
| 📄 hud.py
| 📄 inventary.py
| 📄 item.py
| 📄 main.py
| 📄 mouse.py
| 📄 pathfinding.py
| 📄 place.py
| 📄 plantation.py
| 📄 report.py
| 📄 soundEffects.py
| 📄 test.py
| 📄 tilemap.py
| 📄 tilemapEditor.py
| 📄 vector2.py
| 📄 waterWell.py
| 📄 wateringCan.py
|
Descrição dos arquivos:
MainMenu:
Pasta que contém objetos, com seus atributos e métodos, do menu do jogoassets:
Pasta mídias(sons, imagens, fontes, logo, etc.) do jogodata:
Pasta que contém arquivos em json e dados(como de levels e estados das plantas) utilizados no jogo.gitignore:
Arquivo que permite ignorar alguns arquivos, como de cache, etc., durante o versionamentoLICENSE:
Arquivo que contém a licença do projetoREADME.md:
Arquivo que contém descrições e informações relevantes do projeto em markdownfarmer.py:
Arquivo que contém os métodos e atributos do objeto fazendeiro (player)hud.py:
Arquivo que contém a interface do relatório, pontuando quantas plantas foram colhidas, para o playerinventary.py:
Arquivo que contém os objetos coletados pelo usuário durante o jogoitem.py:
Arquivo que representa itens do jogo, como as sementes e as plantasmain.py:
Arquivo principal, que contém a intância de todos objetos utilizados no jogo, e que deve ser executado para jogarmouse.py:
Arquivo que identifica o uso do mouse no gamepathfinding.py:
Arquivo em que há a identificação de caminhos pelos quais o player deve seguirplace.py:
Arquivo que contém o objeto de lugar, uma classe genérica da qual outras classes que representam lugares no jogo vão derivar (exemplo: poço)plantation.py:
Arquivo que contém os métodos e os atributos da plantaçãoreport.py:
Arquivo que a classe que recebe informacões sobre os objetos coletados e manipulados pelo playersoundEffects.py:
Arquivo que contém manipulação de sons do jogotest.py:
Arquivo que serve para rodar testes durante o desenvolvimentotilemap.py:
Arquivo que manipula imagens, interfaces gráficas e cenários do jogowaterWell.py:
Arquivo que contém a classe do espaço poço, seus atributos e métodoswateringCan.py:
Arquivo que contém a classe do objeto regador, seus atributos e métodos
Ao decorrer da idealização e do desenvolvimento do projeto, algumas dificuldades foram enfrentadas, mas, a partir disso, algumas lições foram aprendidas, conforme os tópicos a seguir:
Maior erro enfrentado e como lidamos com ele:
Estabelecemos muitas features para o projeto, mas não priorizamos e nem levamos em consideração os requisitos básicos propostos pelos orientadores. Nesse contexto, com um pouco menos de tempo para o desenvolvimento, percebemos isso e nos reunimos para mudar o escopo, cumprindo primordialmente os requistos básicos e deixando outras features em stand by. Dessa forma, foi possível garantir o básico e, somente assim, partir para o mais complexo.Maior desafio enfrentado e como lidamos com ele:
A maior parte da equipe nunca tinha feito interfaces 2D utilizando Python. Diante disso, concordamos em, individualmente, antes de desenvolver o projeto, fazer um pequeno jogo, similar ao jogo Flappy Bird, a fim de que todos passassem a ter essa noção básica de como criar tais interfaces. A partir daí, tornou-se um pouco mais simples o desenvolvimento dos códigos ao longo do projeto.Lições aprendidas durante o projeto:
Dentre tantos conceitos técnicos estudados e aplicados, também foi possível aprender sobre a necessidade de priorizar tarefas, de respeitar os pré-requisitos para o desenvolvimento e de enxergar a importância da organização e do planejamento antes do "mão na massa". Além disso, vimos o quanto o trabalho em equipe e o apoio mútuo são fundamentais para enfrentar dificuldades e desafios que surgem ao longo de qualquer projeto de desenvolvimento.
O gerencimento de atividades foi feito utilizando a ferramenta Trello. De maneira geral, a execução de atividades se deu da seguinte forma:
Demetriu Gabriel:
class Plantation(plantação), class Inventary(Inventário)Geovanna Domingos:
Auxílio com git e github, class WateringCan(Regador), class WaterWell(Poço), class Report(relatório para o usuário) e README.mdGiovanna Machado:
MenuJosé Luiz:
SoundEffectsLuana Brito:
Pathfinding e Hud report (Interface do relatório para usuário, pontuando objetos coletados)Lucas Campos:
Auxílio com Python e Pygame, Farmer(fazendeiro player) TileMap(imagens, interfaces gráficas e cenários do jogo), criação dos arquivos e classes mais gerais(test, main, gamemanager, gameobject, mouse, vector2, place e item)
Esse é o time de alunos, da graduação em Sistemas de Informações, responsável pela idealização e desenvolvimento do projeto:
Geovanna Domingos |
Luana Brito |
José Luiz |
---|---|---|
Lucas Campos |
Demetriu Gabriel |
Giovanna Machado |
Esse projeto é licenciado pela GPLv3.