self.x set_color(self.cor) pyglet.graphics.draw(6, pyglet.gl.GL_LINE_LOOP, ('v2f', (x, y, x, y - 8, x + 3, y - 2, x + 12, y - 2, x + 14, y, x, y))) def atualiza(self): self.x += self.velocidade if self.x > 265: self.escapou = True self.desativa() def colidiu(self, outro): if outro.colisao == TIRO: self.jogo.objetos.append(Explosao(self.jogo, self.x, self.y)) self.desativa()Nesta versao, o nome das propriedades ja foi ajustado. Nao utilizo mais altura_do_aviao que se tornou apenas a coordenada y. Na classe Aviao, adicionei a propriedade escapou para marcar os avioes que saem da tela sem terem sido destruidos, dos que sao atingidos por misseis. Mais tarde, esta informacao sera utilizada para contar pontos.Quando o aviao colide com um Tiro, um novo tipo de objeto, Explosao e adicionado ao jogo. Desta forma, teremos um efeito simples quando o aviao for atingido.Uma das vantagens de se trabalhar com objetos e a facilidade de cria-los. No caso, a explosao e apenas outro objeto adicionado ao jogo.class Explosao(ObjetoDoJogo): def __init__(self, jogo, x, y): super(Explosao, self).__init__(jogo, cor=0) self.estagio = 8 self.x = x self.y = y def desenha(self): dx = 4 * self.estagio #random.randint(1, 4) dy = random.randint(1, 4) * self.estagio dx2 = random.randint(1, 4) * self.estagio dy2 = random.randint(1, 4) * self.estagio y = self.y set_color(7) pyglet.graphics.draw(3, pyglet.gl.GL_TRIANGLES, ('v2f', (self.x, y, self.x - dx, y + dy, self.x + dx2, y + dy2))) set_color(8) pyglet.graphics.draw(3, pyglet.gl.GL_TRIANGLES, ('v2f', (self.x, y, self.x -dx/self.estagio , y + dx, self.x + dx2 * self.estagio, y + dy2))) def atualiza(self): self.estagio -= 0.4 if(self.estagio < 0): self.desativa()A ideia da explosao e que triangulos amarelos e vermelhos, de tamanhos aleatorios aparecam na tela.Como a explosao nao se move, a propriedade estagio foi adicionada para controlar seu tempo de vida.No caso, a cada frame, subtrairemos 0.4 de estagio e quando este for negativo, o objeto sera retirado do jogo.A classe Tiro foi tambem melhorada:class Tiro(ObjetoDoJogo): def __init__(self, jogo, posicao): super(Tiro, self).__init__(jogo, cor=3) self.y = 170 self.x = (posicao + 1) * 70 self.velocidade = 5 * RATIO self.colisao = 2 self.altura = 5 self.largura = 2 self.errou = False def desenha(self): super().desenha() set_color(self.cor) y = self.y + self.altura pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2f', (self.x, y, self.x, y - 4))) v = 4 a = random.randint(3, 4) set_color(7) pyglet.graphics.draw(3, pyglet.gl.GL_TRIANGLES, ('v2f', (self.x, y, self.x - 1, y + v, self.x + 1, y + v))) set_color(8) pyglet.graphics.draw(3, pyglet.gl.GL_TRIANGLES, ('v2f', (self.x, y, self.x - 0.5, y + a, self.x + 0.5, y + a))) def atualiza(self): self.y -= self.velocidade if self.y < 0: self.errou = True self.desativa() def colidiu(self, outro): if outro.colisao == AVIAO: self.desativa()O Tiro agora tem um foguete, o efeito e interessante, embora simples.Quando o tiro sai da tela sem atingir um aviao, este e considerado um erro e o jogador e penalizado.As bases sao tambem desenhadas como objetos do jogo. Nesta versao eu mudei o desenho.class Base(ObjetoDoJogo): def __init__(self, jogo, posicao): super(Base, self).__init__(jogo, cor=3) self.y = 175 self.x = (posicao + 1) * 70 def desenha(self): super().desenha() set_color(self.cor) pyglet.graphics.draw(5, pyglet.gl.GL_LINE_STRIP, ('v2f', (self.x - 5, self.y + 5, self.x - 3, self.y + 2, self.x, self.y, self.x + 3, self.y + 2,