Ejemplo n.º 1
0
    def __init__(self):
        """Initialize all variables needed to run the game. """
        pygame.mixer.pre_init(44100, -16, 2, 2048)
        pygame.mixer.init()
        pygame.init()
        self.screen = pygame.display.set_mode((W_SIZE, H_SIZE), 0, 32)
        pygame.display.set_caption("Flashlight 0.1")

        pygame.font.init()

        music_url = resource_path('assets/sound/Keep Searching.mp3')
        self.music = True
        pygame.mixer.music.load(music_url)
        pygame.mixer.music.play(loops=-1)
        self.sfx = True
        
        self.clock = pygame.time.Clock()
        
        background_url = resource_path('assets/imgs/menu_background.jpg')
        self.menu_background = pygame.image.load(background_url).convert()

        self.grid_size = 40
        self.bound = W_SIZE / self.grid_size, H_SIZE / self.grid_size

        self.state = None
        self.game = None
        self.editor = None

        self.delete_field = None
        self.change_delete_menu = False

        self.level = Level()
        self.level_list = self.level.get_all_levels()
Ejemplo n.º 2
0
    def __init__(self, level, bound, sfx):
        """Initialize all variables, pygame surfaces and menus."""
        self.level = Level(name=level)
        self.player = Player(self.level.get_start_tuple())
        background_url = resource_path('assets/imgs/asphalt.jpg')
        self.background = pygame.image.load(background_url).convert()
        mask_url = resource_path('assets/imgs/mask.png')
        self.mask = pygame.image.load(mask_url).convert_alpha()
        letter_t_url = resource_path('assets/imgs/letter_t.png')
        self.letter_t = pygame.image.load(letter_t_url).convert_alpha()
        self.bound = bound
        self.sfx = sfx

        self._sound_library = {}

        self.goal_reached = False
        self.done = False
        self.direction_pressed = 0

        # -------------------------------------------------------------------------
        # Create Theme:
        # -------------------------------------------------------------------------
        pause_theme = pygame_menu.themes.THEME_DARK.copy()
        pause_theme.background_color = (20, 20, 20, 255)

        self.pause_menu = pygame_menu.Menu(300,
                                           400,
                                           'Pause',
                                           theme=pause_theme)
        self.pause_menu.add_button('Continue', self.cont)
        self.pause_menu.add_vertical_margin(30)
        self.pause_menu.add_button('Main Menu', self.main_menu)
        self.pause_menu.toggle()
Ejemplo n.º 3
0
    def __init__(self, grid_size):
        """Initialize all variables, pygame surfaces and menus."""
        self.grid_size = grid_size

        background_url = resource_path('assets/imgs/asphalt.jpg')
        self.background = pygame.image.load(background_url).convert()

        # -------------------------------------------------------------------------
        # Create Theme:
        # -------------------------------------------------------------------------
        pause_theme = pygame_menu.themes.THEME_DARK.copy()
        pause_theme.background_color=(20, 20, 20, 255)

        # -------------------------------------------------------------------------
        # Create Menu: Pause Menu
        # -------------------------------------------------------------------------

        self.pause_menu = pygame_menu.Menu(300, 400, 'Pause',
                                      theme=pause_theme)
        self.pause_menu.add_text_input('Name: ', onchange=self.store, maxchar=15, align=pygame_menu.locals.ALIGN_LEFT)
        self.pause_menu.add_button('Save', self.save)
        self.pause_menu.add_vertical_margin(30)
        self.pause_menu.add_button('Main Menu', self.main_menu)
        self.pause_menu.toggle()

        # -------------------------------------------------------------------------
        # Create Menu: Prompt
        # -------------------------------------------------------------------------

        self.prompt = pygame_menu.Menu(300, 400, 'Pause',
                                      theme=pygame_menu.themes.THEME_ORANGE)
        self.prompt.add_label('You need to at least')
        self.prompt.add_label('place a start and a goal!')
        self.prompt.add_button('Back', self.prompt.toggle)
        self.prompt.toggle()

        self.stored_name = ''
        self.new_level = None
        self.done = False

        self.level = Level()
        self.mouse_pos = (0,0)
        self.mouse_pressed = False
        self.d_pressed = False
        self.active = 1
        self.current_tile = Start(self.mouse_pos)
        self.first_placed = None

        occupied_url = resource_path('assets/imgs/red_cross.png')
        self.occupied_tile = pygame.image.load(occupied_url).convert_alpha()
        delete_url = resource_path('assets/imgs/delete_mask.png')
        self.delete_mask = pygame.image.load(delete_url).convert_alpha()

        self.moved_after_place = True
Ejemplo n.º 4
0
 def activate(self):
     if self.pressed:
         return False
     else:
         self.pressed = True
         surf_url = resource_path('assets/imgs/green_button.png')
         self.surf = pygame.image.load(surf_url).convert_alpha()
         return True
Ejemplo n.º 5
0
 def save(self, name):
     for obj in self.boxes_list.values():
         obj.del_surf()
     folder = resource_path(os.path.join("assets/levels", name))
     if not os.path.exists(folder):
         os.mkdir(folder)
         file = os.path.join(folder, name + '.pkl')
         with open(file, 'wb') as output:
             pickle.dump([self.get_objects()], output, protocol=pickle.HIGHEST_PROTOCOL)
     else:
         print('level already exists!')
Ejemplo n.º 6
0
 def load_map(self, name):
     folder = resource_path(os.path.join("assets/levels", name))
     if os.path.exists(folder):
         file = os.path.join(folder, name + '.pkl')
         with open(file, 'rb') as input:
             data = pickle.load(input)
             self.boxes_list, = data
             for obj in self.boxes_list.values():
                 obj.add_surf()
     else:
         print('level does not exist')
Ejemplo n.º 7
0
 def play_sound(self, path):
     """If not already done, initialize a sound and then play it."""
     path = os.path.join('assets/sound/SFX/', path)
     path = resource_path(path)
     sound = self._sound_library.get(path)
     if sound == None:
         canonicalized_path = path.replace('/',
                                           os.sep).replace('\\', os.sep)
         sound = pygame.mixer.Sound(canonicalized_path)
         self._sound_library[path] = sound
     if self.sfx:
         sound.play()
Ejemplo n.º 8
0
 def delete_level(self, name):
     import shutil
     folder = resource_path(os.path.join("assets/levels", name))
     shutil.rmtree(folder)
     pass
Ejemplo n.º 9
0
 def get_all_levels(self):
     list_names = []
     folder = resource_path("assets/levels")
     list_names = [element for element in os.listdir(folder) if os.path.isdir(os.path.join(folder, element))]
     return list_names
Ejemplo n.º 10
0
    def run(self):
        """Run the game."""

        # -------------------------------------------------------------------------
        # Create Theme:
        # -------------------------------------------------------------------------
        mytheme = pygame_menu.themes.THEME_DARK.copy()
        mytheme.background_color=(0, 0, 0, 0)


        # -------------------------------------------------------------------------
        # Create menus: Choose Level
        # -------------------------------------------------------------------------

        self.play_menu = pygame_menu.Menu(480, 640, 'Chose Level',
                                     theme=mytheme)
        self.fill_play_menu(new_level=1)

        # -------------------------------------------------------------------------
        # Create menus: Delete Level
        # -------------------------------------------------------------------------

        self.delete_menu = pygame_menu.Menu(480, 640, 'Delete Level',
                                       theme=mytheme)
        self.delete_menu.add_text_input('Level: ', onchange=self.text_input, onreturn=self.delete, maxchar=15, align=pygame_menu.locals.ALIGN_LEFT)
        self.label_widget = self.delete_menu.add_label("Press 'Enter' to delete", align=pygame_menu.locals.ALIGN_LEFT, label_id='label')
        self.v_margin = self.delete_menu.add_vertical_margin(30)
        self.delete_menu.add_button('Back', pygame_menu.events.RESET, button_id='back')

        # -------------------------------------------------------------------------
        # Create menus: Editor Help
        # -------------------------------------------------------------------------

        editorhelp_menu = pygame_menu.Menu(480, 640, 'Editor Help',
                                       theme=mytheme)
        editorhelp_menu.add_label('Left-click for placing active object')
        editorhelp_menu.add_label('Right-click to abort placing')
        editorhelp_menu.add_label('Press 1 - 5 to access all objects')
        editorhelp_menu.add_label('Press \'d\' for deleting objects')
        editorhelp_menu.add_label('Press \'ESC\' to save the level')
        editorhelp_menu.add_vertical_margin(30)
        editorhelp_menu.add_button('Back', editorhelp_menu.reset, 1)

        # -------------------------------------------------------------------------
        # Create menus: Editor
        # -------------------------------------------------------------------------

        editor_menu = pygame_menu.Menu(480, 640, 'Editor',
                                       theme=mytheme)
        editor_menu.add_button('New Level', self.start_editor)
        editor_menu.add_button('Delete Level', self.delete_menu)
        editor_menu.add_button('Help', editorhelp_menu)
        editor_menu.add_button('Back', pygame_menu.events.RESET)

        # -------------------------------------------------------------------------
        # Create menus: Help
        # -------------------------------------------------------------------------

        help_menu = pygame_menu.Menu(480, 640, 'Help',
                                     theme=mytheme)
        help_menu.add_label('To finish a level you must reach the goal:')
        im_url = resource_path('assets/imgs/goal_help.png')
        help_menu.add_image(im_url)
        help_menu.add_label('Move with the arrow keys')
        help_menu.add_label('Pause the game with \'ESC\'')
        help_menu.add_vertical_margin(30)
        help_menu.add_label('Build your own levels in the editor')
        help_menu.add_vertical_margin(30)
        help_menu.add_button('Back', pygame_menu.events.RESET, align=pygame_menu.locals.ALIGN_CENTER)

        # -------------------------------------------------------------------------
        # Create menus: Settings Menu
        # -------------------------------------------------------------------------

        settings_menu = pygame_menu.Menu(480, 640, 'Settings',
                                         theme=mytheme)
        settings_menu.add_selector('Music ',
                                   [('ON', True),
                                    ('OFF', False)],
                                    onchange=self.change_music)
        settings_menu.add_selector('Sound FX ',
                                   [('ON', True),
                                    ('OFF', False)],
                                    onchange=self.change_sfx)
        settings_menu.add_button('Back', pygame_menu.events.RESET)

        # -------------------------------------------------------------------------
        # Create menus: Main Menu
        # -------------------------------------------------------------------------

        self.main_menu = pygame_menu.Menu(480, 640, 'Main Menu',
                                     theme=mytheme)

        self.main_menu.add_button('Play', self.play_menu)
        self.main_menu.add_button('Help', help_menu)
        self.main_menu.add_button('Settings', settings_menu)
        self.main_menu.add_button('Editor', editor_menu)
        self.main_menu.add_button('Quit', pygame_menu.events.EXIT)
        
        while True:

            self.clock.tick(FPS)

            events = pygame.event.get()
            for event in events:
                if event.type == QUIT:
                    pygame.quit()
                    exit()
            
            if self.main_menu.is_enabled():
                self.screen.blit(self.menu_background, (0,0))
                self.main_menu.draw(self.screen)
                self.main_menu.update(events)
                if self.change_delete_menu:
                    self.main_menu.draw(self.screen)
                    pygame.display.flip()
                    time.sleep(1.0)
                    self.update_delete_menu()

            elif self.state == 'game':
                done = self.game.update(events, self.screen)
                if done:
                    self.state = None
                    self.main_menu.toggle()
            elif self.state == 'edit':
                done, new_level = self.editor.update(events, self.screen)
                if done:
                    self.state = None
                    self.main_menu.toggle()
                    if new_level is not None:
                        self.fill_play_menu(new_level)

            pygame.display.flip()
Ejemplo n.º 11
0
 def add_surf(self):
     surf_url = resource_path('assets/imgs/red_button.png')
     self.surf = pygame.image.load(surf_url).convert_alpha()
Ejemplo n.º 12
0
 def activate(self):
     self.open = True
     surf_url = resource_path('assets/imgs/green_block.png')
     self.surf = pygame.image.load(surf_url).convert_alpha()