def load_skin_selection_menu(): print("Loading the skin selection menu...") x_arrow, y_arrow = game.Game.LENGTH / 3.5, - game.Game.LENGTH / 6 arrow_height, arrow_width = 34.6, 30 rect_txt_p1 = - (y_arrow + arrow_height / 2), - x_arrow + arrow_width / 2 rect_txt_p2 = - (y_arrow - arrow_height / 2), x_arrow - arrow_width / 2 rect_window_p1 = rect_txt_p1[0] - 20, rect_txt_p1[1] # 20 : shift between the two rectangles rect_window_p2 = rect_txt_p1[0] - 20 - Menu.SKIN_WINDOW_HEIGHT, rect_txt_p2[1] engine.init_engine() engine.set_keyboard_handler(Menu.keyboard_skin) _ = engine.GameObject(x_arrow, y_arrow, 0, 0, "arrow_right_skin", "gray", True) _ = engine.GameObject(- x_arrow, y_arrow, 0, 0, "arrow_left_skin", "gray", True) _ = shapes.Rectangle(rect_window_p1, rect_window_p2) Menu.skin_rect = shapes.Rectangle(rect_txt_p1, rect_txt_p2) Menu.display_skin()
def loadScene(): global Scene gameObjects = [] mtransform = engine.Transform(engine.Vector2(50, 50), 0, 0) mrendere = engine.Renderer(pygame.image.load("sprite/chat.png")) coponents = [] spaceShip = engine.GameObject(mtransform, mrendere, coponents) gameObjects.append(spaceShip) scene = engine.Scene(gameObjects) return
def load_level_selection_menu(): print("Loading the level selection menu...") pos_arrow = - game.Game.LENGTH // 5, 3 * Menu.LEVEL_LINE_HEIGHT + Menu.FONT_SIZE rect_p1 = game.Game.LENGTH // 2, game.Game.LENGTH // 2 rect_p2 = - game.Game.LENGTH // 2, - game.Game.LENGTH // 2 engine.init_engine() engine.set_keyboard_handler(Menu.keyboard_lvl) Menu.cursor_position = Menu.cursor_position_on_screen = 1 assert Menu.select_arrow is None, "Select arrow already initialized" Menu.lvl_rect = shapes.Rectangle(rect_p1, rect_p2, color_edge="white") Menu.select_arrow = engine.GameObject(*pos_arrow, 0, 0, "select_arrow", "black") engine.add_obj(Menu.select_arrow) Menu.display_level()
def display_skin(): y_arrow = - game.Game.LENGTH / 6 arrow_height = 34.6 y0 = y_arrow + arrow_height / 2 + 20 r = Menu.skin_radius_list[Menu.skin_cursor] pos_skin_unpowered = 0, y0 + (Menu.SKIN_WINDOW_HEIGHT - r) / 3 pos_skin_powered = 0, pos_skin_unpowered[1] + (Menu.SKIN_WINDOW_HEIGHT + 2 * r) / 3 font_size = 15 txt_pos = 0, y_arrow - font_size / 2 - 5 if Menu.current_skin is not None: engine.del_obj(Menu.current_skin) engine.del_obj(Menu.current_skin_powered) Menu.current_skin = engine.GameObject(*pos_skin_unpowered, 0, 0, Menu.skin_list[Menu.skin_cursor], "white", True) Menu.current_skin_powered = engine.GameObject(*pos_skin_powered, 0, 0, Menu.skin_list[Menu.skin_cursor] + "_powered", "white", True) Menu.current_skin.angle = 90 Menu.current_skin_powered.angle = 180 engine.add_obj(Menu.current_skin) Menu.skin_rect.draw() turtle.setpos(*txt_pos) turtle.pencolor("black") turtle.write(Menu.skin_list[Menu.skin_cursor], align="center", font=("Arial", font_size, "normal"))
def load_main_menu(): print("Loading the main menu...") pos_arrow = - game.Game.LENGTH / 5, game.Game.LENGTH / 9 pos_title = 0, game.Game.LENGTH / 3 x0, y0 = pos_arrow[0] + 40, pos_arrow[1] - Menu.LINE_HEIGHT / 2 + 5 # + 5 to have arrow and text aligned font_size_title = 55 engine.set_keyboard_handler(Menu.keyboard_main) assert Menu.select_arrow is None, "Select arrow already initialized" Menu.select_arrow = engine.GameObject(*pos_arrow, 0, 0, "select_arrow", "black") engine.add_obj(Menu.select_arrow) Menu.cursor_position = 0 turtle.clear() turtle.setpos(*pos_title) # options to select turtle.write("Name of the game", align="center", font=("Arial", font_size_title, "normal")) str_list = ["Choose a level", "Tutorial", "Choose a skin", "Quit game"] for i in range(len(str_list)): turtle.setpos(x0, y0 - i * Menu.LINE_HEIGHT) turtle.write(str_list[i], font=("Arial", Menu.FONT_SIZE, "normal")) if not Menu.engine_launched: Menu.engine_launched = True engine.engine()
def run_game(): global link, camera, camera_movement, \ link_movement, room_movement, var, game_map, force_exit, textboxes var = { 'game_ticks': 0, 'can_move': True, 'move_camera': False, 'camera_increment': 0, 'clear_previous': False, 'current_frame': 0, 'animation_frames': 0, 'camera_position': (1, 11), 'short_grass_drawn': False, 'invert': True } force_exit = False textboxes = [] link = game.link.Link() camera = engine.GameObject(collision_rect=(pygame.Rect( (0, 0), (COORDINATE_WIDTH, COORDINATE_HEIGHT))), handle_collisions=True, object_type="camera", persistent=True) camera.collision_rect.center = camera.rect.center link.set_animation('link_walk_down') camera_movement = { 0: (TRANSITION_SPEED * (COORDINATE_WIDTH / 32), 0), 1: (0, -TRANSITION_SPEED * (COORDINATE_HEIGHT / 32)), 2: (-TRANSITION_SPEED * (COORDINATE_WIDTH / 32), 0), 3: (0, TRANSITION_SPEED * (COORDINATE_HEIGHT / 32)) } room_movement = { 0: (TRANSITION_SPEED * .5, 0), 1: (0, -TRANSITION_SPEED * .5), 2: (-TRANSITION_SPEED * .5, 0), 3: (0, TRANSITION_SPEED * .5) } game_scene.insert_object_centered( link, (112 + COORDINATE_WIDTH * var['camera_position'][0], 80 + COORDINATE_HEIGHT * var['camera_position'][1])) game_scene.insert_object_centered( camera, (80 + COORDINATE_WIDTH * var['camera_position'][0], 64 + COORDINATE_HEIGHT * var['camera_position'][1])) current_state.update_collisions() game_scene.center_view_on_object('game_view', camera) game_map.build_world(game_scene, game_scene.view_rects['game_view']) build_world() # Game loop while True: if force_exit: # print("Exit has been forced, ending run_game") return False clock.tick() if clock.update_ready: update_clock() update_logic() resource_manager.update_sound() if clock.frame_ready: # Draw functions draw_game() # Update display pygame.display.flip() # Event handling for event in pygame.event.get(): if event.type == QUIT: terminate() handle_event(event) pygame.display.set_caption("FPS: " + str(clock.fps))