From de02aeb5e0161fb647e7c6ab64542c077cba753e Mon Sep 17 00:00:00 2001 From: Dani Date: Tue, 3 Jun 2025 20:29:56 -0400 Subject: [PATCH] Need to fix up the smart deck build, and fix tokens not being able to add --- .vscode/launch.json | 15 ++ data/cards_cache.sqlite | Bin 135168 -> 589824 bytes main.py | 407 ++++++++++++++++++++++++++++------------ 3 files changed, 301 insertions(+), 121 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..92f1226 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "MTGC Debug", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/main.py", + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/data/cards_cache.sqlite b/data/cards_cache.sqlite index b8512e04c490a2dc86682d60be8b6cc1595ec612..77bdb09bad14711f49b5e50842b90c2d8e7b96e0 100644 GIT binary patch literal 589824 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

eO4sL(I>`TVSY|jk`bXI{KfD=0Td_8bNY-2XU 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 delta 251 zcmZo@P-$4eF+rMDl7WFiaiW4fqvXbfCHw*`{BM8)408Ox`M>dh None: # ────────────────────────────────────────────────────────────────────────────── -# MTGDeckBuilder GUI +# MAIN APPLICATION # ────────────────────────────────────────────────────────────────────────────── class MTGDeckBuilder(tk.Tk): def __init__(self): @@ -88,19 +101,19 @@ class MTGDeckBuilder(tk.Tk): self.title("MTG Deck Builder") self.geometry("1200x750") - # Ensure data folders/files + # Ensure data folders/files exist init_cache_db() _ = load_collection() _ = load_match_history() - # Theme tracking + # Track theme: "dark" or "light" self.theme = tk.StringVar(value="dark") - # Current deck + # Currently loaded Deck self.current_deck: Deck | None = None # Caches - self.card_cache: dict[str, Card] = {} # name → Card + self.card_cache: dict[str, Card] = {} self.search_images: dict[str, ImageTk.PhotoImage] = {} self.coll_images: dict[str, dict[str, ImageTk.PhotoImage]] = { tab: {} for tab in ["All", "Black", "White", "Red", "Green", "Blue", "Unmarked", "Tokens"] @@ -123,7 +136,7 @@ class MTGDeckBuilder(tk.Tk): self.after(1000, lambda: check_for_updates(local_ver, GITHUB_REPO)) # ----------------------------------------------------------------------------- - # Preload W/U/B/R/G icons + # Preload W/U/B/R/G color icons # ----------------------------------------------------------------------------- def _load_color_icons(self): icon_folder = os.path.join("assets", "icons") @@ -136,17 +149,17 @@ class MTGDeckBuilder(tk.Tk): self.color_icon_images[symbol] = None # ----------------------------------------------------------------------------- - # Ensure sounds folder + # Ensure sound folder # ----------------------------------------------------------------------------- def _load_sounds(self): sound_folder = os.path.join("assets", "sounds") os.makedirs(sound_folder, exist_ok=True) # ----------------------------------------------------------------------------- - # Build all widgets (including Combobox for autocomplete) + # Create all widgets (search is now a plain Entry again) # ----------------------------------------------------------------------------- def _build_widgets(self): - # Deck controls (top) + # --- Top row: Deck controls + theme toggle --- self.deck_frame = ttk.LabelFrame(self, text="Deck Controls", padding=8) self.new_deck_btn = ttk.Button(self.deck_frame, text="New Deck", command=self._on_new_deck) self.load_deck_btn = ttk.Button(self.deck_frame, text="Load Deck", command=self._on_load_deck) @@ -164,7 +177,7 @@ class MTGDeckBuilder(tk.Tk): command=self.apply_theme ) - # Collection panel with tabs (left) + # --- Collection panel with tabs (left) --- self.coll_frame = ttk.LabelFrame(self, text="Your Collection", padding=8) self.coll_notebook = ttk.Notebook(self.coll_frame) self.coll_tabs = {} @@ -187,26 +200,35 @@ class MTGDeckBuilder(tk.Tk): self.coll_qty_spin = ttk.Spinbox(self.coll_frame, from_=1, to=1000, width=6) self.coll_set_qty_btn = ttk.Button(self.coll_frame, text="Set Quantity", command=self._on_set_coll_qty) - # Right side: Search panel + Deck panel + Preview + # --- Right side: Search panel + Deck panel + Preview --- self.right_frame = ttk.Frame(self) - # Search / Add Cards + # Search / Add Cards (plain Entry) self.search_frame = ttk.LabelFrame(self.right_frame, text="Search / Add Cards", padding=8) - self.search_entry = ttk.Combobox(self.search_frame, width=30) - self.search_entry.set("") - self.search_entry.bind("<>", lambda e: self._on_autocomplete_select()) - self.search_entry.bind("", lambda e: self._update_autocomplete()) - self.search_entry.bind("", lambda e: self.search_entry.select_range(0, tk.END)) + self.preview_container = ttk.Frame(self.search_frame) + self.preview_frame = ttk.Frame(self.preview_container, borderwidth=1, relief="solid") + self.preview_inner = ttk.Frame(self.preview_frame, padding=1) + self.preview_frame.configure(width=200, height=200) + self.preview_frame.grid_propagate(False) + self.card_image_label = ttk.Label(self.preview_inner) + self.color_icons_frame = ttk.Frame(self.preview_frame) + self.search_entry = ttk.Entry(self.search_frame, width=30) + self.search_entry.bind("", lambda e: self._on_perform_search()) self.search_btn = ttk.Button(self.search_frame, text="Search", command=self._on_perform_search) self.results_tree = ttk.Treeview(self.search_frame, height=12, columns=("info",), show="tree") self.results_scroll = ttk.Scrollbar(self.search_frame, orient="vertical", command=self.results_tree.yview) self.results_tree.configure(yscrollcommand=self.results_scroll.set) self.results_tree.bind("<>", self._on_result_select) - self.add_qty_label = ttk.Label(self.search_frame, text="Qty:") - self.add_qty_spin = ttk.Spinbox(self.search_frame, from_=1, to=20, width=5) + self.qty_add_frame = ttk.Frame(self.preview_container) + self.add_qty_label = ttk.Label(self.qty_add_frame, text="Qty:") + self.add_qty_spin = ttk.Spinbox(self.qty_add_frame, from_=1, to=20, width=5) self.add_qty_spin.set("1") - self.add_to_coll_btn = ttk.Button(self.search_frame, text="Add to Collection", command=self._on_add_to_collection) - self.add_to_deck_btn = ttk.Button(self.search_frame, text="Add to Deck", command=self._on_add_to_deck) + self.add_to_coll_btn = ttk.Button( + self.qty_add_frame, text="Add to Collection", command=self._on_add_to_collection + ) + self.add_to_deck_btn = ttk.Button( + self.qty_add_frame, text="Add to Deck", command=self._on_add_to_deck + ) # Deck panel with tabs self.deck_view_frame = ttk.LabelFrame(self.right_frame, text="Deck Contents", padding=8) @@ -231,17 +253,12 @@ class MTGDeckBuilder(tk.Tk): self.deck_qty_spin = ttk.Spinbox(self.deck_view_frame, from_=1, to=1000, width=6) self.deck_set_qty_btn = ttk.Button(self.deck_view_frame, text="Set Quantity", command=self._on_set_deck_qty) - # Card preview (bottom) - self.preview_frame = ttk.LabelFrame(self, text="Card Preview", padding=8) - self.card_image_label = ttk.Label(self.preview_frame) - self.color_icons_frame = ttk.Frame(self.preview_frame) - # ----------------------------------------------------------------------------- - # Layout everything with pack() and grid() + # Arrange everything with pack() and grid() # ----------------------------------------------------------------------------- def _layout_widgets(self): - # Deck controls - self.deck_frame.pack(fill="x", padx=10, pady=(10,5)) + # ─── Deck controls (top) ─────────────────────────────────────────── + self.deck_frame.pack(fill="x", padx=10, pady=(10, 5)) self.new_deck_btn.grid(row=0, column=0, padx=4, pady=4) self.load_deck_btn.grid(row=0, column=1, padx=4, pady=4) self.save_deck_btn.grid(row=0, column=2, padx=4, pady=4) @@ -251,60 +268,94 @@ class MTGDeckBuilder(tk.Tk): self.theme_toggle.grid(row=0, column=6, padx=20, pady=4) self.deck_name_label.grid(row=0, column=7, padx=10, pady=4, sticky="w") - # Collection panel + # ─── Collection panel (left) ──────────────────────────────────────── self.coll_frame.pack(fill="y", side="left", padx=(10,5), pady=5) self.coll_frame.configure(width=280) - self.coll_notebook.pack(fill="both", expand=True, padx=4, pady=4) + + # 1) “Remove from Collection” at top self.remove_from_coll_btn.pack(fill="x", padx=4, pady=(4,4)) + + # 2) Tabs for All/Black/White/etc. + self.coll_notebook.pack(fill="both", expand=True, padx=4, pady=4) + + # 3) Quantity + Set Quantity under the Collection tree qty_frame_c = ttk.Frame(self.coll_frame) qty_frame_c.pack(fill="x", padx=4, pady=(0,10)) self.coll_qty_label.pack(in_=qty_frame_c, side="left") - self.coll_qty_spin.pack(in_=qty_frame_c, side="left", padx=(4,10)) - self.coll_set_qty_btn.pack(in_=qty_frame_c, side="left") + self.coll_qty_spin.pack(in_=qty_frame_c, side="left", padx=(4,10)) + self.coll_set_qty_btn.pack(in_=qty_frame_c, side="left") - # Right side: search + deck + # ─── Right side: Search panel + Deck panel ────────────────────────── self.right_frame.pack(fill="both", expand=True, side="left", padx=(5,10), pady=5) self.right_frame.columnconfigure(0, weight=1) self.right_frame.columnconfigure(1, weight=1) self.right_frame.rowconfigure(0, weight=1) - # Search panel - self.search_frame.grid(row=0, column=0, sticky="nsew", padx=(0,5)) + # --- Search panel (right_frame at row=0, col=0) --- + self.search_frame.grid(row=0, column=0, sticky="nsew", padx=(0,5), pady=(0,0)) + # Let the search results expand vertically and horizontally self.search_frame.columnconfigure(0, weight=1) self.search_frame.rowconfigure(1, weight=1) + # Row 0: Search entry + Search button self.search_entry.grid(row=0, column=0, padx=4, pady=4, sticky="w") - self.search_btn.grid(row=0, column=1, padx=4, pady=4, sticky="w") + self.search_btn .grid(row=0, column=1, padx=4, pady=4, sticky="w") - self.results_tree.grid(row=1, column=0, columnspan=2, padx=(4,0), pady=4, sticky="nsew") - self.results_scroll.grid(row=1, column=2, sticky="ns", pady=4) + # Row 1: search results (col=0), scrollbar (col=1), preview_container (col=2) + self.results_tree .grid(row=1, column=0, padx=(4,0), pady=4, sticky="nsew") + self.results_scroll.grid(row=1, column=1, sticky="ns", pady=4) + self.preview_container.grid(row=1, column=2, padx=(10,4), pady=4, sticky="n") - self.add_qty_label.grid(row=2, column=0, padx=4, pady=(4,10), sticky="w") - self.add_qty_spin.grid(row=2, column=1, padx=4, pady=(4,10), sticky="w") - self.add_to_coll_btn.grid(row=2, column=2, padx=4, pady=(4,10), sticky="w") - self.add_to_deck_btn.grid(row=2, column=3, padx=4, pady=(4,10), sticky="w") + # Keep results_tree filling space; preview_container stays its natural size + self.search_frame.rowconfigure(1, weight=1) + self.search_frame.columnconfigure(2, weight=0) - # Deck panel - self.deck_view_frame.grid(row=0, column=1, sticky="nsew", padx=(5,0)) + # ─── Inside preview_container ──────────────────────────────────── + # Row 0: preview_frame (auto‐sizes to card image + 1px border) + # Row 1: qty_add_frame (holds the spinbox and two “Add” buttons side by side) + + self.preview_container.columnconfigure(0, weight=0) + self.preview_container.rowconfigure(0, weight=0) + self.preview_container.rowconfigure(1, weight=0) + + # 1) Place the framed preview (borderwidth=1, relief="solid") + self.preview_frame.grid(row=0, column=0, padx=0, pady=0, sticky="n") + # Inside the frame, pack preview_inner (which holds a 1px padding) + self.preview_inner.pack(fill="both", expand=True) + # And pack the image label inside that + self.card_image_label.pack(expand=True) + + # 2) Immediately under that, place qty_add_frame + self.qty_add_frame.grid(row=1, column=0, pady=(4,4)) + + # Inside qty_add_frame, arrange: “Qty:” label, spinbox, Add to Collection, Add to Deck + self.add_qty_label.grid(row=0, column=0, padx=(0,4)) + self.add_qty_spin .grid(row=0, column=1, padx=(0,10)) + self.add_to_coll_btn.grid(row=0, column=2, padx=(0,4)) + self.add_to_deck_btn .grid(row=0, column=3, padx=(0,4)) + + # Row 2 of search_frame: we no longer need a quantity row, because we moved + # the spinbox into qty_add_frame. If you want an extra blank row, you can comment this out. + + # --- Deck panel (right_frame at row=0, col=1) --- + self.deck_view_frame.grid(row=0, column=1, sticky="nsew", padx=(5,0), pady=(0,0)) self.deck_view_frame.columnconfigure(0, weight=1) self.deck_view_frame.rowconfigure(0, weight=1) - self.deck_notebook.pack(fill="both", expand=True, padx=4, pady=4) + # “Remove Selected” at top of deck_view_frame self.remove_card_btn.pack(fill="x", padx=4, pady=(4,4)) + + # Then the deck’s Notebook (tabs) below, which expands + self.deck_notebook.pack(fill="both", expand=True, padx=4, pady=4) + + # Qty + Set Quantity under the Deck notebook qty_frame_d = ttk.Frame(self.deck_view_frame) qty_frame_d.pack(fill="x", padx=4, pady=(0,10)) - self.deck_qty_label.pack(in_=qty_frame_d, side="left") - self.deck_qty_spin.pack(in_=qty_frame_d, side="left", padx=(4,10)) + self.deck_qty_label.pack( in_=qty_frame_d, side="left") + self.deck_qty_spin.pack( in_=qty_frame_d, side="left", padx=(4,10)) self.deck_set_qty_btn.pack(in_=qty_frame_d, side="left") - # Preview panel - self.preview_frame.pack(fill="x", padx=10, pady=(0,10)) - self.preview_frame.columnconfigure(0, weight=1) - self.preview_frame.rowconfigure(0, weight=1) - self.card_image_label.grid(row=0, column=0, padx=4, pady=4) - self.color_icons_frame.grid(row=1, column=0, padx=4, pady=(4,8)) - - # Populate collection + deck + # ─── Finally, refresh both lists ─────────────────────────────────── self._refresh_collection() self._refresh_deck() @@ -339,7 +390,6 @@ class MTGDeckBuilder(tk.Tk): style.map("Treeview", background=[("selected", select_bg)]) style.configure("TEntry", fieldbackground=entry_bg, foreground=entry_fg) style.configure("TSpinbox", fieldbackground=entry_bg, foreground=entry_fg) - style.configure("TCombobox", fieldbackground=entry_bg, foreground=entry_fg) self.configure(background=bg) for frame in [self.deck_frame, self.coll_frame, self.search_frame, @@ -347,43 +397,9 @@ class MTGDeckBuilder(tk.Tk): frame.configure(style="TLabelframe") # ----------------------------------------------------------------------------- - # Autocomplete: update Combobox values as user types - # ----------------------------------------------------------------------------- - def _update_autocomplete(self): - text = self.search_entry.get().strip() - if len(text) < 2: - return - # Fetch up to 10 matching card names - try: - results = search_cards(text + "*",) # wildcard to get broader matches - except Exception: - return - names = [c.name for c in results[:10]] - # Update the Combobox dropdown - self.search_entry["values"] = names - # If there are suggestions, open the dropdown - if names: - self.search_entry.event_generate("") - - # ----------------------------------------------------------------------------- - # When the user selects from autocomplete dropdown - # ----------------------------------------------------------------------------- - def _on_autocomplete_select(self): - selected = self.search_entry.get().strip() - if not selected: - return - # Fetch full Card and preview it - card = self.card_cache.get(selected) or get_card_by_name(selected) - if not card: - return - self.card_cache[card.name] = card - self._show_preview(card) - - # ----------------------------------------------------------------------------- - # Perform a normal “Search” (when user clicks Search) + # Perform “Search” (when user clicks Search or hits Enter) # ----------------------------------------------------------------------------- def _on_perform_search(self): - play_sound("click") query = self.search_entry.get().strip() if not query: return @@ -438,12 +454,15 @@ class MTGDeckBuilder(tk.Tk): self._show_preview(card) # ----------------------------------------------------------------------------- - # Show full image + color icons in preview + # Show full image + color pips in preview # ----------------------------------------------------------------------------- def _show_preview(self, card: Card): + # Clear out any old contents in color icons and image: for w in self.color_icons_frame.winfo_children(): w.destroy() + self.card_image_label.config(image="", text="") + # Display color pips at the top inside preview_inner: x = 0 for symbol in card.colors: icon = self.color_icon_images.get(symbol) @@ -459,9 +478,15 @@ class MTGDeckBuilder(tk.Tk): resp.raise_for_status() img_data = resp.content image = Image.open(io.BytesIO(img_data)) - image.thumbnail((250,350), Image.LANCZOS) + # Optional: resize the image so it’s not gigantic. + # For example, if you want max width=180, max height=260, do: + max_w, max_h = 180, 260 + image.thumbnail((max_w, max_h), Image.LANCZOS) + photo = ImageTk.PhotoImage(image) - self.preview_photo = photo + self.preview_photo = photo # keep a reference + + # Put the image in the Label: self.card_image_label.config(image=photo, text="") except Exception: self.card_image_label.config(text="Could not load image", image="") @@ -470,11 +495,16 @@ class MTGDeckBuilder(tk.Tk): self.card_image_label.config(text="No image available", image="") self.preview_photo = None + # Now re‐pack / grid so that preview_frame wraps to its contents: + # (If it was hidden or empty before, we need to ensure layout is updated.) + self.preview_inner.update_idletasks() + self.preview_frame.update_idletasks() + self.preview_container.update_idletasks() + # ----------------------------------------------------------------------------- - # Add to Collection (silent, cache thumbnails automatically) + # Add to Collection (silent)—auto-caches thumbnails on refresh # ----------------------------------------------------------------------------- def _on_add_to_collection(self): - play_sound("click") coll = load_collection() sel = self.results_tree.selection() if not sel: @@ -495,7 +525,7 @@ class MTGDeckBuilder(tk.Tk): self._refresh_collection() # Clear the search box so user can type another name - self.search_entry.set("") + self.search_entry.delete(0, tk.END) self.search_entry.focus_set() self.results_tree.delete(*self.results_tree.get_children()) self._clear_preview() @@ -504,7 +534,6 @@ class MTGDeckBuilder(tk.Tk): # Add to Deck (silent) # ----------------------------------------------------------------------------- def _on_add_to_deck(self): - play_sound("click") if not self.current_deck: return sel = self.results_tree.selection() @@ -534,7 +563,6 @@ class MTGDeckBuilder(tk.Tk): # Remove selected from collection # ----------------------------------------------------------------------------- def _on_remove_from_collection(self): - play_sound("click") current_tab = self.coll_notebook.tab(self.coll_notebook.select(), "text") tree = self.coll_trees[current_tab] sel = tree.selection() @@ -572,7 +600,6 @@ class MTGDeckBuilder(tk.Tk): # Set quantity in collection (inline) # ----------------------------------------------------------------------------- def _on_set_coll_qty(self): - play_sound("click") current_tab = self.coll_notebook.tab(self.coll_notebook.select(), "text") tree = self.coll_trees[current_tab] sel = tree.selection() @@ -623,7 +650,7 @@ class MTGDeckBuilder(tk.Tk): for tab_name, tree in self.coll_trees.items(): tree.delete(*tree.get_children()) - # Do NOT clear self.coll_images[tab_name]; reuse cached thumbnails + # Keep self.coll_images[tab_name] intact—reuse cached thumbnails fnt_spec = ttk.Style().lookup("Treeview", "font") if fnt_spec: fnt = tkfont.Font(font=fnt_spec) @@ -662,10 +689,9 @@ class MTGDeckBuilder(tk.Tk): tree.column("#0", width=max_width) # ----------------------------------------------------------------------------- - # New Deck + # “New Deck” callback # ----------------------------------------------------------------------------- def _on_new_deck(self): - play_sound("click") name = simpledialog.askstring("New Deck", "Enter deck name:", parent=self) if not name: return @@ -675,10 +701,9 @@ class MTGDeckBuilder(tk.Tk): self._clear_preview() # ----------------------------------------------------------------------------- - # Load Deck + # “Load Deck” callback # ----------------------------------------------------------------------------- def _on_load_deck(self): - play_sound("click") choices = list_saved_decks() if not choices: return @@ -697,10 +722,9 @@ class MTGDeckBuilder(tk.Tk): self._clear_preview() # ----------------------------------------------------------------------------- - # Save Deck + # “Save Deck” callback # ----------------------------------------------------------------------------- def _on_save_deck(self): - play_sound("click") if not self.current_deck: return dm_save_deck(self.current_deck) @@ -736,10 +760,9 @@ class MTGDeckBuilder(tk.Tk): self._show_preview(card) # ----------------------------------------------------------------------------- - # Set quantity in deck (inline) + # “Set Quantity” in Deck callback # ----------------------------------------------------------------------------- def _on_set_deck_qty(self): - play_sound("click") if not self.current_deck: return current_tab = self.deck_notebook.tab(self.deck_notebook.select(), "text") @@ -769,10 +792,9 @@ class MTGDeckBuilder(tk.Tk): self._refresh_deck() # ----------------------------------------------------------------------------- - # Remove selected from deck + # “Remove Selected” from deck callback # ----------------------------------------------------------------------------- def _on_remove_selected(self): - play_sound("click") if not self.current_deck: return current_tab = self.deck_notebook.tab(self.deck_notebook.select(), "text") @@ -797,7 +819,7 @@ class MTGDeckBuilder(tk.Tk): self._clear_preview() # ----------------------------------------------------------------------------- - # Refresh the deck tabs + autofit + # Refresh deck tabs + autofit columns # ----------------------------------------------------------------------------- def _refresh_deck(self): if not self.current_deck: @@ -845,7 +867,7 @@ class MTGDeckBuilder(tk.Tk): resp = requests.get(card.thumbnail_url, timeout=5) resp.raise_for_status() pil = Image.open(io.BytesIO(resp.content)) - pil.thumbnail((24,36), Image.LANCZOS) + pil.thumbnail((24, 36), Image.LANCZOS) img_obj = ImageTk.PhotoImage(pil) self.deck_images[tab_name][card_name] = img_obj except Exception: @@ -879,10 +901,152 @@ class MTGDeckBuilder(tk.Tk): self.preview_photo = None # ----------------------------------------------------------------------------- - # Simulate Battle + # “Smart Build Deck” callback + # ----------------------------------------------------------------------------- + def _on_smart_build(self): + color_input = simpledialog.askstring( + "Smart Build: Colors", + "Enter 1–3 colors (e.g. R G) separated by spaces:", + parent=self + ) + if not color_input: + return + + colors = [c.strip().upper() for c in color_input.split() if c.strip().upper() in {"W","U","B","R","G"}] + if not 1 <= len(colors) <= 3: + play_sound("error") + messagebox.showerror("Invalid Colors", "You must pick 1–3 of W, U, B, R, G.") + return + + history = load_match_history() + archetypes = ["Aggro", "Midrange", "Control"] + best_arch = None + best_rate = -1.0 + combo = "/".join(colors) + + for arch in archetypes: + total = wins = 0 + for record in history: + dn = record.get("deck", "") + if dn.startswith(arch) and combo in dn: + res = record.get("result", "") + if res in ("W","L"): + total += 1 + if res == "W": + wins += 1 + if total > 0: + rate = wins / total + if rate > best_rate: + best_rate = rate + best_arch = arch + + if best_arch: + confirm = messagebox.askokcancel( + "Choose Archetype", + f"Based on history, {best_arch} {combo} has win rate {best_rate:.0%}.\nUse it?" + ) + if confirm: + archetype = best_arch.lower() + else: + archetype = None + else: + archetype = None + + if not archetype: + arch_input = simpledialog.askstring( + "Smart Build: Archetype", + "Enter archetype (Aggro, Control, Midrange):", + parent=self + ) + if not arch_input: + return + arch_input = arch_input.strip().lower() + if arch_input not in {"aggro", "control", "midrange"}: + play_sound("error") + messagebox.showerror("Invalid Archetype", "Must be 'Aggro', 'Control', or 'Midrange'.") + return + archetype = arch_input + + deck_name = f"{archetype.capitalize()} {combo} Auto" + deck = Deck(name=deck_name) + + land_count = 24 + if archetype == "aggro": + creature_target = 24; noncreature_target = 12 + elif archetype == "midrange": + creature_target = 18; noncreature_target = 18 + else: + creature_target = 12; noncreature_target = 24 + + per_color = land_count // len(colors) + extra = land_count % len(colors) + basic_map = {"W":"Plains","U":"Island","B":"Swamp","R":"Mountain","G":"Forest"} + for idx, col in enumerate(colors): + qty = per_color + (1 if idx < extra else 0) + deck.add_card(basic_map[col], qty) + + creature_query = f"c:{''.join(colors)} type:creature" + if archetype == "aggro": + creature_query += " cmc<=3" + elif archetype == "midrange": + creature_query += " cmc<=4" + else: + creature_query += " cmc<=5" + creatures = search_cards(creature_query) + creatures = [c for c in creatures if set(c.colors).issubset(set(colors))] + used = set() + added = 0 + for c in creatures: + if added >= creature_target: + break + if c.name not in used: + deck.add_card(c.name, 1) + used.add(c.name) + added += 1 + + noncre_query = f"c:{''.join(colors)} (type:instant or type:sorcery)" + if archetype == "aggro": + noncre_query += " cmc<=3" + elif archetype == "midrange": + noncre_query += " cmc<=4" + else: + noncre_query += " cmc>=3" + noncre = search_cards(noncre_query) + noncre = [c for c in noncre if set(c.colors).issubset(set(colors))] + added_non = 0 + for c in noncre: + if added_non >= noncreature_target: + break + if c.name not in used: + deck.add_card(c.name, 1) + used.add(c.name) + added_non += 1 + + total_cards = sum(deck.cards.values()) + if total_cards < 60: + fill_needed = 60 - total_cards + filler = search_cards("type:creature cmc<=3") + for c in filler: + if c.name not in used: + deck.add_card(c.name, 1) + used.add(c.name) + fill_needed -= 1 + if fill_needed == 0: + break + + self.current_deck = deck + self.deck_name_label.config(text=f"Deck: {deck.name} ({deck.total_cards()} cards)") + self._refresh_deck() + self._clear_preview() + messagebox.showinfo( + "Smart Build Complete", + f"Created deck '{deck.name}' with {deck.total_cards()} cards." + ) + + # ----------------------------------------------------------------------------- + # “Simulate Battle” callback # ----------------------------------------------------------------------------- def _on_simulate_battle(self): - play_sound("click") choices = list_saved_decks() if len(choices) < 2: return @@ -919,10 +1083,9 @@ class MTGDeckBuilder(tk.Tk): ) # ----------------------------------------------------------------------------- - # Record Result + # “Record Result” callback # ----------------------------------------------------------------------------- def _on_record_result(self): - play_sound("click") choices = list_saved_decks() if not choices: return @@ -949,6 +1112,8 @@ class MTGDeckBuilder(tk.Tk): parent=self ) if not result or result.upper() not in {"W","L","T"}: + play_sound("error") + messagebox.showerror("Invalid Result", "Result must be W, L, or T.") return record_manual_result(deck_name, opponent, result.upper()) @@ -959,7 +1124,7 @@ class MTGDeckBuilder(tk.Tk): # ────────────────────────────────────────────────────────────────────────────── if __name__ == "__main__": missing_icons = [s for s in ["W","U","B","R","G"] - if not os.path.isfile(os.path.join("assets","icons",f"{s}.png"))] + if not os.path.isfile(os.path.join("assets","icons", f"{s}.png"))] if missing_icons: print(f"Warning: Missing color icon(s) for {missing_icons} in assets/icons/. Cards will still load.")