def shoot(self): """Allows player to shoot down the enemy. Issues one bullet and adds it to underlying sprite context.""" if self.__hidden: return if self.context.playerCanShot: now = pygame.time.get_ticks() if now - self.__last_shot > Player.SHOOT_DELAY: self.__last_shot = now if self.__power == 1: bullet = Bullet(self.rect.centerx, self.rect.top, self.__bullet_img, self.context) self.__all_sprites.add(bullet) self.__bullets.add(bullet) random.choice(self.__soundResources.shoot_sounds).play() if self.__power >= 2: bullet1 = Bullet(self.rect.left, self.rect.centery, self.__bullet_img, self.context) bullet2 = Bullet(self.rect.right, self.rect.centery, self.__bullet_img, self.context) self.__all_sprites.add(bullet1) self.__all_sprites.add(bullet2) self.__bullets.add(bullet1) self.__bullets.add(bullet2) random.choice(self.__soundResources.shoot_sounds).play()
def attack(self): sounds.play("chop") selfCenterX = self.x + self.w / 2 selfCenterY = self.y + self.h / 2 theta = math.atan2(mouse.mouse['pos'][1] - selfCenterY, mouse.mouse['pos'][0] - selfCenterX) return Bullet(selfCenterX - 5, selfCenterY - 5, 10, 10, images.frenchFry, theta, self.dmg, "good")
def _shoot(self): self.can_shoot -= 1 if self.can_shoot == 0: self.can_shoot = 5 if self.right.x != 0 or self.right.y != 0: bullet = Bullet((self.right.x, self.right.y), self.rect.center) self.bullet_group.add(bullet) self.fire_sound.play()
def attack(self, target): selfCenterX = self.x + self.w / 2 selfCenterY = self.y + self.h / 2 theta = math.atan2((target.y + target.h / 2 - selfCenterY), (target.x + target.w / 2 - selfCenterX)) bW = 10 * self.dmg return Bullet(selfCenterX - bW / 2, selfCenterY - bW / 2, bW, bW, pygame.transform.scale(images.marshmallow, (bW, bW)), theta, self.dmg, "bad")
def add_bullet(self, cursor): current_shot = dtime.now().timestamp() if (current_shot - self.last_shot) > self.timeout: start_x = self.player.x start_y = self.player.y + self.player.image_height new_bullet = Bullet(start_x, start_y, cursor.x - cursor.width, cursor.y - cursor.height, self.background, self.max_damage) self.bullets.append(new_bullet) self.last_shot = current_shot
def shot(self): """Triggers enemy shot. Adds new bullet sprite in sprite context :return: None """ now = pygame.time.get_ticks() if now - self.__last_shot > Enemy.SHOOT_DELAY: self.__last_shot = now bullet = Bullet(self.rect.centerx, self.rect.bottom, self.__bullet_img, 15) self.all_sprites.add(bullet) self.enemies_shots.add(bullet)
def exitShooting(self): angSpeed = 20.0 + (40.0 * self.powerLevel) linSpeed = 80.0 + (320.0 * self.powerLevel) color = (0.7 + 0.1*random(), 0.7 + 0.1*random(), 0.7 + 0.1*random()) dir = self.character.getDir() bullet = Bullet(self.world, base.render, color, (0.0, 0.0, 0.0), dir, 0.3, 80, self.character.node) bullet.body.setLinearVel(dir * linSpeed) bullet.body.setAngularVel(dir * angSpeed) self.gunSfx.play() self.meter.hide() base.taskMgr.remove("powerMeterGauge") # Recoil and camera flash self.recoil() self.character.recoil(12) self.world.game.cameraHandler.flash((1,1,1,0.5), 0.2)
def testing(event, view): player = view.player if not view.isinitialized: return view.screen.fill(BLACK) if view.tickcounter <= 30: view.player.onstart(view) view.tickcounter += 1 if isinstance(event, Keyboard): view.currentDown[event.key] = 1 if isinstance(event, KeyboardUp): view.currentDown[event.key] = 0 shoot = '' v = VELOCITY if sum(view.currentDown.values()) > 1 else DVELOCITY for key in view.currentDown.keys(): if view.currentDown[key]: if key == 119: player.movy(-v) if key == 115: player.movy(v) if key == 97: player.movx(-v) if key == 100: player.movx(v) if len(shoot) < 2: if key == 105: shoot += 'N' if key == 107: shoot += 'S' if key == 106: shoot += 'W' if key == 108: shoot += 'E' if shoot: if view.lastshot == 0: bullet = Bullet(player.position[0], player.position[1], shoot) view.spriteslist.add(bullet) view.lastshot += COOLDOWN else: view.lastshot -= 1 view.spriteslist.update() game_surface = pygame.Surface(SCREENSIZE, pygame.SRCALPHA, 32) game_surface = game_surface.convert_alpha() view.spriteslist.draw(game_surface) view.skincount += 1 if view.tickcounter % 2 == 0 else 0 if view.skincount > 2: view.skincount = 0 # clear display # draw some words on the screen somewords = view.smallfont.render('This is a testing screen', True, (0, 255, 0)) width, _ = pygame.font.Font.size(view.smallfont, 'This is a testing screen') position_font = (SCREENSIZE[0] - width) / 2 view.screen.blit(somewords, (position_font + 6, 0)) view.screen.blit(game_surface, (0, 0)) if view.tickcounter > 30: view.screen.blit(player.getskin(view.skincount), player.position) view.clock.tick(TPS) # flip the display to show whatever we drew pygame.display.flip()
def fireBullet(self, posx, posy): # fire only if cooldown has finished now = pygame.time.get_ticks() if (now - self.lastShot) >= self.fireCooldown: self.lastShot = now self.bullets.append(Bullet(self.screen, posx, posy))
def level(view, event): player = view.player if not view.isinitialized: return view.screen.fill(BLACK) if view.tickcounter <= 30: view.player.onstart(view) view.tickcounter += 1 if isinstance(event, Keyboard): view.currentDown[event.key] = 1 if isinstance(event, KeyboardUp): view.currentDown[event.key] = 0 shoot = '' v = VELOCITY if sum(view.currentDown.values()) > 1 else DVELOCITY for key in view.currentDown.keys(): if view.currentDown[key]: if key == 119: player.movy(-v) if key == 115: player.movy(v) if key == 97: player.movx(-v) if key == 100: player.movx(v) if len(shoot) < 2: if key == 105: shoot += 'N' if key == 107: shoot += 'S' if key == 106: shoot += 'W' if key == 108: shoot += 'E' if shoot: if view.lastshot == 0: bullet = Bullet(player.position[0], player.position[1], shoot) view.spriteslist.add(bullet) view.lastshot += COOLDOWN else: view.lastshot -= 1 view.skincount += 1 if view.tickcounter % 2 == 0 else 0 if view.skincount > 2: view.skincount = 0 playlist = [view.player.position] for idx,item in enumerate(view.spriteslist): item.update(view.skincount, playlist[idx%len(playlist)]) if view.tickcounter > 50: for item in view.spriteslist: if isinstance(item, Bullet): for object in view.spriteslist: if -20<item.rect[0]-object.rect[0]<20 and -20<item.rect[1]-object.rect[1]<20 and not isinstance(object, Bullet): if isinstance(object, Grunt) or isinstance(object, Electrode) or isinstance(object, Hulk): object.kill() item.kill() if isinstance(item, Electrode) or isinstance(item, Grunt) or isinstance(item, Hulk): if -20<item.rect[0]-player.position[0]<20 and -20<item.rect[1]-player.position[1]<20: view.lives -= 1 if view.lives > 0: view.evManager.post(ChangeState(view.model.statem.peek() + 101)) return else: view.evManager.post(ChangeState(ENDGAME)) if isinstance(item, Electrode): for object in view.spriteslist: if -10 < item.rect[0] - object.rect[0] < 10 and -10 < item.rect[1] - object.rect[1] < 10 and not isinstance(object, Electrode): if isinstance(object, Grunt): object.kill() if isinstance(item, Mommies) or isinstance(item, Daddies) or isinstance(item, Mikeys): if -20 < item.rect[0] - player.position[0] < 20 and -20 < item.rect[1] - player.position[1] < 20: score = item.die(view) view.score += score gruntcount = sum(1 if isinstance(i, Grunt) else 0 for i in view.spriteslist) if gruntcount == 0: view.evManager.post(ChangeState(view.model.statem.peek() + 101)) return view.spriteslist.draw(view.screen) if view.tickcounter > 30: player.getskin(view.skincount) view.screen.blit(player.getskin(view.skincount), player.position) view.clock.tick(TPS) # flip the display to show whatever we drew pygame.display.flip()
def create_bullet(self, tank, model): bullet = Bullet(model, tank, self) self.current_level.bullets.add(bullet)