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
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.
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:
Contém todos atores do projeto.
Contém classes respectivas a fase e ponto do plano cartesiano
Contém lógica para rodar jogo e exibir no console.
Contém lógica para rodar jogo em uma janela.
- 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 base para todos atores do jogo.
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.
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 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.
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 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 "@".
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.
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.
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.
Todo pássaro que colidir com o chão (y<=0) deve ser destruído.
Esse método deve retornar verdadadeiro se o pássaro foi lançado (tempo de lançamento é None). Caso contrário deve retornar falso.
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.
Fórmula X=X0+v*cos(teta)*delta_t.
Fórmula Y=Y0+v*sen(teta)delta_t-(G*delta_t^2)/2.
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".
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 responsável por organizar atores e transformar os dados em pontos a serem representados na tela.
Método que adiciona um ou mais obstáculos na fase.
Método que adiciona um ou mais porcos na fase.
Método que adiciona um ou mais pássaros na fase.
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".
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 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.
Powered by Python Pro
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.