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 __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 __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 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()
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]) )
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)
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
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()
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
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()
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)
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)