diff options
author | TinWoodman92 <chrhodgden@gmail.com> | 2023-12-16 06:18:44 -0600 |
---|---|---|
committer | TinWoodman92 <chrhodgden@gmail.com> | 2023-12-16 06:18:44 -0600 |
commit | 158b36e51c8c2925d6c8af6e08380369d019378e (patch) | |
tree | f91fadecf85e982714927eb6ab451c9173e37de0 /load_nav.py |
Initial commit
Diffstat (limited to 'load_nav.py')
-rw-r--r-- | load_nav.py | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/load_nav.py b/load_nav.py new file mode 100644 index 0000000..2b5eba0 --- /dev/null +++ b/load_nav.py @@ -0,0 +1,227 @@ +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 + + + + + |