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
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
Contribuidores
Abordagem
Instalar Python 3.
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:
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
- Atores são pontos no plano cartesiano.
- A velocidade dos pontos é pequena, de tal forma que a cada passo os atores se movam apenas para pontos vizinhos.
- 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.
- Se o jogo está em andamento, retorna status "EM_ANDAMENTO";
- Se o jogo acabou e não existem porcos ativos, retorna STATUS "VITORIA";
- 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:
- Calcular a posição de cada pássaro, verificando se ele colidiu com algum obstáculo, porco ou chão.
- Retornar instâncias da classe Ponto, informando x, y e caracter respectivo a cada ator.
Divirta-se!!!!
Powered by Python Pro
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:
https://github.com/estevaofon/angry-birds-python
Ele também colocou esse vídeo no Youtube.