X Tutup
Python Birds =========== Essa versão é a mais simples. Ela não contém replay nem reset, de forma que o jogo não pode retroceder. Para versão mais complexa, acesse a branch [diversao](https://github.com/pythonprobr/pythonbirds/tree/diversao) Projeto para Ensino de Programação Orientadas a Objetos em Python. A versão utilizada para desenvolvimento foi Python 3.4 Um vídeo fala mais que 1000 palavras: [Python Birds](https://www.youtube.com/watch?v=b899h0lNd7U&list=PLA05yVJtRWYTm0sIa6n56UpCjCsR5ekla) # Contribuidores * [Giovane Liberato](https://github.com/giovaneliberato) * [Guido Luz](https://github.com/GuidoBR) * [Michel Amaral](https://github.com/michelamaral) * [Renzo Nuccitelli](https://github.com/renzon) # Abordagem Instalar [Python 3](https://www.python.org/download/). Baixar o zip do projeto (botão Download Zip) Os testes se encontram dentro do pacote "testes" e servem para definir a dinâmica das classes. Para rodar todos testes, execute: python executor_de_testes.py Explicação detalhada sobre classes e métodos se encontram nos scripts atores.py e fase.py. ## Ordem de desenvolvimento A ordem preferida é começar pelos atores, seguindo a ordem dos testes presentes no script atores_testes.py. Depois passar para a fase_teste.py, onde é implementada uma fase. É possível emular um jogo que termina em vitória rodando: python fase_testes.py É possível jogar a fase rodando: python placa_grafica_tkinter.py Para jogar, utilize as setas para cima e para baixo. Para lançar, utilize a tecla enter ou espaço. Demonstração nos vídeos: [Python Birds](https://www.youtube.com/watch?v=b899h0lNd7U&list=PLA05yVJtRWYTm0sIa6n56UpCjCsR5ekla) ## script atores.py Contém todos atores do projeto. ## script fase.py Contém classes respectivas a fase e ponto do plano cartesiano ## script placa_grafica.py Contém lógica para rodar jogo e exibir no console. ## script placa_grafica_tkinter.py Contém lógica para rodar jogo em uma janela. # Simplificação do Jogo 1. Atores são pontos no plano cartesiano. 2. A velocidade dos pontos é pequena, de tal forma que a cada passo os atores se movam apenas para pontos vizinhos. 3. A colisão entre pontos ocorre quando eles estão em ponto vizinho, de acordo com valor de intervalo. A seguir é apresentada a especificação detalhada do jogo. ## Classe Ator Classe base para todos atores do jogo. ### Método calcular_posicao Método que recebe o tempo (float) como parâmetro e retorna uma tupla com 2 elementos, posição horizontal (x) como primeiro elemento e posição vertical (y) como segundo. ### Método colidir O método colidir executa a lógica de colisão. A colisão só ocorre com atores ativos e que estejam em pontos vizinhos. Ao colidir, os atores envolvidos devem ter seus status alterado para DESTRUIDO ## Classe Obstaculo Classe que representa obstáculos na fase e que podem ser destruídos por pássaros. Herda de ator. Seu caracter de representação é a letra "O", quando ATIVO. ### Status Um obstáculo ao ter seu status alterado para DESTRUIDO deve ter seu caracter de apresentação alterado para " " (vazio). Assim ele vai "sumir" da tela. ## Classe Porco Classe que representa porcos na fase e que podem ser destruídos por pássaros. Herda de ator. Seu caracter de representação é a o caracter "@". ### Status Um obstáculo ao ter seu status alterado para DESTRUIDO deve ter seu caracter de apresentação alterado para "+" (sinal de mais). Assim sua imagem é alterada para a de porco morto. ## Passaro Classe base de todos os passáros. Cada tipo possui uma velocidade de lançamento (v). No lançamento o jogador escolhe o ângulo (teta), em graus, no qual o passáro deve ser lançado. O lançamento respeita as regras de lançamento oblíquo com gravidade (GRAVIDADE) constante e igual a 10 m/s^2. ### Método lancar O método lançar recebe o ângulo, em graus, que será feito o lançamento. Ele deve ser convertido para radianos. Cada pássaro deve armazenar esse valor e o tempo de lançamento para cálculo de sua posíção. Lembrar que o tempo das fórmulas é delta_t = T_final - T_inicial. ### Método de colidir_com_chao Todo pássaro que colidir com o chão (y<=0) deve ser destruído. ### Método foi_lançado Esse método deve retornar verdadadeiro se o pássaro foi lançado (tempo de lançamento é None). Caso contrário deve retornar falso. ### Lançamento Se o pássaro ainda não foi lançado, o pássaro deve permanecer na posição inicial. Caso tenha sido lançado e seu status esteja ATIVO, sua posição deve ser calculada de acordo com o lançamento oblíquo. Nesse caso, delta_t vai ser igual ao tempo do jogo menos o tempo do lançamento. Caso contrário, ele deve retornar a posição onde colidiu. #### Método posicao_horizontal Fórmula X=X0+v\*cos(teta)\*delta_t. #### Método posicao_vertical Fórmula Y=Y0+v\*sen(teta)delta_t-(G\*delta_t^2)/2. ## Classe Passaro Vermelho Tipo de Pássaro que representa o pássaro vermelho. Possui velocidade de lançamento igual a 20 m/s. Seu caracter quanto ATIVO é "V". Quando DESTRUIDO é "v". ## Classe Passaro Amarelo Tipo de Pássaro que representa o pássaro amarelo. Possui velocidade de lançamento igual a 30 m/s. Seu caracter quanto DESTRUIDO é "a". ## Classe Fase Classe responsável por organizar atores e transformar os dados em pontos a serem representados na tela. ### Método adicionar_obstaculo Método que adiciona um ou mais obstáculos na fase. ### Método adicionar_porco Método que adiciona um ou mais porcos na fase. ### Método adicionar_passaro Método que adiciona um ou mais pássaros na fase. ### Método status Recebe o tempo como parâmetro e retorna status do jogo. 1. Se o jogo está em andamento, retorna status "EM_ANDAMENTO"; 2. Se o jogo acabou e não existem porcos ativos, retorna STATUS "VITORIA"; 3. Se o jogo acabou e existem porcos ativos, retorna status "DERROTA". ### Método lancar Recebe o ângulo e o tempo do lançamento. Deve delegar o lançamento ao primeiro pássaro ATIVO da lista de pássaros que ainda não foi lançado. ### Método calcular_pontos Método que executa a lógica do jogo a cada passo (tempo), retornando pontos a serem exibidos na tela. Ele deve: 1. Calcular a posição de cada pássaro, verificando se ele colidiu com algum obstáculo, porco ou chão. 2. Retornar instâncias da classe Ponto, informando x, y e caracter respectivo a cada ator. ### Divirta-se!!!! Powered by [Python Pro](http://adm.python.pro.br) # Observação Importante Esse projeto usa somente o interpretador padrão do Python. Para fazer jogos com mais interatividade, existe a biblioteca Pygame. Ela não foi utilizada por motivos de simplicidade, para evitar que o aluno iniciante tenha dificuldades na hora de instalar o projeto. Contudo o Estevão Fonseca fez um versão com essa biblioteca, confira o projeto: Ele também colocou esse [vídeo no Youtube](https://www.youtube.com/watch?v=B7G5JtCFepE).
X Tutup