def teste_status(self): fase = Fase() porcos = [Porco(1, 1) for i in range(2)] passaros = [PassaroAmarelo(1, 1) for i in range(2)] fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) self.assertEqual(EM_ANDAMENTO, fase.status()) for passaro, porco in zip(passaros, porcos): passaro.colidir(porco, 3) self.assertEqual(VITORIA, fase.status(), 'Sem porcos ativos o jogo deveria terminar com vitória') fase.adicionar_obstaculo(Obstaculo()) self.assertEqual(VITORIA, fase.status(), 'Obstáculo não interfere para definir vitória') porco = Porco() fase.adicionar_porco(porco) self.assertEqual(DERROTA, fase.status(), 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar em derrota') fase.adicionar_passaro(PassaroAmarelo()) self.assertEqual(EM_ANDAMENTO, fase.status(), 'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar') porco.colidir(porco, 3) self.assertEqual(VITORIA, fase.status(), 'Sem porco ativo, o jogo deveria acabar com vitória')
def teste_acabou_com_porcos_e_passaros(self): fase = Fase() porcos = [Porco(1, 1) for i in range(2)] # criando 2 porcos passaros = [PassaroAmarelo(1, 1) for i in range(2)] # criando 2 pássaros fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) self.assertEqual(EM_ANDAMENTO, fase.status) # colidindo cada passaro com um porco no tempo 3 for passaro, porco in zip(passaros, porcos): passaro.colidir(porco, 3) self.assertEqual(VITORIA, fase.status) fase.adicionar_obstaculo(Obstaculo()) self.assertEqual(VITORIA, fase.status, 'Obstáculo não interfere no fim do jogo') fase.adicionar_porco(Porco()) self.assertEqual( DERROTA, fase.status, 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar') fase.adicionar_passaro(PassaroAmarelo()) self.assertEqual( EM_ANDAMENTO, fase.status, 'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar' )
def teste_acabou_com_porcos_e_passaros(self): fase = Fase() porcos = [Porco(1, 1) for i in range(2)] # criando 2 porcos passaros = [PassaroAmarelo(1, 1) for i in range(2)] # criando 2 pássaros fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) self.assertFalse(fase.acabou(0)) self.assertFalse(fase.acabou(2.9)) self.assertFalse(fase.acabou(3)) # colidingo cada passaro com um porco no tempo 3 for passaro, porco in zip(passaros, porcos): passaro.colidir(porco, 3) self.assertFalse(fase.acabou(0)) self.assertFalse(fase.acabou(2.9)) self.assertTrue(fase.acabou(3)) fase.adicionar_obstaculo(Obstaculo()) self.assertTrue(fase.acabou(3), 'Obstáculo não interfere no fim do jogo') fase.adicionar_porco(Porco()) self.assertTrue(fase.acabou(3), 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar') fase.adicionar_passaro(PassaroAmarelo()) self.assertFalse(fase.acabou(3), 'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar')
def teste_status(self): fase = Fase() porcos = [Porco(1, 1) for i in range(2)] passaros = [PassaroAmarelo(1, 1) for i in range(2)] fase.adicionar_porco(*porcos) fase.adicionar_passaro(*passaros) self.assertEqual('Jogo em andamento.', fase.status(0)) self.assertEqual('Jogo em andamento.', fase.status(2.9)) self.assertEqual('Jogo em andamento.', fase.status(3)) for passaro, porco in zip(passaros, porcos): passaro.colidir(porco, 3) self.assertEqual('Jogo em andamento.', fase.status(0)) self.assertEqual('Jogo em andamento.', fase.status(2.9)) self.assertEqual('Jogo em encerrado. Você ganhou!', fase.status(3), 'Sem porcos ativos o jogo deveria terminar com vitória') fase.adicionar_obstaculo(Obstaculo()) self.assertEqual('Jogo em encerrado. Você ganhou!', fase.status(3), 'Obstáculo não interfere para definir vitória') porco = Porco() fase.adicionar_porco(porco) self.assertEqual('Jogo em encerrado. Você perdeu!', fase.status(3), 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar em derrota') fase.adicionar_passaro(PassaroAmarelo()) self.assertEqual('Jogo em andamento.', fase.status(3), 'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar') porco.colidir(porco, 3) self.assertEqual('Jogo em encerrado. Você ganhou!', fase.status(3), 'Sem porco ativo, o jogo deveria acabar com vitória')
def teste_adicionar_porco(self): fase = Fase() self.assertListEqual([], fase._porcos) porco = Porco() fase.adicionar_porco(porco) self.assertListEqual([porco], fase._porcos) porco1, porco2 = Porco(), Porco() fase.adicionar_porco(porco1, porco2) self.assertListEqual([porco, porco1, porco2], fase._porcos)
def teste_intervalo_de_colisao_nao_padrao(self): ''' Método que testa se o intervalo de colisão da Fase é repassado aos atores. valor testado: 31 ''' fase = Fase(30) passaro = PassaroAmarelo(1, 1) fase.adicionar_passaro(passaro) porco = Porco(31, 31) fase.adicionar_porco(porco) fase.calcular_pontos(0) self.assertEqual(DESTRUIDO, passaro.status(0)) self.assertEqual(DESTRUIDO, porco.status(0))
def criar_fase_exemplo(multiplicador=1): fase_exemplo = Fase(1 if multiplicador == 1 else 32) passaros = [PassaroVermelho(3 * multiplicador, 3 * multiplicador), PassaroAmarelo(3 * multiplicador, 3 * multiplicador), PassaroAmarelo(3 * multiplicador, 3 * multiplicador)] porcos = [Porco(78 * multiplicador, multiplicador), Porco(70 * multiplicador, multiplicador)] obstaculos = [Obstaculo(31 * multiplicador, 10 * multiplicador)] fase_exemplo.adicionar_passaro(*passaros) fase_exemplo.adicionar_porco(*porcos) fase_exemplo.adicionar_obstaculo(*obstaculos) return fase_exemplo
def criar_fase_exemplo(): fase_exemplo = Fase() passaros = [PassaroVermelho(3, 3), PassaroAmarelo(3, 3), PassaroAmarelo(3, 3)] porcos = [Porco(78, 1), Porco(70, 1)] obstaculos = [Obstaculo(31, 10)] fase_exemplo.adicionar_passaro(*passaros) fase_exemplo.adicionar_porco(*porcos) fase_exemplo.adicionar_obstaculo(*obstaculos) fase_exemplo.lancar(45, 1) fase_exemplo.lancar(63, 3) fase_exemplo.lancar(23, 4) for i in range(86): fase_exemplo.calcular_pontos(i / 10) return fase_exemplo
def teste_colisao(self): passaro_amarelo = PassaroAmarelo(1, 1) passaro_amarelo.lancar( 45, 2) # passaro lancado a 45 graus no tempo 2 segundos porco = Porco(4, 4) x_calculado, y_calculado = passaro_amarelo.calcular_posicao(2.12) self.assertEqual(4, x_calculado) self.assertEqual(3, y_calculado) passaro_amarelo.colidir(porco, 2.12) self.assertEqual(DESTRUIDO, passaro_amarelo.status(2.12)) # Deve ficar parado onde colidiu para qualquer tempo maior ou igual que o de colisão x_calculado, y_calculado = passaro_amarelo.calcular_posicao(2.12) self.assertEqual(4, x_calculado) self.assertEqual(3, y_calculado) x_calculado, y_calculado = passaro_amarelo.calcular_posicao(1000) self.assertEqual(4, x_calculado) self.assertEqual(3, y_calculado)
def teste_colisao(self): passaro_vermelho = PassaroVermelho(1, 1) passaro_vermelho.lancar( 45, 2) # passaro lancado a 45 graus no tempo 2 segundos porco = Porco(14, 10) x_calculado, y_calculado = passaro_vermelho.calcular_posicao(2.89) self.assertEqual(14, x_calculado) self.assertEqual(10, y_calculado) passaro_vermelho.colidir(porco, 2.89) self.assertEqual(DESTRUIDO, passaro_vermelho.status(2.89)) # Deve ficar parado onde colidiu para qualquer tempo maior ou igual que o de colisão x_calculado, y_calculado = passaro_vermelho.calcular_posicao(2.89) self.assertEqual(14, x_calculado) self.assertEqual(10, y_calculado) x_calculado, y_calculado = passaro_vermelho.calcular_posicao(4) self.assertEqual(14, x_calculado) self.assertEqual(10, y_calculado)
from random import randint if __name__ == '__main__': fase = Fase(intervalo_de_colisao=32) # Adicionar Pássaros Amarelos for i in range(80): fase.adicionar_passaro(PassaroAmarelo(30, 30)) # Obstaculos theta = 270 h = 12 k = 7 step = 32 r = 50 while theta < 480: x = 600 + (h + r * math.cos(theta)) y = (k + r * math.sin(theta)) fase.adicionar_obstaculo(Obstaculo(x, y)) theta += 32 # Porcos for i in range(30, 300, 32): x = randint(590, 631) y = randint(0, 21) fase.adicionar_porco(Porco(x, y)) rodar_fase(fase)
tela.after(passo, _animar) def rodar_fase(fase): root.title("Python Birds") root.geometry("800x600") root.resizable(0, 0) stage = Canvas(root, width=800, height=ALTURA_DA_TELA) multiplicador = 10 PassaroAmarelo.velocidade_escalar *= multiplicador PassaroVermelho.velocidade_escalar *= multiplicador atores.GRAVIDADE = 100 animar(root, stage, fase) if __name__ == '__main__': fase = Fase(intervalo_de_colisao=32) passaros = [ PassaroVermelho(30, 30), PassaroAmarelo(30, 30), PassaroAmarelo(30, 30) ] porcos = [Porco(750, 1), Porco(700, 1)] obstaculos = [Obstaculo(310, 100)] fase.adicionar_obstaculo(*obstaculos) fase.adicionar_passaro(*passaros) fase.adicionar_porco(*porcos) rodar_fase(fase)
from atores import PassaroAmarelo, PassaroVermelho, Obstaculo, Porco from fase import Fase from placa_grafica_tkinter import rodar_fase if __name__ == '__main__': fase = Fase(intervalo_de_colisao=10) deltax_gambi=80 # Adicionar Pássaros Amarelos for i in range(100): fase.adicionar_passaro(PassaroAmarelo(30, 30)) # linhas verticais for i in range(30, 300, 32): fase.adicionar_porco(Porco(700-deltax_gambi, i)) fase.adicionar_porco(Porco(200-deltax_gambi, i)) # linhas horizontais for i in range(240, 680, 32): fase.adicionar_porco(Porco(i-deltax_gambi, 30)) fase.adicionar_porco(Porco(i-deltax_gambi, 286)) x0 = 210-deltax_gambi # losango meio = 160 n = 9 delta_x = 28 delta_y = 12 for i in range(1, n): fase.adicionar_porco(Porco(x0 + delta_x * i, meio + delta_y * i))
# -*- coding: utf-8 -*- from os import path import sys project_dir = path.dirname(__file__) project_dir = path.join('..') sys.path.append(project_dir) from atores import PassaroAmarelo, PassaroVermelho, Obstaculo, Porco from fase import Fase from placa_grafica_tkinter import rodar_fase if __name__ == '__main__': fase = Fase(intervalo_de_colisao=32) # Adicionar Pássaros Vermelhos for i in range(5): fase.adicionar_passaro(PassaroVermelho(30, 30)) # Adicionar Pássaros Amarelos for i in range(30): fase.adicionar_passaro(PassaroAmarelo(30, 30)) # Obstaculos for i in range(30, 480, 32): fase.adicionar_obstaculo(Obstaculo(300, i)) # Porcos for i in range(30, 300, 32): fase.adicionar_porco(Porco(600, i)) rodar_fase(fase)
def teste_status(self): porco = Porco() self.assert_ator_caracteres(porco, '@', '+')
def teste_status(self): porco = Porco() self.assertEqual('@', porco.caracter()) outro_ator_na_mesma_posicao = Ator() porco.colidir(outro_ator_na_mesma_posicao) self.assertEqual('+', porco.caracter())
# -*- coding: utf-8 -*- from atores import PassaroVermelho, PassaroAmarelo, Porco, Obstaculo from fase import Fase import placa_grafica fase_exemplo = Fase() passaros = [PassaroVermelho(3, 3), PassaroAmarelo(3, 3), PassaroAmarelo(3, 3)] porcos = [Porco(78, 1), Porco(70, 1)] obstaculos = [Obstaculo(31, 10)] fase_exemplo.adicionar_passaro(*passaros) fase_exemplo.adicionar_porco(*porcos) fase_exemplo.adicionar_obstaculo(*obstaculos) # Solução para ganhar # fase_exemplo.lancar(45, 1) # fase_exemplo.lancar(63, 3) # fase_exemplo.lancar(23, 4) if __name__ == '__main__': placa_grafica.animar(fase_exemplo)