def main(stdscr): curses.start_color() curses.use_default_colors() curses.curs_set(False) curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_RED) curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK) curses.init_pair(3, curses.COLOR_BLACK, curses.COLOR_GREEN) curses.init_pair(4, curses.COLOR_BLUE, curses.COLOR_BLACK) stdscr.clear() stdscr.keypad(True) database = load_database(database_file) highscores = deepcopy(database['highscores']) settings = deepcopy(database['settings']) images = deepcopy(database['images']) image_choice = deepcopy(database['image choice']) main_menu_title = 'Binary Fun Crossword' main_menu_list = ['play game', 'select image', 'manage image', 'show highscores', 'settings', 'help', 'quit'] running = True while running: command = run_selection_menu(stdscr, main_menu_list, main_menu_title) if command == "play game": highscores = start_game(stdscr, images, image_choice, highscores, settings) elif command == "select image": image_choice = run_selection_menu(stdscr, list(images.keys()) + ['random'], 'Image Selection Menu') elif command == 'manage image': images, highscores = show_manage_images_menu(stdscr, images, highscores) elif command == 'show highscores': show_highscores(stdscr, highscores) elif command == "settings": settings = show_settings_menu(stdscr, settings) elif command == "help": show_message(stdscr, 'Help', help_text, 80) elif command == "quit": database = make_database(highscores, settings, images, image_choice) save_database(database, database_file) running = False
def run_remove_image_menu(img_dict, hs_dict): new_img_dict, new_hs_dict = deepcopy(img_dict), deepcopy(hs_dict) if img_dict: img_name = run_selection_menu(screen, list(img_dict.keys()) + ['go back'], 'Remove Image') if img_name != 'go back': confirm = run_selection_menu(screen, ['yes', 'no'], ('Are you sure that you want to ' + 'delete this image ' + '"{}"'.format(img_name))) if confirm == 'yes': new_img_dict, new_hs_dict = remove_image(new_img_dict, new_hs_dict, img_name) else: show_message(screen, 'Error', 'Image list is empty.', 40) return new_img_dict, new_hs_dict
def show_settings_menu(screen, settings): def choose_number(num_range, title): return int(run_selection_menu(screen, [str(num) for num in num_range], title)) def choose_boolean(title): choice = run_selection_menu(screen, ['yes', 'no'], title) return True if choice == 'yes' else False dp_settings = deepcopy(settings) menu_list = sorted(dp_settings.keys()) + ['go to main menu'] running = True while running: menu_item = run_selection_menu(screen, menu_list, 'Settings') if menu_item == 'go to main menu': running = False continue elif menu_item == 'cell width': dp_settings[menu_item] = choose_number(range(1, 6), 'Cell Width') elif menu_item == 'cell height': dp_settings[menu_item] = choose_number(range(1, 3), 'Cell Height') elif menu_item == 'random plane size': p_width = choose_number(range(4, 11), 'Random Plane Width') p_height = choose_number(range(4, 11), 'Random Plane Height') dp_settings[menu_item] = [p_width, p_height] elif menu_item == 'time': dp_settings[menu_item] = choose_boolean('Count time and save ' + 'to highscores?') elif menu_item == 'show line count hint': dp_settings[menu_item] = choose_boolean('Show line count per line?') elif menu_item == 'show binary hint': dp_settings[menu_item] = choose_boolean('Show binary hint below ' + 'plane?') elif menu_item == 'show line complete hint': dp_settings[menu_item] = choose_boolean('Highlight number if line' + 'is complete?') return dp_settings
def run_add_image_menu(img_dict): new_img_dict = deepcopy(img_dict) files = list_files_in_dir(images_dir) if files: chosen_file = run_selection_menu(screen, files + ['go back'], 'Choose file') if chosen_file != 'go back': image_txt = load_file(images_dir + '/' + chosen_file) if check_image(image_txt): plane = create_plane(*calc_image_sizes(image_txt)) plane = load_image_on_plane(plane, image_txt, '1') new_img_dict[chosen_file.split('.')[0]] = plane else: show_message(screen, 'Error', 'Not valid image.', 40) else: show_message(screen, 'Error', 'No file found.', 40) return new_img_dict
def show_manage_images_menu(screen, images, highscores): dp_images = deepcopy(images) dp_highscores = deepcopy(highscores) def run_add_image_menu(img_dict): new_img_dict = deepcopy(img_dict) files = list_files_in_dir(images_dir) if files: chosen_file = run_selection_menu(screen, files + ['go back'], 'Choose file') if chosen_file != 'go back': image_txt = load_file(images_dir + '/' + chosen_file) if check_image(image_txt): plane = create_plane(*calc_image_sizes(image_txt)) plane = load_image_on_plane(plane, image_txt, '1') new_img_dict[chosen_file.split('.')[0]] = plane else: show_message(screen, 'Error', 'Not valid image.', 40) else: show_message(screen, 'Error', 'No file found.', 40) return new_img_dict def run_remove_image_menu(img_dict, hs_dict): new_img_dict, new_hs_dict = deepcopy(img_dict), deepcopy(hs_dict) if img_dict: img_name = run_selection_menu(screen, list(img_dict.keys()) + ['go back'], 'Remove Image') if img_name != 'go back': confirm = run_selection_menu(screen, ['yes', 'no'], ('Are you sure that you want to ' + 'delete this image ' + '"{}"'.format(img_name))) if confirm == 'yes': new_img_dict, new_hs_dict = remove_image(new_img_dict, new_hs_dict, img_name) else: show_message(screen, 'Error', 'Image list is empty.', 40) return new_img_dict, new_hs_dict running = True while running: choice = run_selection_menu(screen, ['add image', 'remove image', 'go to main menu'], 'Manage Images') if choice == 'go to main menu': running = False continue elif choice == 'add image': dp_images = run_add_image_menu(dp_images) elif choice == 'remove image': dp_images, dp_highscores = run_remove_image_menu(dp_images, dp_highscores) return dp_images, dp_highscores
def choose_boolean(title): choice = run_selection_menu(screen, ['yes', 'no'], title) return True if choice == 'yes' else False
def choose_number(num_range, title): return int(run_selection_menu(screen, [str(num) for num in num_range], title))