self.x + 5, self.y + 5, )))A classe do jogo em si foi simplificada:class Game: def __init__(self, parent): self.cor = CORES self.window = parent self.tiros_disparados = 0 # tiros ja disparados self.estado = "jogando" self.pressionado = False self.label = None self.objetos = [Aviao(self)] self.objetos.extend([Base(self, base) for base in range(0, 3)]) self.pontos = 0 self.placar = pyglet.text.Label("Pontos: 0", font_name="Times New Roman", font_size=16, x=80, y=-185 * 4, anchor_x='center', anchor_y='center')Agora temos um contador de pontos e um placar. Um objeto da classe Aviao e as tres bases sao adicionadas ao jogo inicial.def desativa(self, objeto): self.objetos.remove(objeto) if objeto.colisao == AVIAO: if objeto.escapou: self.pontos -= 3 else: self.pontos += 5 self.objetos.append(Aviao(self)) elif objeto.colisao == TIRO: if objeto.errou: self.pontos -= 1A desativacao de um objeto e a retirada deste da lista de objetos do jogo.Quando e um aviao, verifica se o aviao escapou da tela sem ter sido atingido.Se escapou, o jogador perde 3 pontos. Se foi destruido, o jogador ganha 5 pontos.A cada tiro disparado que sai da tela sem atingir um aviao, o jogador perde 1 ponto.Agora que temos o placar a mostrar, precisamos modificar o metodo mostra_mensagem.Este deve exibir o placar sempre: def mostra_mensagem(self): glPushMatrix() glScalef(0.25, -0.25, 0.25) if self.label: self.label.draw() self.placar.text = "Pontos: {}".format(self.pontos) self.placar.draw() glPopMatrix()O glPushMatrix e glPopMatrix foram utilizados para corrigir o desenho do texto.Como estamos utilizando uma escala 4 com inversao das coordenadas do eixo Y, o glScaleffoi utilizado com 0.25 (que na multiplicacao e o mesmo que 1/4 ou que dividir por 4) e-0.25 no eixo Y, que divide por 4 e inverte o sinal.O glPushMatrix e utilizado para salvar a matriz atual na pilha, desta forma o glScalefsera utilizado apenas ate o glPopMatrix que restaura os parametros anteriores.O metodo atualiza foi simplificado: def atualiza(self): self.jogue() if self.estado != "jogando": if self.pressionado: pyglet.app.event_loop.exit() self.mostra_mensagem()O metodo jogue sempre e chamado. Desta forma podemos ter o desenho do jogo, mesmo quando exibimos uma mensagem de fim por exemplo. Nesta versao, nao ha mudanca de estado, pois eu modifiquei o jogo para gerar outro aviao sempre que um for destruido ou sumir, nao tendo fim.E o metodo jogue tambem simplificado: def jogue(self): for objeto in self.objetos: objeto.desenha() self.processa_tiros() if self.estado == "jogando": for objeto in self.objetos: objeto.atualiza() if self.pressionado: self.objetos.append(Tiro(self, self.tiros_disparados % 3)) self.tiros_disparados += 1 self.pressionado = FalseEle apenas desenha todos os objetos da lista e chama processa_tiros que testa colisoes.Se ainda estivermos jogando, chama a atualizacao de todos os objetos da lista e se algo foi pressionado, gera um tiro. Para termos varios tiros, a base que o dispara e calculada pelo modulo do numero do tiro e o numero de bases.def processa_tiros(self): tiros = [objeto for objeto in self.objetos if objeto.colisao == TIRO] avioes = [objeto for objeto in self.objetos if objeto.colisao == AVIAO] for aviao in avioes: for tiro in tiros: aviao.colide(tiro)Aqui uma simplificacao, onde abuso um pouco do computador :-DUtilizando duas "list comprehensions", eu filtro a lista de objetos, procurando avioes e tiros.Desta forma, a verificacao de colisao se torna mais simples, pois basta verificar se o aviao colidiu com um dos tiros.O jogo principal pouco mudou, salvo