def fire(self): """fires missile""" if self.app.config['General']['next_gen']: if self.app.score.shots > 0: self.app.missile_list.append(missile.Missile(self.app)) self.app.snd_missile_fired.play() self.app.score.shots -= 1 else: self.app.snd_empty.play() if self.app.config['Missile']['empty_penalty']: self.app.score.pnts -= self.app.config['Missile'][ 'missile_penalty'] self.app.score.bonus -= self.app.config['Missile'][ 'missile_penalty'] else: self.app.missile_list.append(missile.Missile(self.app)) self.app.snd_missile_fired.play() if self.app.score.shots > 0: self.app.score.shots -= 1 else: self.app.snd_empty.play() self.app.score.pnts -= self.app.config['Missile'][ 'missile_penalty'] self.app.score.bonus -= self.app.config['Missile'][ 'missile_penalty']
def fire(self): """fire a missile""" if self.missile['current'] < self.missile['max']: self.missile['current'] += 1 if self.heading == "right": self.objects.append( missile.Missile(self.pos_x, self.pos_y, self)) else: self.objects.append( missile.Missile(self.pos_x + 1, self.pos_y, self))
def run(self, omega_plane=540, v_plane=240, omega_missile=150, v_missile=500): """ () -> void runs the game routine ORDER OR OPERATION: 1. move() 2. shift() 3. pos() """ # seed(7) self.alive = True self.score = 0 self.init_display() self.plane = plane.Plane(400, 200, 0, v_plane, omega_plane, self.fps) self.missiles = [] self.missiles.append( missile.Missile(randint(-100, 900), 0, 0, v_missile, omega_missile, 0, 0, self.fps, 1)) try: while self.alive: # main game loop self.mainloop(omega_missile, v_missile) cprint("You got destroyed by the AIM9X Sidewinder", 'red', 'on_green', attrs=['bold']) cprint("Press <ENTER> to restart", 'red') while not self.alive and self.running: # restart loop self.restart() except KeyboardInterrupt: self.quit()
def fireMissile(self): """Fire a missile based weapon""" import anwp.sims myGalaxy = self.myShip.myGalaxy myEmpire = myGalaxy.empires[self.myShip.empireID] # determine missile image to use if self.myWeaponData.missile == 'impact': # add sound ## myGalaxy.game.app.playSound('missile1') #cannon sounds way cooler. :) myGalaxy.game.app.playSound('cannon6') num = 1 else: # add sound myGalaxy.game.app.playSound('photon1') num = 2 name = 'missile%d_%s_%s' % (num, myEmpire.color1, myEmpire.color2) imageFileName = '%s%s.png' % (myGalaxy.game.app.simImagePath, name) speed = 0 force = 1 (x,y) = self.getMyXY() # get relative angle between missile and target angle = anwp.func.funcs.getRelativeAngle(x, y, self.currentTarget.posX, self.currentTarget.posY) # determine proper Missile category category = anwp.sims.categories.MissileCategory(imageFileName, string.lower(self.myWeaponData.abr[0]), num) sim = missile.Missile(category, self, x, y, angle) myGalaxy.world.addToWorld(sim, x, y, angle, speed, force) sim.velocityX = self.myShip.velocityX sim.velocityY = self.myShip.velocityY
def spawn_missiles(self, omega_missile, v_missile): ''' spawn a missile near the plane when called 4 cases: above below left right ''' c = choice([0, 1, 2, 3]) if c == 0: # spawn above self.missiles.append(missile.Missile(randint(-100, 900), 0, 0,\ v_missile, omega_missile, 0, 0, self.fps, 1)) elif c == 1: # spawn below self.missiles.append(missile.Missile(randint(-100, 900), 600, 0,\ -1*v_missile, omega_missile, 0, 0, self.fps, 1)) elif c == 2: # left self.missiles.append(missile.Missile(0, randint(-100, 700),\ v_missile, 0, omega_missile, 0, 0, self.fps, 1)) else: # right self.missiles.append(missile.Missile(800, randint(-100, 700),\ -1*v_missile, 0, omega_missile, 0, 0, self.fps, 1))
for event in pygame.event.get(): # check if the event is the X button if event.type == pygame.QUIT: # if it is quit the game pygame.quit() exit(0) if event.type == pygame.KEYDOWN: if event.key == K_LEFT: keys[0] = True elif event.key == K_RIGHT: keys[1] = True if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: keys[0] = False elif event.key == pygame.K_RIGHT: keys[1] = False if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: missiles.append(missile.Missile(tankPosition)) # missiles[len(missiles) - 1].display() # 9 - Move player if keys[0]: tankPosition[0] -= 5 elif keys[1]: tankPosition[0] += 5 pygame.display.flip()
def update(self): # Check if player is inside the zone self.player_in_zone = pygame.sprite.collide_rect(self, self.game.zone) # Check for collision between player and blocks if pygame.sprite.spritecollide(self, self.game.blocks, True): self.bounce() # Create missile sprite if none exist if (len(self.game.missiles) == 0): # Add missile sprite if there are none already flying self.game.missile = missile.Missile(self.game, settings.BLUE, self.rect.y) self.game.missiles.add(self.game.missile) self.game.missile.missileState = 1 # Check for collision between player and enemy (not flying) if (self.game.enemy.enemyState != 2): if pygame.sprite.collide_rect(self, self.game.enemy): # Create missile sprite if none exist if (len(self.game.missiles) == 0): # Add missile sprite if there are none already flying self.game.missile = missile.Missile( self.game, settings.BLUE, self.rect.y) self.game.missiles.add(self.game.missile) self.game.missile.missileState = 1 # Read keyboard self.keys = pygame.key.get_pressed() # Update player position according to speed if self.keys[pygame.K_LEFT]: self.x -= settings.PLAYER_VELOCITY self.rect.x = int(self.x) if self.keys[pygame.K_RIGHT]: self.x += settings.PLAYER_VELOCITY self.rect.x = int(self.x) if self.keys[pygame.K_UP]: self.y -= settings.PLAYER_VELOCITY self.rect.y = self.y if self.keys[pygame.K_DOWN]: self.y += settings.PLAYER_VELOCITY self.rect.y = self.y # Fire pressed if self.keys[pygame.K_SPACE]: # Test if player is outside the zone if (not self.player_in_zone): # Launch missile if one is set if (len(self.game.missiles) != 0): self.game.missile.missileState = 2 # Create bullets if there is no missile set or flying if (len(self.game.missiles) == 0): if (pygame.time.get_ticks() - settings.BULLET_LAUNCH_TIME >= settings.BULLET_DELAY): self.game.bullet = bullet.Bullet( self.game, settings.GREEN, self.rect.x, self.rect.y) self.game.bullets.add(self.game.bullet) # Make sure the player don't exit the screen if self.rect.x < 0: self.x = 0 self.rect.x = self.x if self.rect.x > settings.SCREEN_WIDTH - settings.BLOCKSIZE: self.x = settings.SCREEN_WIDTH - settings.BLOCKSIZE self.rect.x = self.x # If the the players to the bottom or top, make it appears at the opposite if self.rect.y < 0: self.y = settings.SCREEN_HEIGHT - settings.BLOCKSIZE self.rect.y = self.y if self.rect.y > settings.SCREEN_HEIGHT - settings.BLOCKSIZE: self.y = 0 self.rect.y = self.y
def fire(self): self.missiles.append(missile.Missile(self.x+(self.width/2), self.y-5 )) self.fireSound.play()
def update(self, playerpos, speed, slowvalue, player_live): if self.health <= 0: self.killit = True missile_attack = False shooting = False direc = self.sub_vec(playerpos, self.pos) dis = self.norm(direc) if dis > 1500 or self.noactiontime > 70: missile_attack = True else: shooting = True self.slowvalue = slowvalue self.frame = (self.frame + 1) % len(self.imgs) if not player_live: self.shoot = False if not self.killit: if player_live: if missile_attack: self.noactiontime = 0 if (len(self.launched_missiles.sprites()) < config.launch_missiles_limit and self.total_missiles > 0 and self.launch_time > config.launch_time): missile1 = missile.Missile() missile1.pos = list(self.pos) # missile1.v = self.v self.launched_missiles.add(missile1) self.launch_time = 0 self.total_missiles -= 1 self.launch_time += 1 * self.slowvalue elif shooting: ang = math.degrees(self.angle_2vec(self.v, direc)) # print(ang) self.noactiontime = 0 if ang < 10: self.shoot = True else: self.shoot = False # print(math.degrees(ang)) else: self.noactiontime += 1 if self.slowdown: self.speed = 200 else: self.speed = config.fighter_speed rot_dir = self.sub_vec(playerpos, self.pos) v_turn = self.unit(self.sub_vec(rot_dir, self.v)) v_turn = self.multiply(self.slowvalue, v_turn) t1 = self.multiply(self.speed, self.v) t2 = self.multiply(self.turn_speed, v_turn) # print(t1,"----",t2) if not self.slowdown: self.v = self.add_vec(t1, t2) else: self.kill() for i in self.particle_system.particles: if (i.size >= config.particle_expansion_size): self.particle_system.particles.remove(i) self.v = self.unit(self.v) self.pos = self.add_vec( self.pos, self.multiply(self.speed * config.dt * slowvalue, self.v)) if not self.killit: self.particle_system.add_particle(self.pos) self.rot_center() self.renderPosition(playerpos) self.rect.centerx = self.renderpos[0] self.rect.centery = self.renderpos[1] self.angle = self.calculate_angle(self.v)
def game_loop(): global pause default_font = pygame.font.Font("./fonts/NanumGothic.ttf", 28) background_image = pygame.image.load("./images/background.png") gameover_sound = pygame.mixer.Sound("./sounds/gameover.wav") pygame.mixer.music.load("./sounds/music.wav") pygame.mixer.music.play(-1) # 무한반복 fps_clock = pygame.time.Clock() players = player.Player() missile_group = pygame.sprite.Group() rock_group = pygame.sprite.Group() occur_prob = 40 shot_count = 0 count_missed = 0 done = False while not done: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: players.dx -= 5 elif event.key == pygame.K_RIGHT: players.dx += 5 elif event.key == pygame.K_UP: players.dy -= 5 elif event.key == pygame.K_DOWN: players.dy += 5 elif event.key == pygame.K_SPACE: missiles = missile.Missile(players.rect.centerx, players.rect.y, 10) missiles.launch() missile_group.add(missiles) elif event.key == pygame.K_p: pause = True paused() if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: players.dx = 0 elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: players.dy = 0 screen.blit(background_image, background_image.get_rect()) occur_of_rocks = 1 + int(shot_count / 300) min_rock_speed = 1 + int(shot_count / 200) max_rock_speed = 1 + int(shot_count / 100) if random.randint(1, occur_prob) == 1: for i in range(occur_of_rocks): speed = random.randint(min_rock_speed, max_rock_speed) rocks = rock.Rock(random.randint(0, Window_width - 30), 0, speed) rock_group.add(rocks) draw_text("파괴한 운석: {}".format(shot_count), default_font, screen, 100, 20, YELLOW) draw_text("놓친 운석: {}".format(count_missed), default_font, screen, 400, 20, RED) for missiles in missile_group: rocks = missiles.collide(rock_group) # 미사일과 운석이 충돌한 경우 if rocks: missiles.kill() rocks.kill() occur_explosion(screen, rocks.rect.x, rocks.rect.y) shot_count += 1 for rocks in rock_group: if rocks.out_out_screen(): # 운석이 화면 밖으로 나간 경우 rocks.kill() count_missed += 1 rock_group.update() rock_group.draw(screen) missile_group.update() missile_group.draw(screen) players.update() players.draw(screen) pygame.display.flip() # 게임 종료 조건 if players.collide(rock_group) or count_missed >= 3: pygame.mixer_music.stop() occur_explosion(screen, players.rect.x, players.rect.y) pygame.display.update() gameover_sound.play() sleep(1) done = True fps_clock.tick(FPS) return "game_menu"
def game_loop(): hitx = [] hity = [] p.set_health(100) done = False blood_spots = [] can_shoot = True last_shot = 1000 alive = True temp_clock = [] level = 1 score = 0 sub_score = lambda x: 0 if score - x <= 0 else score - x while alive: screen.fill(WHITE) screen.blit(bg, (0, 0)) for spots in blood_spots: screen.blit(bloodpic, (spots[0], spots[1])) if not done: create_zombies(1) create_devils(1) done = True for m in medkits: screen.blit(m.image, (m.rect.x, m.rect.y)) if m.rect.colliderect(p.rect): p.heal() m.kill() for zombs in zombies: zombs.move_towards_player(p) screen.blit(zombs.image, (zombs.rect.x, zombs.rect.y)) if zombs.rect.colliderect(p.rect): blood_spots.append((zombs.rect.x, zombs.rect.y)) p.get_hit() zombs.kill() score = sub_score(5) hitx.append(p.rect.x) hity.append(p.rect.y) for devs in devils: devs.move_towards_player(p) screen.blit(devs.image, (devs.rect.x, devs.rect.y)) if devs.rect.colliderect(p.rect): blood_spots.append((devs.rect.x, devs.rect.y)) p.get_hit() devs.kill() score = sub_score(10) hitx.append(p.rect.x) hity.append(p.rect.y) if pygame.time.get_ticks() - devs.last_shot >= 2000: chance = random.random() if chance < .05: devs.last_shot = pygame.time.get_ticks() m = missile.Missile(p, devs) missiles.add(m) for m in missiles: m.update() screen.blit(m.image, (m.rect.x, m.rect.y)) for zombs in zombies: if m.target == "enemy": if zombs.rect.colliderect(m.rect): blood_spots.append((zombs.rect.x, zombs.rect.y)) zombs.kill() m.kill() score += 5 for devs in devils: if m.target == "enemy": if devs.rect.colliderect(m.rect): blood_spots.append((devs.rect.x, devs.rect.y)) devs.kill() m.kill() score += 10 if p.rect.colliderect(m.rect): if m.target == "player": p.get_hit() score = sub_score(5) hitx.append(p.rect.x) hity.append(p.rect.y) m.kill() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() screen.blit(p.image, (p.rect.x, p.rect.y)) pressed = pygame.key.get_pressed() if pressed[pygame.K_LEFT] and not pressed[pygame.K_UP] and not pressed[ pygame.K_DOWN]: p.move('a') p.image = player_left_pic p.dir = 'a' if pressed[pygame.K_UP]: if pressed[pygame.K_LEFT]: p.move('wa') p.image = player_upleft_pic p.dir = 'wa' elif pressed[pygame.K_RIGHT]: p.move('wd') p.image = player_upright_pic p.dir = 'wd' else: p.move('w') p.image = player_up_pic p.dir = 'w' if pressed[pygame.K_DOWN]: if pressed[pygame.K_a]: p.move('sa') p.image = player_downleft_pic p.dir = 'sa' elif pressed[pygame.K_RIGHT]: p.move('sd') p.image = player_downright_pic p.dir = 'sd' else: p.move('s') p.image = player_down_pic p.dir = 's' if pressed[pygame.K_RIGHT] and not pressed[ pygame.K_UP] and not pressed[pygame.K_DOWN]: p.move('d') p.image = player_right_pic p.dir = 'd' if pressed[pygame.K_SPACE]: if pygame.time.get_ticks() - last_shot >= 400: last_shot = pygame.time.get_ticks() shot_clock.tick() m = missile.Missile(p, 'player') missiles.add(m) if p.get_health() > 0: p.draw_health(screen) else: p.set_health(0) p.draw_health(screen) pygame.display.flip() alive = False kill_all() check_score(score) show_hits(hitx, hity) start_screen() print('Game Over') if len(zombies) + len(devils) == 0: level_clear_message(level, 170, 50) try: if pygame.time.get_ticks() - temp_clock[level] >= 5000: blood_spots.clear() missiles.empty() create_devils(level * 2) create_zombies(level * 2) level += 1 if p.get_health() + 10 < 100: p.set_health(p.get_health() + 10) else: p.set_health(100) spawn_medkit() except IndexError: temp_clock.append(pygame.time.get_ticks()) level_clear_message(str(score), 20, 450) pygame.display.flip() clock.tick(60)