def on_update(self, delta_time): if not self.in_menu and self.slayer.health <= 0: self.in_menu = True self.handler.set_menu(menuHandler.GAME_OVER) sound_manager.play_sound(sound_manager.PLAYER_DEATH, .15) if self.in_menu: self.handler.draw_menu() else: self.physics_engine.update() new_pos = self.rooms[self.current_room].check_move_room( self.rooms[self.current_room], self.player_sprite.position, self, self.difficulty) if not new_pos == None: self.player_sprite.position = new_pos item_hit_list = arcade.check_for_collision_with_list( self.player_sprite, self.rooms[self.current_room].item_list) for hit_item in item_hit_list: hit_item.pickup(self.slayer) self.rooms[self.current_room].item_list.remove(hit_item) if self.player_sprite.change_y == 0 and ( (self.w_pressed and not self.s_pressed) or (self.s_pressed and not self.w_pressed)): if self.w_pressed: self.player_sprite.change_y = self.slayer.movespeed elif self.s_pressed: self.player_sprite.change_y = -self.slayer.movespeed if self.player_sprite.change_x == 0 and ( (self.a_pressed and not self.d_pressed) or (self.d_pressed and not self.a_pressed)): if self.a_pressed: self.player_sprite.change_x = -self.slayer.movespeed elif self.d_pressed: self.player_sprite.change_x = self.slayer.movespeed self.slayer.update_position(self.player_sprite.center_x, self.player_sprite.center_y) if self.attack_cooldown > 0: self.attack_cooldown -= 1 room_setup.update_player_attacks(self.rooms[self.current_room], self.difficulty) room_setup.update_fog(self.rooms[self.current_room], self.player_sprite.position, self.slayer.sight) room_setup.update_enemies(self.rooms[self.current_room], self.player_sprite.position, self.difficulty) room_setup.update_enemy_attacks(self.rooms[self.current_room], self.player_sprite, self.slayer) position = self.music_handler.music.get_stream_position() if position == 0.0: self.music_handler.play_music(0)
def die(self, room, left, bottom): blood_splatter = arcade.Sprite("resources/images/blood.png", .7) blood_splatter.left = left blood_splatter.bottom = bottom room.accent_list.append(blood_splatter) if self.type == GOBLIN: sound_manager.play_sound(sound_manager.GOBLIN_DEATH, .15) else: sound_manager.play_sound(sound_manager.HOBGOBLIN_DEATH, .15) arcade.window_commands.pause(1.5)
def update(self, slayer_position, room, sprite): self.x = sprite.center_x self.y = sprite.center_y self.attack_cooldown -= 1 if arcade.has_line_of_sight( slayer_position, (self.x, self.y), room.wall_list) and not arcade.has_line_of_sight( slayer_position, (self.x, self.y), room.wall_list, 50): if slayer_position[0] - (self.x, self.y)[0] <= -6: sprite.change_x = -self.movespeed elif slayer_position[0] - (self.x, self.y)[0] >= 6: sprite.change_x = self.movespeed else: sprite.change_x = 0 if slayer_position[1] - (self.x, self.y)[1] <= -6: sprite.change_y = -self.movespeed elif slayer_position[1] - (self.x, self.y)[1] >= 6: sprite.change_y = self.movespeed else: sprite.change_y = 0 if arcade.has_line_of_sight(slayer_position, (self.x, self.y), room.wall_list, 50): if sprite.change_x != 0: sprite.change_x = 0 if sprite.change_y != 0: sprite.change_y = 0 if self.attack_cooldown <= 0: spawn_x = self.x spawn_y = self.y connect_vector = [ slayer_position[0] - spawn_x, slayer_position[1] - spawn_y ] connect_vector = connect_vector / LA.norm(connect_vector) angle = math.degrees(np.arccos(connect_vector)[0]) if slayer_position[1] < spawn_y: angle = -angle connect_vector = np.multiply(connect_vector, self.attack_range) spawn_vector = np.add(connect_vector, [spawn_x, spawn_y]) room_setup.add_enemy_attack(room, spawn_vector[0], spawn_vector[1], angle, self.damage) if self.type == GOBLIN: self.attack_cooldown = 20 sound_manager.play_sound(sound_manager.GOBLIN_ATTACK, .15) else: self.attack_cooldown = 45 sound_manager.play_sound(sound_manager.HOBGOBLIN_ATTACK, .15)
def on_mouse_press(self, x, y, button, modifiers): if not self.in_menu: if self.attack_cooldown == 0: spawn_x = self.player_sprite.center_x spawn_y = self.player_sprite.center_y connect_vector = [x - spawn_x, y - spawn_y] connect_vector = connect_vector / LA.norm(connect_vector) angle = math.degrees(np.arccos(connect_vector)[0]) if y < spawn_y: angle = -angle connect_vector = np.multiply(connect_vector, self.slayer.attack_range) spawn_vector = np.add(connect_vector, [spawn_x, spawn_y]) room_setup.add_player_attack(self.rooms[self.current_room], spawn_vector[0], spawn_vector[1], angle, self.slayer.damage) sound_manager.play_sound(sound_manager.PLAYER_ATTACK, .15) self.attack_cooldown = 15 else: self.check_mouse_press_for_buttons( x, y, self.handler.menu_list[self.handler.menu].buttons)
def room_6_move_room(room, slayer_pos, gm, difficulty): if (difficulty == game.EASY and len(room.easy_enemy_list) == 0) or ( difficulty == game.MODERATE and len(room.moderate_enemy_list) == 0) or (difficulty == game.HARD and len(room.hard_enemy_list) == 0): gm.win_game() elif slayer_pos[1] > SPRITE_SIZE * 15: if slayer_pos[0] < SPRITE_SIZE * 4 and slayer_pos[0] > SPRITE_SIZE * 2: gm.update_room(2) return (SPRITE_SIZE * 23, 5) elif slayer_pos[0] > SPRITE_SIZE * 12 and slayer_pos[ 0] < SPRITE_SIZE * 14: gm.update_room(3) return (SPRITE_SIZE * 7, 5) elif (not room.boss_fight) and slayer_pos[1] < SPRITE_SIZE * 11: add_wall(room, 7, 11) add_wall(room, 8, 11) for fog in room.fog_list: for wall in room.wall_list: if wall.position == fog.position: fog.is_wall = True sound_manager.play_sound(sound_manager.CLOSE_DOOR, .15) room.boss_fight = True return None
def sword_get_picked_up(slayer): slayer.change_damage(1) sound_manager.play_sound(sound_manager.SWORD_PICKUP, .15)
def torch_get_picked_up(slayer): slayer.change_sight(.5) sound_manager.play_sound(sound_manager.TORCH_PICKUP, .15)
def heal_get_picked_up(slayer): slayer.heal(3) sound_manager.play_sound(sound_manager.HEAL, .15)
def shield_get_picked_up(slayer): slayer.change_armor(1) sound_manager.play_sound(sound_manager.SHIELD_PICKUP, .15)
def win_game(self): self.in_menu = True self.handler.set_menu(menuHandler.WIN) sound_manager.play_sound(sound_manager.GAME_WIN, .15)
def command_display_next_topic(self): sound_manager.play_sound() todays_reminder = hint_manager.get_next_topic() self.label.config(fg=random_color_generator.get_random_color(), text=todays_reminder)
def command_display_next_hint(self, data_file_path): sound_manager.play_sound() todays_reminder = hint_manager.get_next_hint(data_file_path) self.label.config(fg=random_color_generator.get_random_color(), text=todays_reminder)
# built in quit function self.quitButton = Button(frame, text="finish and close", bg='blue', font="Arial 25", command=frame.quit) self.quitButton.pack(side=TOP, fill=X) def display_finish_button(self): self.quitButton.pack(side=TOP, fill=X) def command_display_next_hint(self, data_file_path): sound_manager.play_sound() todays_reminder = hint_manager.get_next_hint(data_file_path) self.label.config(fg=random_color_generator.get_random_color(), text=todays_reminder) def command_display_next_topic(self): sound_manager.play_sound() todays_reminder = hint_manager.get_next_topic() self.label.config(fg=random_color_generator.get_random_color(), text=todays_reminder) sound_manager.play_sound() guiToolKit = Tk() guiToolKit.title("daily hint - 每日提醒 - momento zilnic") reminderUi = dailyHintUi(guiToolKit) guiToolKit.mainloop()