summaryrefslogtreecommitdiff
path: root/load_nav.py
diff options
context:
space:
mode:
authorTinWoodman92 <chrhodgden@gmail.com>2023-12-16 06:18:44 -0600
committerTinWoodman92 <chrhodgden@gmail.com>2023-12-16 06:18:44 -0600
commit158b36e51c8c2925d6c8af6e08380369d019378e (patch)
treef91fadecf85e982714927eb6ab451c9173e37de0 /load_nav.py
Initial commit
Diffstat (limited to 'load_nav.py')
-rw-r--r--load_nav.py227
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
+
+
+
+
+