Пример #1
0
    def __init__(self, width, height):
        self.gameIsPaused = False
        self.width = width
        self.height = height
        self.isPlaying = True
        self.screen = pygame.display.set_mode([width, height])
        self.player = Player(305, 450, self.width)

        self.levelManager = LevelManager(width, height, self.screen,
                                         self.player)
        self.clock = pygame.time.Clock()
        self.currentLevel = MainMenu(self.screen, self)
Пример #2
0
    def __init__(self, **kwargs):
        """

        :param kwargs:
        :return:
        """
        super(GameApp, self).__init__(**kwargs)
        self.textures = textures
        self.authorizations = authorizations
        self.my_event_dispatcher = MenusEventDispatcher()
        self.screen_manager = ScreenManager()

        self.menu_widget = Menu(self.my_event_dispatcher)
        self.menu_screen = Screen(name="Menu")
        self.menu_screen.add_widget(self.menu_widget)
        self.screen_manager.add_widget(self.menu_screen)

        self.game_widget = LevelManager()
        self.game_screen = Screen(name="LevelManager")
        self.game_screen.add_widget(self.game_widget)
        self.screen_manager.add_widget(self.game_screen)

        self.menu_level_widget = MenuLevel(self.my_event_dispatcher)
        self.menu_level_screen = Screen(name="MenuLevel")
        self.menu_level_screen.add_widget(self.menu_level_widget)
        self.screen_manager.add_widget(self.menu_level_screen)

        self.my_event_dispatcher.bind(on_change_screen=self.do_change_screen)
Пример #3
0
    def __init__(self, **kwargs):
        """

        :param kwargs:
        :rtype: void
        """
        super(GameApp, self).__init__(**kwargs)

        self.menu_screen = Screen(name="Menu")
        self.menu_level_screen = Screen(name="MenuLevel")
        self.game_screen = Screen(name="LevelManager")

        self.menu_widget = Menu(self.menus_event_dispatcher, self.music_provider)
        self.menu_screen.add_widget(self.menu_widget)
        self.screen_manager.add_widget(self.menu_screen)

        self.game_widget = LevelManager(self.menus_event_dispatcher, self.music_provider)
        self.game_screen.add_widget(self.game_widget)
        self.screen_manager.add_widget(self.game_screen)

        self.menu_level_widget = MenuLevel(self.menus_event_dispatcher)
        self.menu_level_screen.add_widget(self.menu_level_widget)
        self.screen_manager.add_widget(self.menu_level_screen)

        self.menus_event_dispatcher.bind(on_change_screen=self.do_change_screen)
Пример #4
0
    def load_level(self, path) -> None:
        if self.__level:
            self.__screen.blit(self.__bg, (0, 0))

        self.__level = LevelManager.load_level(path)
        self.__blocks = self.__level.get_blocks()
        self.__entities = self.__get_entities_group()
        self.__camera = Camera(self.__player, self.__level)
        self.__bg = self.__get_bg()
        self.__player.set_spawn_point(self.__level.get_player_spawn())

        self.__player.respawn()
Пример #5
0
    def __init__(self, event_dispatcher, **kwargs):
        """
        Initialize button and textures of MenuLevel.

        :param event_dispatcher: dispatcher
        :param kwargs: args of layout
        :rtype: void
        """
        super(MenuLevel, self).__init__(**kwargs)
        self.event_dispatcher = event_dispatcher
        self.level_service = LevelService()
        self.level_manager = LevelManager(event_dispatcher)

        # Add fond.
        self.canvas.add(
            Rectangle(source='./resources/menu/fondlogo.png', size=Window.size)
        )

        # Add button
        self.add_widget(
            Button(text="Back to Menu", font_name=self.FONT_MENU_LEVEL, background_color=self.color_2,
                   pos_hint={'x': 0.82, 'y': 0}, size_hint=(0.18, 0.15),
                   on_press=self.switch_to_menu_screen)
        )

        menu_level_grid = GridLayout(size_hint=(0.7, 0.45), pos_hint={'x': 0.15, 'y': 0.3}, row=2)
        self.add_widget(menu_level_grid)

        set_list = os.listdir('./resources/maps/')
        set_number = len(set_list)
        menu_level_grid.cols = set_number / 2

        for index in range(1, set_number + 1):
            if index % 2 == 0:
                button_title = "Level " + str(index)
                menu_level_grid.add_widget(
                    Button(text=button_title, font_name=self.FONT_MENU_LEVEL,
                           background_color=self.color_1, on_press=self.launch_level, cls=[index])
                )

            else:
                button_title = "Level " + str(index)
                menu_level_grid.add_widget(
                    Button(text=button_title, font_name=self.FONT_MENU_LEVEL,
                           background_color=self.color_2, on_press=self.launch_level, cls=[index])
                )
Пример #6
0
class GameLoop:
    def __init__(self, width, height):
        self.gameIsPaused = False
        self.width = width
        self.height = height
        self.isPlaying = True
        self.screen = pygame.display.set_mode([width, height])
        self.player = Player(305, 450, self.width)

        self.levelManager = LevelManager(width, height, self.screen,
                                         self.player)
        self.clock = pygame.time.Clock()
        self.currentLevel = MainMenu(self.screen, self)

    def isGameOn(self):
        return self.isPlaying

    def mainLoop(self):
        self.handleGameInput()
        if self.player.isDead():
            self.currentLevel = self.levelManager.levels[
                len(self.levelManager.levels) - 1]
        if self.currentLevel.isActive:
            self.currentLevel.nextLoop()
        else:
            self.currentLevel = self.levelManager.getNextLevel()

        self.clock.tick(60)
        pygame.display.flip()

    def handleGameInput(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.isPlaying = False
            elif event.type == KEYDOWN:
                self.currentLevel.handleInput(event.key)
Пример #7
0
class GameApp(App):
    # sound = None

    def __init__(self, **kwargs):
        """

        :param kwargs:
        :return:
        """
        super(GameApp, self).__init__(**kwargs)
        self.textures = textures
        self.authorizations = authorizations
        self.my_event_dispatcher = MenusEventDispatcher()
        self.screen_manager = ScreenManager()

        self.menu_widget = Menu(self.my_event_dispatcher)
        self.menu_screen = Screen(name="Menu")
        self.menu_screen.add_widget(self.menu_widget)
        self.screen_manager.add_widget(self.menu_screen)

        self.game_widget = LevelManager()
        self.game_screen = Screen(name="LevelManager")
        self.game_screen.add_widget(self.game_widget)
        self.screen_manager.add_widget(self.game_screen)

        self.menu_level_widget = MenuLevel(self.my_event_dispatcher)
        self.menu_level_screen = Screen(name="MenuLevel")
        self.menu_level_screen.add_widget(self.menu_level_widget)
        self.screen_manager.add_widget(self.menu_level_screen)

        self.my_event_dispatcher.bind(on_change_screen=self.do_change_screen)

    def build(self):
        """
        Launch game.

        :rtype: void
        """

        # self.sound = SoundLoader.load('resources/music/test.mp3')
        # if self.sound:
        #     self.sound.play()

        self.icon = './resources/other/logo.png'
        self.title = "'Scape Me"
        self.game_widget.load_set()
        self.screen_manager.current = 'LevelManager'
        return self.screen_manager

    def do_change_screen(self, instance, value, *args):
        """
        When player change screen.

        :param instance:
        :param value:
        :param args:
        :rtype: void
        """
        self.screen_manager.current = value

    def on_pause(self):
        return True
Пример #8
0
def main():
    """ Main Program """

    pygame.init()

    background = Background('city.png', [0,0])

    # Set the height and width of the screen and window title
    size = [Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("Side-scrolling Platformer")

    # Create the player
    player = Player()

    # Create all the levels
    manager = LevelManager(player)
    player.register_manager(manager)

    active_sprite_list = pygame.sprite.Group()

    player.rect.x = Config.RIGHT_LIMIT - player.width  # Start at right scroll border
    player.rect.y = Config.SCREEN_HEIGHT - player.rect.height  # Start on ground
    active_sprite_list.add(player)

    # Loop until the user clicks the close button.
    done = False

    # Used to manage how fast the screen updates
    clock = pygame.time.Clock()

    # Current status of directional keys
    r_down = False
    l_down = False
    u_down = False

    # Used to prevent auto-bunnyhopping. Active while holding up
    jump_lock = False

    large_font = pygame.font.SysFont('comicsans', 30)
    over = False
    level_num = 0
    """ Main program loop until user exits or game quits """

    while not done:
        if level_num % 2 == 0 and manager.current_level_no % 2 == 1:
            background = Background('test.png', [0, 0])
            level_num = 1
        elif level_num % 2 == 1 and manager.current_level_no % 2 == 0:
            background = Background('city.png', [0, 0])
            level_num = 0

        if background.start < background.image.get_width() * -1:
            background.start = background.image.get_width()

        if background.end < background.image.get_width() * -1:
            background.end = background.image.get_width()

        manager.get_current_level().iterations += 1
        score = large_font.render("grade: " + str(round((manager.get_current_level().speed / manager.get_current_level().iterations) / Config.SPEED_MAX * 100, 1)), 1, (255, 255, 255))
        file_name = large_font.render(manager.get_current_level().file_name, 1, (255, 255, 255))
        manager.get_current_level().speed += player.change_x
        skip = False
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True

            # Check for pressed keys
            if event.type == pygame.KEYDOWN:
                key = event.key
                if key == pygame.K_LEFT or key == pygame.K_a:
                    l_down = True
                if key == pygame.K_RIGHT or key == pygame.K_d:
                    r_down = True
                if key == pygame.K_UP or key == pygame.K_w or key == pygame.K_SPACE:
                    u_down = True
                if key == pygame.K_q:
                    manager.end_game()
                if key == pygame.K_s:
                    skip = True
                if key == pygame.K_r:
                    manager.reset_current_level()

            # Check for released keys
            if event.type == pygame.KEYUP:
                key = event.key
                if key == pygame.K_LEFT or key == pygame.K_a:
                    l_down = False
                if key == pygame.K_RIGHT or key == pygame.K_d:
                    r_down = False
                if key == pygame.K_UP or key == pygame.K_w or key == pygame.K_SPACE:
                    u_down = False
                    jump_lock = False

        # Jump if on the ground, reduce grav if airborne (or haven't released UP)
        if u_down:
            if jump_lock:
                player.float()
            else:
                player.jump()
                jump_lock = True

        if r_down and l_down:
            pass  # Do nothing, but maintain speed
        elif r_down:
            player.acc_right()
        elif l_down:
            player.acc_left()
        else:
            player.stop_x()

        # Update the player.
        active_sprite_list.update(background)

        # Update items in the level
        manager.get_current_level().update()

        # If the player gets near the right side, shift the world left (-x)
        if player.rect.right >= Config.RIGHT_LIMIT:
            diff = player.rect.right - Config.RIGHT_LIMIT
            player.rect.right = Config.RIGHT_LIMIT
            manager.get_current_level().shift_world(-diff)

        # If the player gets near the left side, shift the world right (+x)
        if player.rect.left <= Config.LEFT_LIMIT:
            diff = Config.LEFT_LIMIT - player.rect.left
            player.rect.left = Config.LEFT_LIMIT
            manager.get_current_level().shift_world(diff)

        # If the player gets to the end of the level, go to the next level
        current_position = player.rect.x + manager.get_current_level().world_shift

        if skip or current_position < manager.get_current_level().level_limit:
            if not manager.advance_level():
                over = True

        # ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT

        # Invoking background image
        # screen.fill([255, 255, 255])
        # screen.blit(BackGround.image, BackGround.rect)
        screen.blit(background.image, (background.start, 0))
        screen.blit(background.image, (background.end, 0))
        if not over:
            manager.get_current_level().draw(screen)
            active_sprite_list.draw(screen)
            screen.blit(score, (Config.SCREEN_WIDTH / 2 - 2 * score.get_width() + Config.SCREEN_WIDTH / 2, 50))
            screen.blit(file_name, (0.5*file_name.get_width(), 50))
        else:
            end_game(manager, screen, large_font)

        pygame.display.update()
        # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT
 
        # Limit to 60 frames per second
        clock.tick(60)
 
        # Update the screen
 
    # stats screen should come here
    # speed_sum / iterations
    # Be IDLE friendly. If you forget this line, the program will 'hang' on exit.
    pygame.quit()
Пример #9
0
class GameApp(App):
    """
    Main class of the game.
    """

    LOGO_PATH = './resources/other/logo.png'

    GAME_TITLE = "'Scape Me"

    menus_event_dispatcher = MenusEventDispatcher()
    screen_manager = ScreenManager()
    music_provider = MusicProvider()

    def __init__(self, **kwargs):
        """

        :param kwargs:
        :rtype: void
        """
        super(GameApp, self).__init__(**kwargs)

        self.menu_screen = Screen(name="Menu")
        self.menu_level_screen = Screen(name="MenuLevel")
        self.game_screen = Screen(name="LevelManager")

        self.menu_widget = Menu(self.menus_event_dispatcher, self.music_provider)
        self.menu_screen.add_widget(self.menu_widget)
        self.screen_manager.add_widget(self.menu_screen)

        self.game_widget = LevelManager(self.menus_event_dispatcher, self.music_provider)
        self.game_screen.add_widget(self.game_widget)
        self.screen_manager.add_widget(self.game_screen)

        self.menu_level_widget = MenuLevel(self.menus_event_dispatcher)
        self.menu_level_screen.add_widget(self.menu_level_widget)
        self.screen_manager.add_widget(self.menu_level_screen)

        self.menus_event_dispatcher.bind(on_change_screen=self.do_change_screen)

    def build(self):
        """
        Launch game.

        :rtype: void
        """
        self.music_provider.start_sound()
        self.icon = self.LOGO_PATH
        self.title = self.GAME_TITLE
        self.screen_manager.current = 'Menu'
        return self.screen_manager

    def do_change_screen(self, _, value, *args):
        """
        When player change screen.

        :param _:
        :param value:
        :param args:
        :rtype: void
        """

        self.screen_manager.current = value

        # when load level
        if args[0]:
            self.game_widget.load_level_in_set(args[0])

    def on_pause(self):
        """
        Required method
        """
        return True
Пример #10
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((400,400), pygame.RESIZABLE)
    pygame.display.set_caption("Spell Slingers")
    clock = pygame.time.Clock()

    done = False
    
    levelManager = LevelManager(screen)
    levelManager.loadLevel(1)
    levelManager.addPlayer()
    levelManager.playerTurnStart(0)
    gameState = GS_Playing(levelManager)
    
    dT = 0
    while not done:
        dT = clock.tick(60) / 1000
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            if event.type == pygame.VIDEORESIZE:
                screen = pygame.display.set_mode(event.dict['size'], pygame.RESIZABLE)
                windowWidth = event.dict['size'][0]
                windowHeight = event.dict['size'][1]
                levelManager.setWindowSize(windowWidth, windowHeight)
        gameState.checkInputs()
        levelManager.update(dT)
        
        levelManager.draw(screen, dT)        
    pygame.quit()
Пример #11
0
class MenuLevel(FloatLayout):
    """
    Level Menu class.
    """
    FONT_MENU_LEVEL = './resources/menu/test19.ttf'
    color_1 = color['blue_color']
    color_2 = color['dark_blue_color']

    def __init__(self, event_dispatcher, **kwargs):
        """
        Initialize button and textures of MenuLevel.

        :param event_dispatcher: dispatcher
        :param kwargs: args of layout
        :rtype: void
        """
        super(MenuLevel, self).__init__(**kwargs)
        self.event_dispatcher = event_dispatcher
        self.level_service = LevelService()
        self.level_manager = LevelManager(event_dispatcher)

        # Add fond.
        self.canvas.add(
            Rectangle(source='./resources/menu/fondlogo.png', size=Window.size)
        )

        # Add button
        self.add_widget(
            Button(text="Back to Menu", font_name=self.FONT_MENU_LEVEL, background_color=self.color_2,
                   pos_hint={'x': 0.82, 'y': 0}, size_hint=(0.18, 0.15),
                   on_press=self.switch_to_menu_screen)
        )

        menu_level_grid = GridLayout(size_hint=(0.7, 0.45), pos_hint={'x': 0.15, 'y': 0.3}, row=2)
        self.add_widget(menu_level_grid)

        set_list = os.listdir('./resources/maps/')
        set_number = len(set_list)
        menu_level_grid.cols = set_number / 2

        for index in range(1, set_number + 1):
            if index % 2 == 0:
                button_title = "Level " + str(index)
                menu_level_grid.add_widget(
                    Button(text=button_title, font_name=self.FONT_MENU_LEVEL,
                           background_color=self.color_1, on_press=self.launch_level, cls=[index])
                )

            else:
                button_title = "Level " + str(index)
                menu_level_grid.add_widget(
                    Button(text=button_title, font_name=self.FONT_MENU_LEVEL,
                           background_color=self.color_2, on_press=self.launch_level, cls=[index])
                )

    def switch_to_menu_screen(self, *args):
        """
        Required method.
        """
        Logger.info("Propagate Menu")
        propagate_event('Menu', self)

    def launch_level(self, value):
        """
        Load level.

        :param value:
        :rtype: void
        """
        set_id = value.cls[0]
        if self.level_manager.can_load_set(set_id):
            propagate_event('LevelManager', self, set_id)
        else:
            open_pop_up(self, 'not_unlocked', set_id)
Пример #12
0
font = pygame.font.Font("font/AtariClassic-gry3.ttf", 20)
titleFont = pygame.font.SysFont("comicsansms", 90)
authorFont = pygame.font.Font(None, 18)

# Surface
background = pygame.Surface(screen.get_size())

# Sprite Groups
bullets = pygame.sprite.Group()
allSprites = pygame.sprite.Group()

# Assignments
player = Player()
allSprites.add(player)
points = []
levelManager = LevelManager(3)

# Clock to limit speed
clock = pygame.time.Clock()

# Checking
game_over = False
win_screen = False
exit_program = False
initial_screen = True

heart = pygame.image.load("images/heart.gif")
liveInfo = font.render("Live: ", True, white)
initial_screen_image = pygame.image.load("images/initialScreen.gif")
mainSound = pygame.mixer.Sound("sounds/main.ogg")
mainSound.play(-1)