from csv import * from sqlite3 import * from entry import * from entry_list import * from menu import * from player import * from board import * from bot import * from access_methods import * def launch_game(plr_1, plr_2): size = lab_entry_4.item game_board = Board(plr_1, plr_2, size=size) game_board.play() if plr_1.is_machine and plr_2.is_machine: input() def launch_games(plr_1, plr_2, game_count): size = lab_entry_4.item wdl_stats_param = { 'plr_1_name': plr_1.name, 'plr_1_color_int': plr_1.color_int, 'plr_1_text_color': plr_1.text_color, 'plr_2_name': plr_2.name, 'plr_2_color_int': plr_2.color_int, 'plr_2_text_color': plr_2.text_color, } for i in range(game_count): if kbhit(): ks = [getch()] if kbhit(): ks.append(getch()) if ks == [b'\x1b']: # would like an options dialogue here break if i % 2 == 0: game_board = Board(plr_1, plr_2, wdl_stats_param, size=size) game_board.play() else: game_board = Board(plr_2, plr_1, wdl_stats_param, size=size) game_board.play() if plr_1.is_machine and plr_2.is_machine: input() con = connect('games.db') cur = con.cursor() # Main Menu mm_prompt = 'Main Menu' mm_entry_1 = Entry('Play') mm_entry_2 = Entry('Laboratory') mm_entry_3 = Entry('Story Mode') mm_entry_4 = Entry('Profiles') mm_entry_5 = Entry('Control Bot Profiles') mm_entries = EntryList([mm_entry_1, mm_entry_2, mm_entry_3, mm_entry_4, mm_entry_5]) mm_menu = Menu(mm_prompt, mm_entries) # Story Mode story_prompt = 'Select Human User and AI Machine and complete the challenges together.' story_entry_1 = Entry('User') story_entry_2 = Entry('Machine') story_entry_3 = Entry('Challenges') story_entries = EntryList([story_entry_1, story_entry_2, story_entry_3]) story_menu = Menu(story_prompt, story_entries) # Profiles menu prof_prompt = 'Manage User and AI profiles.' prof_entry_1 = Entry('Red', color_int=1) prof_entry_3 = Entry('Yellow', color_int=3) prof_entry_2 = Entry('Green', color_int=2) prof_entry_6 = Entry('Cyan', color_int=6) prof_entry_4 = Entry('Blue', color_int=4) prof_entry_5 = Entry('Magenta', color_int=5) prof_entries = EntryList([prof_entry_1, prof_entry_3, prof_entry_2, prof_entry_6, prof_entry_4, prof_entry_5]) prof_menu = Menu(prof_prompt, prof_entries) # Bot Menu bot_prompt = 'Edit Bot Settings' bot_1_entry = Entry('Bot 1') bot_2_entry = Entry('Bot 2') bot_entries = EntryList([bot_1_entry, bot_2_entry]) bot_menu = Menu(bot_prompt, bot_entries) # Load Entries mm_entry_3.item = story_menu mm_entry_4.item = prof_menu mm_entry_5.item = bot_menu # initialize players # set thier menu attribute to color entry.item rst = OpenRecordset(con, "SELECT * FROM players") for rcd in rst: rcd['is_machine'] = bool(rcd['is_machine']) if rcd['is_machine']: rcd['cls'] = Machine else: rcd['cls'] = Player plr_1 = rst[0]['cls'](rst[0]['color_int'], rst[0]['name'], rst[0]['is_machine'], prof_entry_1) plr_2 = rst[1]['cls'](rst[1]['color_int'], rst[1]['name'], rst[1]['is_machine'], prof_entry_2) plr_3 = rst[2]['cls'](rst[2]['color_int'], rst[2]['name'], rst[2]['is_machine'], prof_entry_3) plr_4 = rst[3]['cls'](rst[3]['color_int'], rst[3]['name'], rst[3]['is_machine'], prof_entry_4) plr_5 = rst[4]['cls'](rst[4]['color_int'], rst[4]['name'], rst[4]['is_machine'], prof_entry_5) plr_6 = rst[5]['cls'](rst[5]['color_int'], rst[5]['name'], rst[5]['is_machine'], prof_entry_6) bot_1 = Bot('Bot 1', bot_1_entry) bot_2 = Bot('Bot 2', bot_2_entry) # I would like to find an alternative to a player list being an attribute of all the players # class method/attribute? plr_list = [plr_1, plr_2, plr_3, plr_4, plr_5, plr_6, bot_1, bot_2] plr_1.plr_list = plr_list plr_2.plr_list = plr_list plr_3.plr_list = plr_list plr_4.plr_list = plr_list plr_5.plr_list = plr_list plr_6.plr_list = plr_list bot_1.plr_list = plr_list bot_2.plr_list = plr_list prof_entry_1.item = plr_1.menu prof_entry_2.item = plr_2.menu prof_entry_3.item = plr_3.menu prof_entry_4.item = plr_4.menu prof_entry_5.item = plr_5.menu prof_entry_6.item = plr_6.menu bot_1_entry.item = bot_1.menu bot_2_entry.item = bot_2.menu # do we have to define the get_players() getter method after the players have been initialized? def get_players(): players = [] for entry in prof_entries.entries: players.append(entry.text) for entry in bot_entries.entries: players.append(entry.text) return players def set_plrs_getr(plr_param, alt_plr_param): def get_plrs(): players = [] for entry in prof_entries.entries: if entry.color_int != alt_plr_param.itm_color_int: players.append(entry.text) for entry in bot_entries.entries: if entry.text != alt_plr_param.item: players.append(entry.text) return players return get_plrs # there is a bug if 2 or more profiles have the same name def set_plr_setr(param): def set_plr(plr_name): clr_i = None for entry in prof_entries.entries: if entry.text == plr_name: clr_i = entry.color_int for entry in bot_entries.entries: if entry.text == plr_name: clr_i = entry.color_int param.itm_color_int = clr_i return set_plr # Play/Lab Menu play_prompt = 'Play Menu' lab_prompt = 'Welcome to the Laboratory!' init_plrs = get_players() lab_plr_1 = Param('Player 1', init_val=init_plrs) lab_plr_2 = Param('Player 2', init_val=init_plrs) lab_plr_1.setr_meth = set_plr_setr(lab_plr_1) lab_plr_2.setr_meth = set_plr_setr(lab_plr_2) lab_plr_1.getr_meth = set_plrs_getr(lab_plr_1, lab_plr_2) lab_plr_2.getr_meth = set_plrs_getr(lab_plr_2, lab_plr_1) lab_plr_1.set_item(lab_plr_1.item) lab_plr_2.set_item(lab_plr_2.item) lab_plr_2.get_options() lab_plr_1.get_options() def get_game_players(): global plr_list for plr in plr_list: if lab_plr_1.item == plr.name: game_plr_1 = plr if lab_plr_2.item == plr.name: game_plr_2 = plr return [game_plr_1, game_plr_2] play_entry_3 = Launcher('Play', launch_game, args_getr_meth=get_game_players) lab_entry_3 = Param('Games', 10) lab_entry_4 = Param('Board Size', [2, 1]) def get_series_settings(): args = get_game_players() args.append(int(lab_entry_3.item)) return args lab_entry_5 = Launcher('Play Games', launch_games, args_getr_meth=get_series_settings) lab_entry_6 = Entry('Help') lab_entry_7 = Entry('Reports') play_entries = EntryList([lab_plr_1, lab_plr_2, lab_entry_4, play_entry_3]) lab_entries = EntryList([lab_plr_1, lab_plr_2, lab_entry_3, lab_entry_4, lab_entry_5, lab_entry_6, lab_entry_7]) play_menu = Menu(play_prompt, play_entries) lab_menu = Menu(lab_prompt, lab_entries) mm_entry_1.item = play_menu mm_entry_2.item = lab_menu