mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-17 16:10:12 +01:00
Implemented logic for multiple-copy cards and counting pips
This commit is contained in:
parent
0dfe53bb32
commit
c4a56b2197
1 changed files with 22 additions and 18 deletions
|
|
@ -410,7 +410,7 @@ class DeckBuilder:
|
||||||
self.color_identity_options = ['G', 'W', 'G, W']
|
self.color_identity_options = ['G', 'W', 'G, W']
|
||||||
self.files_to_load = ['colorless', 'green', 'white', 'selesnya']
|
self.files_to_load = ['colorless', 'green', 'white', 'selesnya']
|
||||||
pass
|
pass
|
||||||
elif self.color_identity == 'U, R':
|
elif self.color_identity == 'R, U':
|
||||||
self.color_identity_full = 'Izzet Blue/Red'
|
self.color_identity_full = 'Izzet Blue/Red'
|
||||||
self.color_identity_options = ['U', 'R', 'U, R']
|
self.color_identity_options = ['U', 'R', 'U, R']
|
||||||
self.files_to_load = ['colorless', 'blue', 'red', 'azorius']
|
self.files_to_load = ['colorless', 'blue', 'red', 'azorius']
|
||||||
|
|
@ -594,6 +594,7 @@ class DeckBuilder:
|
||||||
secondary_theme_chosen = False
|
secondary_theme_chosen = False
|
||||||
tertiary_theme_chosen = False
|
tertiary_theme_chosen = False
|
||||||
self.hidden_theme = False
|
self.hidden_theme = False
|
||||||
|
print(weights)
|
||||||
|
|
||||||
while not secondary_theme_chosen:
|
while not secondary_theme_chosen:
|
||||||
# Secondary theme
|
# Secondary theme
|
||||||
|
|
@ -687,6 +688,8 @@ class DeckBuilder:
|
||||||
else:
|
else:
|
||||||
self.themes.append(self.tertiary_theme)
|
self.themes.append(self.tertiary_theme)
|
||||||
|
|
||||||
|
print(self.themes)
|
||||||
|
print(self.colors)
|
||||||
"""
|
"""
|
||||||
Setting 'Hidden' themes for multiple-copy cards, such as 'Hare Apparent' or 'Shadowborn Apostle'.
|
Setting 'Hidden' themes for multiple-copy cards, such as 'Hare Apparent' or 'Shadowborn Apostle'.
|
||||||
These are themes that will be prompted for under specific conditions, such as a matching Kindred theme or a matching color combination and Spellslinger theme for example.
|
These are themes that will be prompted for under specific conditions, such as a matching Kindred theme or a matching color combination and Spellslinger theme for example.
|
||||||
|
|
@ -695,7 +698,7 @@ class DeckBuilder:
|
||||||
# Setting hidden theme for Kindred-specific themes
|
# Setting hidden theme for Kindred-specific themes
|
||||||
hidden_themes = ['Advisor Kindred', 'Demon Kindred', 'Dwarf Kindred', 'Rabbit Kindred', 'Rat Kindred', 'Wraith Kindred']
|
hidden_themes = ['Advisor Kindred', 'Demon Kindred', 'Dwarf Kindred', 'Rabbit Kindred', 'Rat Kindred', 'Wraith Kindred']
|
||||||
theme_cards = ['Persistent Petitioners', 'Shadowborn Apostle', 'Seven Dwarves', 'Hare Apparent', ['Rat Colony', 'Relentless Rats'], 'Nazgûl']
|
theme_cards = ['Persistent Petitioners', 'Shadowborn Apostle', 'Seven Dwarves', 'Hare Apparent', ['Rat Colony', 'Relentless Rats'], 'Nazgûl']
|
||||||
color = ['Blue', 'Black', 'Red', 'White', 'Black', 'Black']
|
color = ['B', 'B', 'R', 'W', 'B', 'B']
|
||||||
for i in range(min(len(hidden_themes), len(theme_cards), len(color))):
|
for i in range(min(len(hidden_themes), len(theme_cards), len(color))):
|
||||||
if (hidden_themes[i] in self.themes
|
if (hidden_themes[i] in self.themes
|
||||||
and hidden_themes[i] != 'Rat Kindred'
|
and hidden_themes[i] != 'Rat Kindred'
|
||||||
|
|
@ -705,10 +708,11 @@ class DeckBuilder:
|
||||||
if choice:
|
if choice:
|
||||||
self.hidden_theme = theme_cards[i]
|
self.hidden_theme = theme_cards[i]
|
||||||
self.themes.append(self.hidden_theme)
|
self.themes.append(self.hidden_theme)
|
||||||
weights['primary'] -= weights['primary'] / 2 # 0.3
|
weights['primary'] = weights['primary'] / 3 # 0.3
|
||||||
weights['secondary'] += weights['secondary'] / 2 # 0.2
|
weights['secondary'] = weights['secondary'] / 3 # 0.2
|
||||||
weights['tertiary'] += weights['tertiary'] / 2 # 0.1
|
weights['tertiary'] = weights['tertiary'] / 3 # 0.1
|
||||||
weights['hidden'] = 1.0 - weights['primary'] - weights['secondary'] - weights['tertiary']
|
weights['hidden'] = 1.0 - weights['primary'] - weights['secondary'] - weights['tertiary']
|
||||||
|
print(weights)
|
||||||
self.primary_weight = weights['primary']
|
self.primary_weight = weights['primary']
|
||||||
self.secondary_weight = weights['secondary']
|
self.secondary_weight = weights['secondary']
|
||||||
self.tertiary_weight = weights['tertiary']
|
self.tertiary_weight = weights['tertiary']
|
||||||
|
|
@ -727,9 +731,9 @@ class DeckBuilder:
|
||||||
if choice:
|
if choice:
|
||||||
self.hidden_theme = choice
|
self.hidden_theme = choice
|
||||||
self.themes.append(self.hidden_theme)
|
self.themes.append(self.hidden_theme)
|
||||||
weights['primary'] -= weights['primary'] / 2 # 0.3
|
weights['primary'] = weights['primary'] / 3 # 0.3
|
||||||
weights['secondary'] += weights['secondary'] / 2 # 0.2
|
weights['secondary'] = weights['secondary'] / 3 # 0.2
|
||||||
weights['tertiary'] += weights['tertiary'] / 2 # 0.1
|
weights['tertiary'] = weights['tertiary'] / 3 # 0.1
|
||||||
weights['hidden'] = 1.0 - weights['primary'] - weights['secondary'] - weights['tertiary']
|
weights['hidden'] = 1.0 - weights['primary'] - weights['secondary'] - weights['tertiary']
|
||||||
self.primary_weight = weights['primary']
|
self.primary_weight = weights['primary']
|
||||||
self.secondary_weight = weights['secondary']
|
self.secondary_weight = weights['secondary']
|
||||||
|
|
@ -739,9 +743,9 @@ class DeckBuilder:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Setting the hidden theme for non-Kindred themes
|
# Setting the hidden theme for non-Kindred themes
|
||||||
hidden_themes = ['Little Fellas', 'Mill', 'Spellslinger', 'Spellslinger']
|
hidden_themes = ['Little Fellas', 'Mill', 'Spellslinger', 'Spells Matter', 'Spellslinger', 'Spells Matter',]
|
||||||
theme_cards = ['Hare Apparent', 'Persistent Petitions', 'Dragon\'s Approach', 'Slime Against Humanity']
|
theme_cards = ['Hare Apparent', 'Persistent Petitions', 'Dragon\'s Approach', 'Dragon\'s Approach', 'Slime Against Humanity', 'Slime Against Humanity']
|
||||||
color = ['White', 'Blue', 'Red', 'Green']
|
color = ['W', 'B', 'R', 'R', 'G', 'G']
|
||||||
for i in range(min(len(hidden_themes), len(theme_cards), len(color))):
|
for i in range(min(len(hidden_themes), len(theme_cards), len(color))):
|
||||||
if (hidden_themes[i] in self.themes
|
if (hidden_themes[i] in self.themes
|
||||||
and color[i] in self.colors):
|
and color[i] in self.colors):
|
||||||
|
|
@ -750,9 +754,9 @@ class DeckBuilder:
|
||||||
if choice:
|
if choice:
|
||||||
self.hidden_theme = theme_cards[i]
|
self.hidden_theme = theme_cards[i]
|
||||||
self.themes.append(self.hidden_theme)
|
self.themes.append(self.hidden_theme)
|
||||||
weights['primary'] -= weights['primary'] / 2 # 0.3
|
weights['primary'] = weights['primary'] / 3 # 0.3
|
||||||
weights['secondary'] += weights['secondary'] / 2 # 0.2
|
weights['secondary'] = weights['secondary'] / 3 # 0.2
|
||||||
weights['tertiary'] += weights['tertiary'] / 2 # 0.1
|
weights['tertiary'] = weights['tertiary'] / 3 # 0.1
|
||||||
weights['hidden'] = 1.0 - weights['primary'] - weights['secondary'] - weights['tertiary']
|
weights['hidden'] = 1.0 - weights['primary'] - weights['secondary'] - weights['tertiary']
|
||||||
self.primary_weight = weights['primary']
|
self.primary_weight = weights['primary']
|
||||||
self.secondary_weight = weights['secondary']
|
self.secondary_weight = weights['secondary']
|
||||||
|
|
@ -1616,7 +1620,7 @@ class DeckBuilder:
|
||||||
ideal_value = math.ceil(ideal * weight * 0.9)
|
ideal_value = math.ceil(ideal * weight * 0.9)
|
||||||
print(f'Finding {ideal_value} cards with the "{tag}" tag...')
|
print(f'Finding {ideal_value} cards with the "{tag}" tag...')
|
||||||
if 'Kindred' in tag:
|
if 'Kindred' in tag:
|
||||||
tags = [tag, 'Kindread Support']
|
tags = [tag, 'Kindred Support']
|
||||||
else:
|
else:
|
||||||
tags = [tag]
|
tags = [tag]
|
||||||
# Filter cards with the given tag
|
# Filter cards with the given tag
|
||||||
|
|
@ -1626,6 +1630,7 @@ class DeckBuilder:
|
||||||
# Take top cards based on ideal value
|
# Take top cards based on ideal value
|
||||||
pool_size = int(ideal_value * random.randint(15, 20) /10)
|
pool_size = int(ideal_value * random.randint(15, 20) /10)
|
||||||
tag_df = tag_df.head(pool_size)
|
tag_df = tag_df.head(pool_size)
|
||||||
|
print(tag_df)
|
||||||
|
|
||||||
# Convert to list of card dictionaries
|
# Convert to list of card dictionaries
|
||||||
card_pool = [
|
card_pool = [
|
||||||
|
|
@ -1661,8 +1666,7 @@ class DeckBuilder:
|
||||||
cards_to_add.append(card)
|
cards_to_add.append(card)
|
||||||
else:
|
else:
|
||||||
num_to_add = ideal_value - len(cards_to_add)
|
num_to_add = ideal_value - len(cards_to_add)
|
||||||
random_num_to_add = random.randint((num_to_add - 15), num_to_add)
|
for _ in range(num_to_add):
|
||||||
for _ in range(random_num_to_add):
|
|
||||||
cards_to_add.append(card)
|
cards_to_add.append(card)
|
||||||
|
|
||||||
elif (card['name'] not in multiple_copy_cards
|
elif (card['name'] not in multiple_copy_cards
|
||||||
|
|
@ -1764,7 +1768,7 @@ class DeckBuilder:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if self.hidden_theme:
|
if self.hidden_theme:
|
||||||
print(f'Processing primary theme: {self.hidden_theme}')
|
print(f'Processing Hidden theme: {self.hidden_theme}')
|
||||||
self.weight_by_theme(self.hidden_theme, self.ideal_creature_count, self.hidden_weight)
|
self.weight_by_theme(self.hidden_theme, self.ideal_creature_count, self.hidden_weight)
|
||||||
|
|
||||||
print(f'Processing primary theme: {self.primary_theme}')
|
print(f'Processing primary theme: {self.primary_theme}')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue