def __init__(self, master, victory: bool): Window.__init__( self, master=master, bg_music=None if victory is None else RESOURCES.MUSIC["end"]) self.master = master self.bg = RectangleShape(self.width, self.height, (0, 0, 0, 170)) self.frame = RectangleShape(0.5 * self.width, 0.5 * self.height, GREEN_DARK, outline=2) self.victory = victory if victory is not None: message = "{winner} won".format( winner="You" if victory else "Enemy") else: message = "The enemy has left\nthe game" self.text_finish = Text(message, font=(None, 70)) params_for_all_buttons = { "font": (None, 40), "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "highlight_color": YELLOW } self.button_restart = Button(self, "Restart", callback=self.restart, **params_for_all_buttons) self.button_return_to_menu = Button(self, "Return to menu", callback=self.stop, **params_for_all_buttons) self.ask_restart = False self.bind_key(pygame.K_ESCAPE, lambda event: self.stop())
def __init__(self, master: Window, champion_list: List[Tuple[str]]): Window.__init__(self, bg_music=AUDIO["battle"], bg_color=BLUE_DARK) self.bind_key(pygame.K_ESCAPE, lambda key: self.stop()) loading_page = Loading(font=(FONT["death_star"], 270)) loading_page.show(master) self.champions = list() self.not_created = list() for file, name in champion_list: champion = Champion(file, name) if not champion.create(): self.not_created.append(name) else: self.champions.append(champion) self.add(champion) if len(self.not_created) == 0: self.memory_size = (0, 0) self.init_gameplay() else: msg = "\n".join(f" - {name} cannot be created" for name in self.not_created) msg += "\n" + "\n" + "Press Escape to return\nto the menu" self.error_message = Text(msg, (FONT["death_star"], 70), YELLOW, justify="center", center=self.center) loading_page.hide(self)
def __init__(self, master=None): Window.__init__(self, bg_color=None) if master is not None: self.bg = master.bg self.frame = RectangleShape(0.5 * self.w, 0.5 * self.h, BLUE, outline=3) self.title = Text("Settings", font=(FONT["death_star"], 50), color=YELLOW) params_for_all_scales = { "width": 0.7 * self.frame.w, "height": 50, "color": BLUE_DARK, "scale_color": BLUE_LIGHT, "from_": 0, "to": 100, "outline": 3 } params_for_all_buttons = { "font": (FONT["death_star"], 45), "color": YELLOW, "hover_sound": AUDIO["clank"], "on_click_sound": AUDIO["laser"], } self.scale_sound_volume = Scale( self, **params_for_all_scales, default=Window.sound_volume() * 100, command=self.update_sound_volume ) self.scale_music_volume = Scale( self, **params_for_all_scales, default=Window.music_volume() * 100, command=self.update_music_volume ) self.button_return = TextButton(self, "Return", **params_for_all_buttons, command=self.stop) self.bind_key(pygame.K_ESCAPE, lambda key: self.stop())
def __init__(self, master): Window.__init__(self, master=master, bg_music=master.bg_music) self.bg = RectangleShape(*self.size, (0, 0, 0, 170)) self.frame = RectangleShape(0.50 * self.width, 0.50 * self.height, GREEN, outline=3) self.text = Text("Are you sure you want\nto buy this car ?", (RESOURCES.FONT["algerian"], 60), justify=Text.T_CENTER) self.button_yes = Button(self, "Yes", self.text.font, bg=GREEN, hover_bg=GREEN_LIGHT, active_bg=GREEN_DARK, hover_sound=RESOURCES.SFX["select"], on_click_sound=RESOURCES.SFX["validate"], highlight_color=YELLOW, callback=self.buy) self.button_red_cross = ImageButton( self, img=RESOURCES.IMG["red_cross"], active_img=RESOURCES.IMG["red_cross_hover"], hover_sound=RESOURCES.SFX["select"], on_click_sound=RESOURCES.SFX["back"], callback=self.stop, highlight_color=YELLOW) self.buyed = False self.bind_key(pygame.K_ESCAPE, lambda event: self.stop(sound=RESOURCES.SFX["back"])) self.bind_joystick( 0, "B", lambda event: self.stop(sound=RESOURCES.SFX["back"]))
def __init__(self, master): Window.__init__(self, master=master, bg_music=master.bg_music) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop()) self.bind_joystick(0, "START", lambda event: self.stop()) self.bind_joystick(0, "B", lambda event: self.stop()) self.master = master self.bg = RectangleShape(*self.size, (0, 0, 0, 170)) params_for_all_buttons = { "font": (RESOURCES.FONT["algerian"], 100), "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "hover_sound": RESOURCES.SFX["select"], "on_click_sound": RESOURCES.SFX["validate"], "outline": 3, "highlight_color": YELLOW } self.menu_buttons = ButtonListVertical(offset=30) self.menu_buttons.add( Button(self, "Return", **params_for_all_buttons, callback=self.stop), Button(self, "Options", **params_for_all_buttons, callback=self.show_options), Button(self, "Garage", **params_for_all_buttons, callback=self.return_to_garage), Button(self, "Menu", **params_for_all_buttons, callback=self.return_to_menu))
def __init__(self, master: Window, action: str): Window.__init__(self, master=master, bg_music=master.bg_music) self.action = action self.bg = RectangleShape(self.width, self.height, (0, 0, 0, 170)) self.frame = RectangleShape(0.4 * self.width, 0.4 * self.height, BLACK, outline=3, outline_color=WHITE) self.escape = Text( "Echap (clavier) ou bouton START (manette): Annuler", font=("calibri", 30), color=WHITE) self.instruction = Text("Appuyez sur une touche", font=("calibri", 50), color=WHITE) for event in (pygame.KEYDOWN, pygame.JOYBUTTONDOWN, pygame.JOYAXISMOTION, pygame.JOYHATMOTION): self.bind_event(event, self.choose) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop(sound=RESOURCES.SFX["back"])) self.bind_joystick( 0, "START", lambda event: self.stop(sound=RESOURCES.SFX["back"]))
def __init__(self, master): Window.__init__(self, master=master, bg_music=master.bg_music) self.master = master self.bg = RectangleShape(self.width, self.height, (0, 0, 0, 170)) self.frame = RectangleShape(0.5 * self.width, 0.5 * self.height, GREEN_DARK, outline=2) self.text = Text("Waiting for enemy", font=(None, 70))
def __init__(self, master): Window.__init__(self, master=master) self.master = master self.bg = RectangleShape(self.width, self.height, (0, 0, 0, 170)) self.frame = RectangleShape(0.5 * self.width, 0.5 * self.height, GREEN_DARK, outline=2) self.victory = None self.text_finish = Text(font=(None, 70)) self.button_restart = Button(self, "Restart", font=(None, 40), callback=self.restart) self.button_return_to_menu = Button(self, "Return to menu", font=(None, 40), callback=self.stop) self.ask_restart = False self.bind_key(pygame.K_ESCAPE, lambda event: self.stop())
def __init__(self, player_id: int): Window.__init__(self, bg_color=(0, 200, 255), bg_music=RESOURCES.MUSIC["setup"]) self.gameplay = Gameplay(player_id) self.count_down = CountDown(self, 60, "Time left: {seconds}", font=(None, 70), color=WHITE) self.start_count_down = lambda: self.count_down.start( at_end=self.timeout) if self.client_socket.connected() else None params_for_all_buttons = { "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "highlight_color": YELLOW } self.button_back = ImageButton(self, RESOURCES.IMG["arrow_blue"], **params_for_all_buttons, rotate=180, size=50, callback=self.stop) self.navy_grid = DrawableListVertical(offset=0, bg_color=(0, 157, 255)) for i in range(NB_LINES_BOXES): box_line = DrawableListHorizontal(offset=0) for j in range(NB_COLUMNS_BOXES): box_line.add(BoxSetup(self, size=BOX_SIZE, pos=(i, j))) self.navy_grid.add(box_line) self.ships_list = DrawableListVertical(offset=70, justify="left") for ship_name, ship_infos in SHIPS.items(): ship_line = DrawableListHorizontal(offset=ship_infos["offset"]) for _ in range(ship_infos["nb"]): ship_line.add(ShipSetup(self, ship_name, ship_infos["size"])) self.ships_list.add(ship_line) option_size = 50 self.button_restart = Button.withImageOnly( self, Image(RESOURCES.IMG["reload_blue"], size=option_size), callback=self.reinit_all_ships, **params_for_all_buttons) self.button_random = Button.withImageOnly(self, Image( RESOURCES.IMG["random"], size=option_size), callback=self.shuffle, **params_for_all_buttons) self.button_play = Button(self, "Play", font=(None, 40), callback=self.play, **params_for_all_buttons)
def __init__(self): Window.__init__(self, bg_color=(0, 200, 255)) self.player_id = 0 self.button_back = ImageButton(self, RESOURCES.IMG["arrow_blue"], rotate=180, size=50, callback=self.stop, highlight_color=YELLOW) self.player_grid = PlayerNavy(self, self.client_socket) self.opposite_grid = OppositeNavy(self, self.client_socket) self.ai = AI() self.turn_checker = TurnArrow() self.restart = False self.bind_key(pygame.K_ESCAPE, lambda event: self.stop()) self.text_finish = Text("Finish !!!", font=(None, 120), color=WHITE) self.window_finish = FinishWindow(self) self.game_finished = False
def __init__(self, master): Window.__init__(self, bg_color=master.bg_color, bg_music=master.bg_music) params_for_button = { "highlight_color": YELLOW, "hover_sound": RESOURCES.SFX["select"], "on_click_sound": RESOURCES.SFX["back"] } self.master = master self.button_back = ImageButton(self, img=RESOURCES.IMG["blue_arrow"], **params_for_button, callback=self.stop) self.objects.add(master.text_highscore, master.text_money) self.text_title = Text("ENVIRONMENT", (RESOURCES.FONT["algerian"], 90), GREEN_DARK, shadow=True, shadow_x=2, shadow_y=2) self.environment = ButtonListHorizontal(offset=15) self.texts = DrawableList() for name, color in ENVIRONMENT.items(): b = Button(self, img=Image(RESOURCES.IMG[name], max_width=180, max_height=180), compound="center", outline=3, callback=lambda env=name: self.play(env), bg=color, hover_bg=change_saturation(color, -20), active_bg=change_brightness(color, -20), hover_sound=RESOURCES.SFX["select"], on_click_sound=RESOURCES.SFX["validate"], highlight_color=YELLOW) b.set_size(200) self.texts.add( Text(name.upper(), (RESOURCES.FONT["algerian"], 50), GREEN_DARK, shadow=True, shadow_x=2, shadow_y=2)) self.environment.add(b) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop(sound=RESOURCES.SFX["back"])) self.bind_joystick( 0, "B", lambda event: self.stop(sound=RESOURCES.SFX["back"]))
def __init__(self, master: Window): Window.__init__(self, bg_color=BLUE_DARK, bg_music=AUDIO["crusaders"]) loading_page = Loading(font=(FONT["death_star"], 270)) loading_page.show(master) self.bg_title = RectangleShape(self.width, self.height, self.bg_color) self.title = Text("Battle", font=(FONT["death_star"], 150), color=YELLOW) self.subtitle = Text("Choose your champions for the fight", font=(FONT["death_star"], 70), color=YELLOW) self.params_for_all_buttons = { "font": (FONT["death_star"], 80), "color": YELLOW, "hover_fg": (255, 255, 128), "hover_sound": AUDIO["clank"], "on_click_sound": AUDIO["laser"], "outline": 2, "outline_color": YELLOW, "offset": 6, } self.button_menu = TextButton(self, "Menu", **self.params_for_all_buttons, command=self.stop) self.champions = list() champion_files = sorted( os.path.join(CHAMPIONS_FOLDER, file) for file in os.listdir(CHAMPIONS_FOLDER) if file.endswith(".s")) for file in champion_files: name = get_champion_name(file) champion = ChampionViewer(self, file, name, **self.params_for_all_buttons) self.champions.append(champion) self.add(champion) self.selected = list() self.start_champion = 0 self.move_champion_up = False self.move_champion_down = False self.infos = Infos(self, 1, 1, self.bg_color, outline=3, outline_color=YELLOW) self.bind_key(pygame.K_ESCAPE, lambda key: self.stop()) self.bind_event(pygame.MOUSEBUTTONDOWN, self.move_champion_list) loading_page.hide(self)
def __init__(self, master: Window): Window.__init__(self, bg_color=BACKGROUND_COLOR) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop()) self.master = master self.logo = Image(RESOURCES.IMG["logo"]) arrow = pygame.transform.flip(RESOURCES.IMG["arrow"], True, False) self.button_back = ImageButton(self, img=arrow, width=100, callback=self.stop, active_offset=(0, 5), highlight_color=YELLOW) self.grid = FourInARowGrid(self, self.width / 2, self.height * 0.75) self.__player_turn = 0 self.player_who_start_first = 0 self.player = 0 self.__turn = str() self.__turn_dict = dict() self.__score_player = self.__score_enemy = 0 self.__highlight_line_window_callback = None self.enemy = str() self.ai = FourInARowAI() self.text_score = Text() self.text_player_turn = Text() self.left_options = ButtonListVertical(offset=50) self.left_options.add( Button(self, "Restart", theme="option", callback=self.restart), Button(self, "Quit game", theme="option", callback=self.quit_game)) self.text_winner = Text() self.text_drawn_match = Text("Drawn match.") self.token_players = Grid(self) for row in range(2): self.token_players.place(CircleShape(20, PLAYER_TOKEN_COLOR[row + 1], outline=2, outline_color=WHITE), row, column=1, padx=5, pady=5, justify="left") self.enemy_quit_dialog = EnemyQuitGame(self)
def __init__(self, master: Window): Window.__init__(self, bg_color=BLUE_DARK, bg_music=AUDIO["dark_techno_city"]) loading_page = Loading(font=(FONT["death_star"], 270)) loading_page.show(master) self.title = Text("Editor", font=(FONT["death_star"], 150), color=YELLOW) self.subtitle = Text("Choose the champion to edit", font=(FONT["death_star"], 70), color=YELLOW) self.params_for_all_buttons = { "font": (FONT["death_star"], 80), "color": YELLOW, "hover_fg": (255, 255, 128), "hover_sound": AUDIO["clank"], "on_click_sound": AUDIO["laser"], "outline": 2, "outline_color": YELLOW, "offset": 6, } self.button_menu = TextButton(self, "Menu", **self.params_for_all_buttons, command=self.stop) self.champions = list() champion_files = sorted( os.path.join(CHAMPIONS_FOLDER, file) for file in os.listdir(CHAMPIONS_FOLDER) if file.endswith(".s")) for file in champion_files: name = get_champion_name(file) champion = ChampionEditor(self, file, name, **self.params_for_all_buttons) self.champions.append(champion) self.add(champion) self.new_file = TextButton(self, "New", **self.params_for_all_buttons, command=self.launch_assembly_editor) self.editors = list() self.bind_key(pygame.K_ESCAPE, lambda key: self.stop()) loading_page.hide(self)
def __init__(self, master: Window): Window.__init__(self) self.bg = master.bg self.title = Text("Game", font=(FONT["death_star"], 220), color=YELLOW) params_for_all_buttons = { "bg": BLUE, "hover_bg": BLUE_LIGHT, "active_bg": BLUE_DARK, "active_fg": YELLOW, "hover_sound": AUDIO["clank"], "on_click_sound": AUDIO["laser"], "outline": 5, } params_for_section_button = { "font": (FONT["death_star"], 200) } self.button_battle = Button(self, "Battle", **params_for_all_buttons, **params_for_section_button, command=self.launch_battle) self.button_edit = Button(self, "Editor", **params_for_all_buttons, **params_for_section_button, command=self.launch_editor) self.button_menu = Button(self, "Menu", **params_for_all_buttons, font=(FONT["death_star"], 80), command=self.stop)
def __init__(self): Window.__init__(self, bg_color=(0, 200, 255)) self.gameplay = Gameplay() self.enemy_quit_window = EnemyQuitGame(self) self.transition = GameSetupTransition() self.count_down = CountDown(self, 60, "Time left: {seconds}", font=(None, 70), color=WHITE) self.start_count_down = lambda: self.count_down.start( at_end=self.timeout) if self.client_socket.connected() else None self.button_back = ImageButton(self, RESOURCES.IMG["arrow_blue"], rotate=180, size=50, callback=self.stop) self.navy_grid = Grid(self, bg_color=(0, 157, 255)) self.__boxes_dict = {(i, j): BoxSetup(self, size=BOX_SIZE, pos=(i, j)) for i in range(NB_LINES_BOXES) for j in range(NB_COLUMNS_BOXES)} self.__boxes_list = list(self.__boxes_dict.values()) self.navy_grid.place_multiple(self.__boxes_dict) self.ships_list = DrawableListVertical(offset=70, justify="left") for ship_name, ship_infos in SHIPS.items(): ship_line = DrawableListHorizontal(offset=ship_infos["offset"]) for _ in range(ship_infos["nb"]): ship_line.add(ShipSetup(self, ship_name, ship_infos["size"])) self.ships_list.add(ship_line) option_size = 50 self.button_restart = Button(self, img=Image(RESOURCES.IMG["reload_blue"], size=option_size), callback=self.reinit_all_ships) self.button_random = Button(self, img=Image(RESOURCES.IMG["random"], size=option_size), callback=self.shuffle) self.button_play = Button(self, "Play", font=(None, 40), callback=self.play)
def __init__(self, master): Window.__init__(self, master=master, bg_music=master.bg_music) self.bg = RectangleShape(self.width, self.height, (0, 0, 0, 170)) self.frame = RectangleShape(0.5 * self.width, 0.5 * self.height, GREEN_DARK, outline=2) self.text_finish = Text("The enemy has left\nthe game", font=(None, 70)) params_for_all_buttons = { "font": (None, 40), "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "highlight_color": YELLOW } self.button_return_to_menu = Button(self, "Return to menu", callback=self.stop, **params_for_all_buttons) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop())
def __init__(self): Window.__init__(self, size=(1280, 720), flags=pygame.DOUBLEBUF, bg_music=RESOURCES.MUSIC["menu"]) self.set_icon(RESOURCES.IMG["icon"]) self.set_title(f"Navy - v{__version__}") self.set_fps(60) self.disable_key_joy_focus_for_all_window() self.bg = Image(RESOURCES.IMG["menu_bg"], self.size) self.logo = Image(RESOURCES.IMG["logo"]) params_for_all_buttons = { "font": (None, 100), "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "outline": 3, "highlight_color": YELLOW, } params_for_dialogs = { "outline": 5, "hide_all_without": [self.bg, self.logo] } self.start_game = NavySetup(1) self.multiplayer_server = PlayerServer(self, **params_for_dialogs) self.multiplayer_client = PlayerClient(self, **params_for_dialogs) self.dialog_credits = Credits(self, **params_for_dialogs) self.dialog_options = Options(self, **params_for_dialogs) self.menu_buttons = ButtonListVertical(offset=30) self.menu_buttons.add( Button(self, "Play against AI", **params_for_all_buttons, callback=self.start_game.mainloop), Button(self, "Play as P1", **params_for_all_buttons, callback=self.multiplayer_server.mainloop), Button(self, "Play as P2", **params_for_all_buttons, callback=self.multiplayer_client.mainloop), Button(self, "Quit", **params_for_all_buttons, callback=self.stop) ) self.button_credits = Button(self, "Credits", callback=self.dialog_credits.mainloop, **params_for_all_buttons) self.button_settings = Button.withImageOnly(self, Image(RESOURCES.IMG["settings"], size=self.button_credits.height - 20), callback=self.dialog_options.mainloop, **params_for_all_buttons)
def __init__(self, master, score: int, distance: float, time_100: float, time_opposite: float): Window.__init__(self, master=master, bg_music=master.bg_music) self.master = master self.bg = RectangleShape(*self.size, (0, 0, 0, 170)) self.text_score = Text(f"Your score\n{score}", (RESOURCES.FONT["algerian"], 90), YELLOW, justify="center") self.img_highscore = Image(RESOURCES.IMG["new_high_score"], width=150) if score > SAVE["highscore"]: SAVE["highscore"] = score else: self.img_highscore.hide() MAX_MONEY = pow(10, 9) - 1 money_distance = round(300.40 * distance) money_time_100 = round(12.5 * time_100) money_time_opposite = round(21.7 * time_opposite) money_gained = money_distance + money_time_100 + money_time_opposite total = SAVE["money"] + money_gained SAVE["money"] = MAX_MONEY if total > MAX_MONEY else total self.text_money = Text(format_number(SAVE["money"]), (RESOURCES.FONT["algerian"], 50), YELLOW, img=Image(RESOURCES.IMG["piece"], height=40), compound="right") font = ("calibri", 50) self.frame = RectangleShape(0.75 * self.width, 0.45 * self.height, BLACK, outline=1, outline_color=WHITE) self.text_distance = Text(f"Distance: {distance}", font, WHITE) self.img_green_arrow_distance = Image(RESOURCES.IMG["green_arrow"], height=40) self.text_money_distance = Text(money_distance, font, WHITE, img=Image(RESOURCES.IMG["piece"], height=40), compound="right") self.text_time_100 = Text(f"Time up to 100: {time_100}", font, WHITE) self.img_green_arrow_time_100 = Image(RESOURCES.IMG["green_arrow"], height=40) self.text_money_time_100 = Text(money_time_100, font, WHITE, img=Image(RESOURCES.IMG["piece"], height=40), compound="right") self.text_time_opposite = Text( f"Time in opposite side: {time_opposite}", font, WHITE) self.img_green_arrow_time_opposite = Image( RESOURCES.IMG["green_arrow"], height=40) self.text_money_time_opposite = Text(money_time_opposite, font, WHITE, img=Image(RESOURCES.IMG["piece"], height=40), compound="right") self.total_money = DrawableListHorizontal(offset=10) self.total_money.add( Text("TOTAL: ", font, WHITE), Text(money_gained, font, WHITE, img=Image(RESOURCES.IMG["piece"], height=40), compound="right")) params_for_all_buttons = { "font": (RESOURCES.FONT["algerian"], 50), "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "hover_sound": RESOURCES.SFX["select"], "on_click_sound": RESOURCES.SFX["validate"], "outline": 3, "highlight_color": YELLOW } self.menu_buttons = ButtonListHorizontal(offset=30) self.menu_buttons.add( Button(self, "Restart", **params_for_all_buttons, callback=self.restart_game), Button(self, "Garage", **params_for_all_buttons, callback=self.return_to_garage), Button(self, "Menu", **params_for_all_buttons, callback=self.return_to_menu))
def __init__(self): Window.__init__(self, bg_color=GRAY, bg_music=RESOURCES.MUSIC["garage"]) params_for_all_buttons = { "bg": GREEN, "hover_bg": GREEN_LIGHT, "active_bg": GREEN_DARK, "highlight_color": YELLOW, "hover_sound": RESOURCES.SFX["select"], } params_for_button_except_back = { "on_click_sound": RESOURCES.SFX["validate"], "disabled_sound": RESOURCES.SFX["block"], "disabled_bg": GRAY_LIGHT, } params_for_button_except_back.update(params_for_all_buttons) params_for_car_viewer = { k: params_for_button_except_back[k] for k in ["hover_sound", "on_click_sound"] } self.button_back = ImageButton(self, RESOURCES.IMG["blue_arrow"], **params_for_all_buttons, on_click_sound=RESOURCES.SFX["back"], callback=self.stop) self.car_viewer = CarViewer(self, SAVE["car"], **params_for_car_viewer) size_progress_bar = (300, 30) self.speed_bar = ProgressBar(*size_progress_bar, TRANSPARENT, GREEN) self.maniability_bar = ProgressBar(*size_progress_bar, TRANSPARENT, GREEN) self.braking_bar = ProgressBar(*size_progress_bar, TRANSPARENT, GREEN) self.left_arrow = ImageButton( self, img=RESOURCES.IMG["left_arrow"], active_img=RESOURCES.IMG["left_arrow_hover"], **params_for_button_except_back, callback=self.car_viewer.decrease_id) self.right_arrow = ImageButton( self, img=RESOURCES.IMG["right_arrow"], active_img=RESOURCES.IMG["right_arrow_hover"], **params_for_button_except_back, callback=self.car_viewer.increase_id) for arrow in [self.left_arrow, self.right_arrow]: arrow.take_focus(False) self.button_price = Button(self, font=(RESOURCES.FONT["algerian"], 40), img=Image(RESOURCES.IMG["piece"], size=40), compound="right", callback=self.buy_car, **params_for_button_except_back) self.button_play = Button(self, "Play", font=(RESOURCES.FONT["algerian"], 70), callback=self.play, **params_for_button_except_back) self.text_money = Text(format_number(SAVE["money"]), (RESOURCES.FONT["algerian"], 50), YELLOW, img=Image(RESOURCES.IMG["piece"], height=40), compound="right") self.text_highscore = Text( "Highscore: {}".format(format_number(SAVE["highscore"])), (RESOURCES.FONT["algerian"], 50), YELLOW) self.padlock = Image(RESOURCES.IMG["padlock"]) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop(sound=RESOURCES.SFX["back"])) self.bind_joystick( 0, "B", lambda event: self.stop(sound=RESOURCES.SFX["back"]))
def __init__(self, car_id: int, env: str): Window.__init__(self, bg_color=ENVIRONMENT[env], bg_music=RESOURCES.MUSIC["gameplay"]) self.bind_key(pygame.K_ESCAPE, lambda event: self.pause()) self.bind_joystick(0, "START", lambda event: self.pause()) font = RESOURCES.FONT["cooperblack"] # Demaraction lines self.road = DrawableListVertical(bg_color=GRAY, offset=70) self.white_bands = list() white_bands_width = 50 #px white_lines_height = 10 #px for i in range(5): if i % 2 == 0: self.road.add( RectangleShape(self.width, white_lines_height, WHITE)) else: white_bands = DrawableListHorizontal(offset=20) while white_bands.width < self.width: white_bands.add( RectangleShape(white_bands_width, white_lines_height, WHITE)) self.road.add(white_bands) self.white_bands.append(white_bands) # Environment self.env_top = DrawableListHorizontal(offset=400) self.env_bottom = DrawableListHorizontal(offset=400) while self.env_top.width < self.width: self.env_top.add(Image(RESOURCES.IMG[env], height=110)) while self.env_bottom.width < self.width: self.env_bottom.add(Image(RESOURCES.IMG[env], height=110)) #Infos params_for_infos = { "font": (font, 45), "color": YELLOW, "shadow": True, "shadow_x": 3, "shadow_y": 3 } self.infos_score = Info("Score", round_n=0, **params_for_infos) self.infos_speed = Info("Speed", extension="km/h", **params_for_infos, justify="right") self.infos_distance = Info("Distance", round_n=2, extension="km", **params_for_infos, justify="right") self.infos_time_100 = Info("High speed", **params_for_infos) self.infos_time_opposite = Info("Opposite side", **params_for_infos) self.clock_time_100 = Clock() self.clock_time_opposite = Clock() self.total_time_100 = self.total_time_opposite = 0 self.car = PlayerCar(car_id) self.speed = 0 self.traffic = TrafficCarList(nb_ways=4, max_nb_car=6) self.clock_traffic = Clock() self.img_crash = Image(RESOURCES.IMG["crash"], size=150) self.count_down = CountDown(self, 3, font=(font, 90), color=YELLOW, shadow=True, shadow_x=5, shadow_y=5) self.last_car_way = 0 # Background self.background = DrawableList(draw=False) self.background.add(self.env_top, self.env_bottom, *self.white_bands, self.traffic) # Default values self.update_clock = Clock() self.update_time = 15 #ms self.pixel_per_sec = 6 # For 1km/h self.pixel_per_ms = self.pixel_per_sec * self.update_time / 1000 self.paused = False self.go_to_garage = self.restart = False self.crashed_car = None self.disable_key_joy_focus() self.init_game()
def __init__(self, master: Window): Window.__init__(self, master=master, bg_music=master.bg_music) self.frame = RectangleShape(0.60 * self.width, 0.60 * self.height, GREEN, outline=3) self.title = Text("Options", font=(RESOURCES.FONT["algerian"], 70)) self.options_font = (RESOURCES.FONT["algerian"], 40) self.case_font = (RESOURCES.FONT["algerian"], 30) self.control_font = ("calibri", 20) params_for_all_scales = { "width": 0.45 * self.frame.w, "color": TRANSPARENT, "scale_color": GREEN_DARK, "from_": 0, "to": 100, "outline": 3, } params_for_all_buttons = { "highlight_color": YELLOW, "hover_sound": RESOURCES.SFX["select"], "disabled_sound": RESOURCES.SFX["block"] } params_for_option_buttons = { "on_click_sound": RESOURCES.SFX["validate"] } params_for_buttons = { "bg": GRAY_DARK, "fg": WHITE, "hover_bg": GRAY, "active_bg": BLACK } params_for_reset_button = { "bg": RED, "fg": WHITE, "hover_bg": RED_LIGHT, "active_bg": RED_DARK, } self.button_back = ImageButton(self, img=RESOURCES.IMG["blue_arrow"], on_click_sound=RESOURCES.SFX["back"], callback=self.stop, **params_for_all_buttons) self.button_change_page = Button(self, ">>", font=self.case_font, callback=self.change_page, **params_for_all_buttons, **params_for_option_buttons, **params_for_buttons) self.nb_pages = 2 self.page = 1 ## PAGE 1 ## valid_img = Image(RESOURCES.IMG["green_valid"]) self.text_music = Text("Music:", self.options_font) self.cb_music = CheckBox(self, 30, 30, TRANSPARENT, image=valid_img, value=self.get_music_state(), callback=self.set_music_state, **params_for_all_buttons, **params_for_option_buttons) self.scale_music = Scale( self, **params_for_all_scales, **params_for_all_buttons, height=self.cb_music.height, default=Window.music_volume() * 100, callback=lambda value, percent: Window.set_music_volume(percent)) self.text_sound = Text("SFX:", self.options_font) self.cb_sound = CheckBox(self, 30, 30, TRANSPARENT, image=valid_img, value=self.get_sound_state(), callback=self.set_sound_state, **params_for_all_buttons, **params_for_option_buttons) self.scale_sound = Scale( self, **params_for_all_scales, **params_for_all_buttons, height=self.cb_sound.height, default=Window.sound_volume() * 100, callback=lambda value, percent: Window.set_sound_volume(percent)) self.text_fps = Text("FPS:", self.options_font) self.cb_show_fps = CheckBox(self, 30, 30, TRANSPARENT, image=valid_img, value=Window.fps_is_shown(), callback=self.show_fps, **params_for_all_buttons, **params_for_option_buttons) self.button_reset = Button(self, "Reset Save", font=(RESOURCES.FONT["algerian"], 30), callback=SAVE.reset, state=Button.DISABLED, **params_for_all_buttons, **params_for_option_buttons, **params_for_reset_button) ## PAGE 2 ## self.text_acceleration = Text("Accélérer:", self.options_font) self.button_auto_acceleration = Button( self, font=self.case_font, callback=lambda: SAVE.update(auto_acceleration=not SAVE[ "auto_acceleration"]), **params_for_all_buttons, **params_for_option_buttons, **params_for_buttons) self.button_acceleration = Button( self, font=self.control_font, callback=lambda: self.choose_key("speed_up"), **params_for_all_buttons, **params_for_option_buttons, **params_for_buttons) self.text_brake = Text("Freiner:", self.options_font) self.button_brake = Button(self, font=self.control_font, callback=lambda: self.choose_key("brake"), **params_for_all_buttons, **params_for_option_buttons, **params_for_buttons) self.text_move_up = Text("Aller en haut:", self.options_font) self.button_move_up = Button(self, font=self.control_font, callback=lambda: self.choose_key("up"), **params_for_all_buttons, **params_for_option_buttons, **params_for_buttons) self.text_move_down = Text("Aller en bas:", self.options_font) self.button_move_down = Button( self, font=self.control_font, callback=lambda: self.choose_key("down"), **params_for_all_buttons, **params_for_option_buttons, **params_for_buttons) self.bind_key(pygame.K_ESCAPE, lambda event: self.stop(sound=RESOURCES.SFX["back"])) self.bind_joystick( 0, "B", lambda event: self.stop(sound=RESOURCES.SFX["back"]))