def update(self): self.delta = self.currentFrame - self.lastFrame pygame.display.flip() self.lastFrame = self.get_time() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glViewport(0, 0, self.surface.get_width(), self.surface.get_height())
def update(self): # init render glClearColor(*self.clear_color) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # in render for renderer in self.renderers: if not renderer.is_initialized: renderer.initialize() renderer.is_initialized = True renderer.on_render() self.draw_array(renderer.vao) # fini render pass # import glfw pass # glfw.swap_buffers(G.appm.window_handle)
def paintGL(self): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_MODELVIEW) glPushMatrix() gluLookAt(0.0, 2.5, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) glRotatef(self.angle, 0.0, 1.0, 0.0) glBegin(GL_TRIANGLES) glColor3f(1.0, 1.0, 0.0) glVertex3f(0.0, 1.0, 0.0) glVertex3f(-1.0, -1.0, 0.0) glVertex3f(1.0, -1.0, 0.0) glEnd() glPopMatrix() glFlush()
def show(self, clear_color=(.2, .3, .3, 1), clear=gl.GL_COLOR_BUFFER_BIT): """ Run entering a blocking main loop """ start_time = time.time() current_time = start_time prev_time = start_time frame_time = 0 while not self.is_closing: current_time, prev_time = time.time(), current_time frame_time = max(current_time - prev_time, 1 / 1000) glClear(clear) glClearColor(*clear_color) self.on_input(self.window) self.on_draw(current_time - start_time, frame_time) self.swap_buffers() duration = time.time() - start_time self.destroy() print("Duration: {0:.2f}s @ {1:.2f} FPS".format( duration, self.frames / duration))
def paintGL(self): # Checa se a musica de fundo acabou e reinicia self.check_end_backm() self.update() # Se o player morreu, entao o jogo acaba if self.myNave.dead: self.started = False glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() self.update_time() self.spawn_planets() self.spawn_stars() glDisable(GL_DEPTH_TEST) # Desenha os ornamentos ( "Flores" ) # e retira os objetos "mortos" retornando eles para a fila for obj in self.ornaments: if not obj == None: if obj.dead: if isinstance(obj, Planeta): self.planets_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Star): self.ornaments.remove(obj) elif isinstance(obj, Explode): self.explosion_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Propellant): self.propellant_queue.push(obj) self.ornaments.remove(obj) obj.draw() obj.act() obj.check_dead() # Verifica se o jogo foi iniciado if not self.started: return glEnable(GL_DEPTH_TEST) # Desenha a cena # e retira os objetos mortos retornando ele para a fila # e instancia uma explosao no lugar for obj in self.in_scene: if not obj == None: if obj.dead: if isinstance(obj, Enemy): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 6, "enemy") self.in_scene.append(new_explosion) self.enemy_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Asteroide): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 5, "enemy") self.in_scene.append(new_explosion) self.asteroid_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Shoot): self.bullets_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Explode): obj.dead = False self.explosion_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Power_up): self.power_queue.push(obj) self.in_scene.remove(obj) if isinstance(obj, Nave): if obj.shooting: self.create_shoot(obj.move_x + obj.position_x) obj.draw() obj.act() obj.check_dead() # Testa as colisoes e aplica os efeitos (ganhar pontos, ou perder vida) for obj_A in self.in_scene: if isinstance(obj_A, Asteroide): for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): # ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True if not self.hack: obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Enemy): obj_A.elapsed_shoot_time += time() if obj_A.elapsed_shoot_time >= SHOOT_TIME_ENEMY: pos = [obj_A.get_x()[0] + 5, obj_A.get_y()[0] + 6, 0] player = [ self.myNave.get_x()[0] + 5, self.myNave.get_y()[0] - 8, 0 ] dir = [ player[0] - pos[0], player[1] - pos[1], player[2] - pos[2] ] angle_R = math.atan2(dir[1], pos[0]) angle = math.degrees(angle_R) if obj_A.nave_type == 0: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_azul, angle) elif obj_A.nave_type == 1: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_amarelo, angle) elif obj_A.nave_type == 2: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_preto, angle) obj_A.elapsed_shoot_time = 0 for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): # ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True if self.hack: obj_B.dead = False else: obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Shoot): if obj_A.is_enemy: for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): # ui.down_life() obj_A.dead = True elif isinstance(obj_A, Nave): if self.speed: obj_A.speed = 3 else: obj_A.speed = 0 for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Power_up) and self.collide( obj_B, obj_A): obj_B.dead = True self.sound_power.play() if obj_B.skin == 0: ui.up_life() elif obj_B.skin == 1: self.hack = True self.elapsed_time_power_shoot = 0 elif obj_B.skin == 2: self.speed = True self.elapsed_time_power_speed = 0 self.spawn_asteroide() self.spawn_inimigos() self.spawn_powers() self.update()
def paintGL(self): # Checa se a musica de fundo acabou e reinicia self.check_end_backm() self.update() # Se o player morreu, entao o jogo acaba if self.myNave.dead: self.started = False glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() self.update_time() self.spawn_planets() # Desenha os ornamentos ( "Flores" ) # e retira os objetos "mortos" retornando eles para a fila for obj in self.ornaments: if not obj == None: if obj.dead: if isinstance(obj, Planeta): self.planets_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Explode): self.explosion_queue.push(obj) self.ornaments.remove(obj) obj.draw() obj.act() obj.check_dead() if isinstance(obj, Planeta): if self.myNave.moving_right: obj.scene_angle = -20 elif self.myNave.moving_left: obj.scene_angle = 20 elif not self.myNave.moving_right and not self.myNave.moving_left: obj.scene_angle = 0 scaleSB = 100 #Skybox # glDisable(GL_DEPTH_TEST) glColor3f(1.0, 1.0, 1.0) glEnable(GL_TEXTURE_2D) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glBindTexture(GL_TEXTURE_2D, self.skybox) glPushMatrix() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(-1 * scaleSB, 1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 1) glVertex3f(1 * scaleSB, 1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 0) glVertex3f(1 * scaleSB, -1 * scaleSB, 1 * scaleSB) glTexCoord2f(0, 0) glVertex3f(-1 * scaleSB, -1 * scaleSB, 1 * scaleSB) glEnd() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(-1 * scaleSB, 1 * scaleSB, -1 * scaleSB) glTexCoord2f(1, 1) glVertex3f(1 * scaleSB, 1 * scaleSB, -1 * scaleSB) glTexCoord2f(1, 0) glVertex3f(1 * scaleSB, -1 * scaleSB, -1 * scaleSB) glTexCoord2f(0, 0) glVertex3f(-1 * scaleSB, -1 * scaleSB, -1 * scaleSB) glEnd() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(-1 * scaleSB, -1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 1) glVertex3f(1 * scaleSB, -1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 0) glVertex3f(1 * scaleSB, -1 * scaleSB, -1 * scaleSB) glTexCoord2f(0, 0) glVertex3f(-1 * scaleSB, -1 * scaleSB, -1 * scaleSB) glEnd() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(-1 * scaleSB, 1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 1) glVertex3f(1 * scaleSB, 1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 0) glVertex3f(1 * scaleSB, 1 * scaleSB, -1 * scaleSB) glTexCoord2f(0, 0) glVertex3f(-1 * scaleSB, 1 * scaleSB, -1 * scaleSB) glEnd() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(1 * scaleSB, 1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 1) glVertex3f(1 * scaleSB, 1 * scaleSB, -1 * scaleSB) glTexCoord2f(1, 0) glVertex3f(1 * scaleSB, -1 * scaleSB, -1 * scaleSB) glTexCoord2f(0, 0) glVertex3f(1 * scaleSB, -1 * scaleSB, 1 * scaleSB) glEnd() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(-1 * scaleSB, 1 * scaleSB, 1 * scaleSB) glTexCoord2f(1, 1) glVertex3f(-1 * scaleSB, 1 * scaleSB, -1 * scaleSB) glTexCoord2f(1, 0) glVertex3f(-1 * scaleSB, -1 * scaleSB, -1 * scaleSB) glTexCoord2f(0, 0) glVertex3f(-1 * scaleSB, -1 * scaleSB, 1 * scaleSB) glEnd() glPopMatrix() glDisable(GL_TEXTURE_2D) # glEnable(GL_DEPTH_TEST) # Verifica se o jogo foi iniciado if not self.started: return # Desenha a cena # e retira os objetos mortos retornando ele para a fila # e instancia uma explosao no lugar for obj in self.in_scene: if not obj == None: if obj.dead: if isinstance(obj, Enemy): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 6, "enemy", 15) self.in_scene.append(new_explosion) self.enemy_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Asteroide): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 5, "enemy", 15) self.in_scene.append(new_explosion) self.asteroid_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Shoot): self.bullets_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Explode): obj.dead = False self.explosion_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Power_up): self.power_queue.push(obj) self.in_scene.remove(obj) if isinstance(obj, Nave): if obj.shooting: self.create_shoot(obj.move_x + obj.position_x) if isinstance(obj, Enemy) or isinstance(obj, Asteroide): if self.myNave.moving_right: obj.scene_angle = -20 elif self.myNave.moving_left: obj.scene_angle = 20 elif not self.myNave.moving_right and not self.myNave.moving_left: obj.scene_angle = 0 obj.draw() obj.act() obj.check_dead() # Testa as colisoes e aplica os efeitos (ganhar pontos, ou perder vida) for obj_A in self.in_scene: if isinstance(obj_A, Asteroide): for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): #ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Enemy): obj_A.elapsed_shoot_time += time() if obj_A.elapsed_shoot_time >= SHOOT_TIME_ENEMY: pos = [obj_A.get_x()[0] + 5, obj_A.get_y()[0] + 6, 0] player = [ self.myNave.get_x()[0] + 5, self.myNave.get_y()[0] - 8, 0 ] dir = [ player[0] - pos[0], player[1] - pos[1], player[2] - pos[2] ] angle_R = math.atan2(dir[1], pos[0]) angle = math.degrees(angle_R) if obj_A.nave_type == 0: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_azul, angle) elif obj_A.nave_type == 1: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_amarelo, angle) elif obj_A.nave_type == 2: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_preto, angle) obj_A.elapsed_shoot_time = 0 for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): #ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Shoot): if obj_A.is_enemy: for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): #ui.down_life() obj_A.dead = True elif isinstance(obj_A, Nave): for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Power_up) and self.collide( obj_B, obj_A): obj_B.dead = True self.sound_power.play() if obj_B.skin == 0: ui.up_life() elif obj_B.skin == 1: self.hack = True self.elapsed_time_power_shoot = 0 elif obj_B.skin == 2: self.speed = True self.elapsed_time_power_speed = 0 self.spawn_asteroide() self.spawn_inimigos() self.update()
def paintGL(self): self.check_end_backm() self.update() if self.myNave.dead: self.started = False glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() ########### DRAW BACKGROUND ################## glColor3f(1.0, 1.0, 1.0) glDisable(GL_LIGHTING) glEnable(GL_TEXTURE_2D) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glBindTexture(GL_TEXTURE_2D, self.imageID_back) glPushMatrix() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(50, -50, 1) glTexCoord2f(1, 1) glVertex3f(-50, -50, 1) glTexCoord2f(1, 0) glVertex3f(-50, 50, 1) glTexCoord2f(0, 0) glVertex3f(50, 50, 1) glEnd() glPopMatrix() glDisable(GL_TEXTURE_2D) self.update_time() self.spawn_flowers() self.spawn_planets() self.spawn_stars() ########### DRAW ORNAMENTS ################## for obj in self.ornaments: if not obj == None: if obj.dead: if isinstance(obj, Flor): self.flowers_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Planeta): self.planets_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Star): self.ornaments.remove(obj) obj.draw() obj.act() obj.check_dead() # print(self.bullets_queue.tam()) ########### VERIFY IF THE GAME HAS STARTED ################## if (not self.started): return ########### DRAW SCENE ################## for obj in self.in_scene: if not obj == None: if obj.dead: if isinstance(obj, Enemy): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 6, "enemy") self.in_scene.append(new_explosion) self.enemy_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Asteroide): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 5, "enemy") self.in_scene.append(new_explosion) self.asteroid_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Shoot): self.bullets_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Explode): obj.dead = False self.explosion_queue.push(obj) self.in_scene.remove(obj) obj.draw() obj.act() obj.check_dead() ########### COLLISION CHECK ################## for obj_A in self.in_scene: if isinstance(obj_A, Asteroide): for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): # obj_B.dead = True ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True if not self.hack: obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Enemy): obj_A.elapsed_shoot_time += time() if obj_A.elapsed_shoot_time >= SHOOT_TIME_ENEMY: if obj_A.nave_type == 0: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_azul) elif obj_A.nave_type == 1: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_amarelo) elif obj_A.nave_type == 2: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_preto) obj_A.elapsed_shoot_time = 0 for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): # obj_B.dead = True ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True if self.hack: obj_B.dead = False else: obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Shoot): if obj_A.is_enemy: for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): # obj_B.dead = True ui.down_life() obj_A.dead = True self.spawn_asteroide() self.spawn_inimigos() self.update()
def paintGL(self): # Checa se a musica de fundo acabou e reinicia self.check_end_backm() self.update() # Se o player morreu, entao o jogo acaba if self.myNave.dead: self.started = False glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() # Desenha o background ''''' Inicio do background ''' '' glColor3f(1.0, 1.0, 1.0) glDisable(GL_LIGHTING) glEnable(GL_TEXTURE_2D) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glBindTexture(GL_TEXTURE_2D, self.imageID_back) glPushMatrix() glBegin(GL_QUADS) glTexCoord2f(0, 1) glVertex3f(50, -50, 1) glTexCoord2f(1, 1) glVertex3f(-50, -50, 1) glTexCoord2f(1, 0) glVertex3f(-50, 50, 1) glTexCoord2f(0, 0) glVertex3f(50, 50, 1) glEnd() glPopMatrix() glDisable(GL_TEXTURE_2D) ''''' Fim do background ''' '' self.update_time() self.spawn_flowers() self.spawn_planets() self.spawn_stars() # Desenha os ornamentos ( "Flores" ) # e retira os objetos "mortos" retornando eles para a fila for obj in self.ornaments: if not obj == None: if obj.dead: if isinstance(obj, Flor): self.flowers_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Planeta): self.planets_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Star): self.ornaments.remove(obj) elif isinstance(obj, Explode): self.explosion_queue.push(obj) self.ornaments.remove(obj) elif isinstance(obj, Propellant): self.propellant_queue.push(obj) self.ornaments.remove(obj) obj.draw() obj.act() obj.check_dead() # print (self.enemy_queue.tam()) # Verifica se o jogo foi iniciado if (not self.started): return # Desenha a cena # e retira os objetos mortos retornando ele para a fila # e instancia uma explosao no lugar for obj in self.in_scene: if not obj == None: if obj.dead: if isinstance(obj, Enemy): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 6, "enemy") self.in_scene.append(new_explosion) self.enemy_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Asteroide): new_explosion = self.explosion_queue.pop() new_explosion.load(self.animation_explosion, obj.move_x + obj.position_x, obj.move_y + 5, "enemy") self.in_scene.append(new_explosion) self.asteroid_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Shoot): self.bullets_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Explode): obj.dead = False self.explosion_queue.push(obj) self.in_scene.remove(obj) elif isinstance(obj, Power_up): self.power_queue.push(obj) self.in_scene.remove(obj) if isinstance(obj, Nave): if obj.shooting: self.create_shoot(obj.move_x + obj.position_x) obj.draw() obj.act() obj.check_dead() # Testa as colisoes e aplica os efeitos (ganhar pontos, ou perder vida) for obj_A in self.in_scene: if isinstance(obj_A, Asteroide): for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True if not self.hack: obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Enemy): obj_A.elapsed_shoot_time += time() if obj_A.elapsed_shoot_time >= SHOOT_TIME_ENEMY: if obj_A.nave_type == 0: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_azul) elif obj_A.nave_type == 1: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_amarelo) elif obj_A.nave_type == 2: self.create_shoot(obj_A.move_x + obj_A.position_x, obj_A.move_y, obj_A.move_y + 6, True, obj_A.nave_type, obj_A.shoot_type, self.img_tiro_preto) obj_A.elapsed_shoot_time = 0 for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): ui.down_life() obj_A.dead = True elif isinstance(obj_B, Shoot) and self.collide( obj_B, obj_A): if not obj_B.is_enemy: obj_A.dead = True if self.hack: obj_B.dead = False else: obj_B.dead = True self.sound_explosion.play() ui.up_point(10) if ui.score % 1000 == 0: self.sound_1000pts.play() elif isinstance(obj_A, Shoot): if obj_A.is_enemy: for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Nave) and self.collide( obj_B, obj_A): ui.down_life() obj_A.dead = True elif isinstance(obj_A, Nave): if self.speed: obj_A.speed = 3 else: obj_A.speed = 0 for obj_B in self.in_scene: if not (obj_A == obj_B): if isinstance(obj_B, Power_up) and self.collide( obj_B, obj_A): obj_B.dead = True self.sound_power.play() if obj_B.skin == 0: ui.up_life() elif obj_B.skin == 1: self.hack = True self.elapsed_time_power_shoot = 0 elif obj_B.skin == 2: self.speed = True self.elapsed_time_power_speed = 0 self.spawn_asteroide() self.spawn_inimigos() self.spawn_powers() self.update()