def runobjects(self, objects): G, B, S = gfx, self.background, self.speedadjust gfx.updatestars(B, G) for effect in self.powereffects[:]: if effect.dead: effect.end() self.powereffects.remove(effect) else: effect.tick(S) #add pop for timedout powerups, sad place to do this, but owell for o in self.powerupobjs: if o.dead: self.popobjs.append(objpopshot.PopShot(o.rect.center)) for l in objects: for o in l[:]: o.erase(B) o.tick(S) if o.dead: o.erase(B) l.remove(o) #HERE IS THE GLITTER #self.glitter.update(S) #self.glitter.add(self.shotobjs, 1.0) for l in objects: for o in l: o.draw(G) self.hud.draw()
def check_collision_player_enemies(self): """ Testa a colisao entre o jogador e os inimigos, ou seus tiros. """ #Obtem o retangulo que envolve a aeronave do jogador, diminuindo #um pouco sua area para que a colisao seja mais realista. playerrect = self.player.rect.inflate(-3, -3) playercollide = playerrect.colliderect hitbullet = 0 #Testa a colisao entre o jogador e os inimigos. if self.curwave: for wave in self.curwave: for s in wave.enemies: if playercollide(s.rect): s.dead = 1 self.changestate('playerdie') #Testa a colisao entre o jogador e tiros dos inimigos. for s in self.baddyshotobjs: r = s.rect if playercollide(r): s.dead = 1 self.player.stamina -= s.dmg if self.player.stamina <= 0: self.player.stamina = game.start_stamina self.popobjs.append(objpopshot.PopShot(r.center)) self.changestate('playerdie') hitbullet = 1
def playerdie_start(self): #Adiciona um objeto de explosao da aeronave do jogador #e finaliza o mapa. self.player.lives -= 1 snd.play('explode', 1.0, self.player.rect.centerx) self.popobjs.append( objpopshot.PopShot(self.player.rect.center, size='big')) self.player.dead = 1 self.player.active = 0 self.explodetick = 0 self.map.cleanup()
def levelskip_start(self): snd.play('levelskip') game.player.skips += 1 self.poptime = 2 if game.clock.get_fps() < 25: self.poptime = 1 if game.comments >= 1: self.textobjs.append(objtext.Text('Level Skipped')) self.skiptime = 25 for s in self.spikeobjs: s.dead = 1 self.popobjs.append(objpopshot.PopShot(s.rect.center))
def superexplode(pos, move): sprites = [] sprites.append(Explode(pos, move)) for d in range(len(debris)): sprites.append(Debris(d, pos, move)) for _ in range(4): newpos = list(pos) newpos[0] += (random.random() - .5) * 30 newpos[1] += (random.random() - .5) * 30 pop = objpopshot.PopShot(newpos) sprites.append(pop) return sprites
def levelend_tick(self): self.poptime -= 1 if not self.poptime: self.poptime = 2 if self.shotobjs: s = self.shotobjs[0] s.dead = 1 self.popobjs.append(objpopshot.PopShot(s.rect.center)) if not self.popobjs and not self.shotobjs and not self.popobjs: if self.levelnum + 1 >= levels.maxlevels(): self.gamewin() else: self.changestate('levelstart') self.runobjects(self.objlists)
def levelend_start(self): snd.play('levelfinish') self.popobjs.append(objwarp.Warp(self.player.rect.center)) self.player.dead = 1 self.player.active = 0 self.poptime = 2 for effect in self.powereffects: effect.dead = 1 if game.comments >= 1 and self.grabbedboxes >= 25: self.textobjs.append(objtext.Text(game.Complements[self.complement])) self.complement = (self.complement + 1) % len(game.Complements) for s in self.spikeobjs: s.dead = 1 self.popobjs.append(objpopshot.PopShot(s.rect.center)) #boxes may be left if the player cheated for b in self.boxobjs: b.erase(self.background) del self.boxobjs[:]
def playerdie_tick(self): self.poptime -= 1 if not self.poptime: self.poptime = 2 if self.shotobjs: s = self.shotobjs[0] s.dead = 1 self.popobjs.append(objpopshot.PopShot(s.rect.center)) if self.explode.dead and not self.popobjs :#and not game.timeleft: if self.lives_left: self.lives_left -= 1 self.hud.drawlives(self.lives_left) self.changestate('playerstart') if game.comments >= 2 and not self.lives_left: self.textobjs.append(objtext.Text("Last Ship, Don't Blow It")) else: self.changestate('gameover') self.tickleveltime(self.speedadjust * 1.5) self.runobjects(self.objlists)
def check_collision_enemies_player(self): """ Testa a colisao entre os inimigos e os tiros do jogador. """ for s in self.playershotobjs: r = s.rect if self.curwave: for wave in self.curwave: for baddy in wave.enemies: baddyrect = baddy.rect.inflate(-3, -3) baddycollide = baddyrect.colliderect if baddycollide(r): self.player.score += 30 s.dead = 1 baddy.stamina -= s.dmg if baddy.stamina <= 0: baddy.dead = 1 self.popobjs.append( objpopshot.PopShot(r.center, size=baddy.size))
def start(self): snd.play('whip') for s in self.state.shotobjs: s.dead = 1 self.state.popobjs.append(objpopshot.PopShot(s.rect.center))
def normal_tick(self): #fire the guards shootchance = game.guard_fire * self.speedadjust if self.player.active and random.random() < shootchance: self.powerupcount += 0.3 baddy = random.choice(self.guardobjs) baddy.fire() #only requests a shot for baddy in self.guardobjs: shotspot, shotdir = baddy.shotinfo() if shotspot: s = objshot.Shot(shotspot, shotdir) self.shotobjs.append(s) snd.play('shoot', 1.0, shotspot[0]) #add a powerup if ready if self.powerupcount >= game.powerupwait: self.powerupcount = 0.0 p = objpowerup.newpowerup(self.levelnum) self.powerupobjs.append(p) snd.play('spring', 0.6) gamehelp.help("powerup", p.rect.topleft) if self.grabbedboxes >= 50: self.grabbedboxes = 0 if game.comments >= 1: self.textobjs.append( objtext.Text(game.Complements[self.complement])) self.complement = int( (self.complement + 1) % len(game.Complements)) elif self.grabbedboxes >= 20: self.numdeaths = 0 self.tickleveltime(self.speedadjust) playerrect = self.player.rect.inflate(-1, -1) playercollide = playerrect.colliderect #collide player to boxes if self.touchingsecretspike: if not playercollide(self.touchingsecretspike.rect): #self.boxobjs.remove(self.touchingsecretspike) self.spikeobjs.append( objbox.Spike(self.touchingsecretspike.rect.topleft)) self.boxobjs.remove(self.touchingsecretspike) self.touchingsecretspike = None for b in self.boxobjs: status = b.playercollide(playerrect) if status: self.grabbedboxes += 1 self.powerupcount += 0.6 if b in self.secretspikes: self.touchingsecretspike = b self.secretspikes.remove(b) snd.play('klank2', 0.7, self.player.rect.centerx) elif status == 1: self.powerupcount += 0.3 self.boxobjs.remove(b) self.popobjs.append(b) #collide player to powerups for p in self.powerupobjs: if playercollide(p.rect): p.dead = 1 effect = p.effect() if game.comments >= 2: self.textobjs.append( objtext.Text('"' + effect.__doc__ + '"')) self.powereffects.append(effect) gamehelp.help(effect.__doc__, self.player.rect.center) playerrect = playerrect.inflate(-6, -6) playercollide = playerrect.colliderect asteroidrects = [o.colliderect for o in self.asteroidobjs] hitbullet = 0 #collide player and asteroids to bullets for s in self.shotobjs: r = s.rect if playercollide(r): s.dead = 1 if not self.player.shield: self.changestate('playerdie') hitbullet = 1 else: self.popobjs.append(objpopshot.PopShot(s.rect.center)) for ar in asteroidrects: if ar.colliderect(r) and not s.dead: s.dead = 1 self.popobjs.append(objpopshot.PopShot(s.rect.center)) break #collide player to spikes for s in self.spikeobjs: if s.armed and playercollide(s.rect): s.dead = 1 self.changestate('playerdie') hitbullet = 1 #collide player to asteroids if not hitbullet: for a, r in zip(self.asteroidobjs, asteroidrects): if playercollide(r): self.changestate('playerdie') a.dead = 1 self.popobjs.append(objpopshot.PopShot(r.center)) if not self.boxobjs: self.changestate('levelend') #blow smoke (turbo) self.clocks += 1 if self.player.turbo and (self.player.move[0] or self.player.move[1] ) and gfx.surface.get_bytesize() > 1: self.smokeobjs.append(objsmoke.Smoke(self.player.rect.center)) if game.clock.get_fps() > 35.0: self.smokeobjs.append(objsmoke.Smoke(self.player.rect.center)) self.runobjects(self.objlists)