Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -4,33 +4,20 @@ from PIL import Image
|
|
4 |
from io import BytesIO
|
5 |
import os
|
6 |
|
7 |
-
|
8 |
-
DEFAULT_CARD_HEIGHT = 100
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
"level 3": ["godlike"]}
|
17 |
|
18 |
def draw_card(background, suit, value, level, card_width, card_height):
|
19 |
-
print(f"Background image: {background}")
|
20 |
dwg = svgwrite.Drawing(size=(f"{card_width}px", f"{card_height}px"))
|
21 |
-
dwg.add(dwg.rect((0, 0), (card_width, card_height), rx=10, ry=10, fill=
|
22 |
-
|
23 |
-
# Add background image, if provided
|
24 |
-
if background and os.path.exists(background):
|
25 |
-
img = Image.open(background)
|
26 |
-
print("Image opened successfully")
|
27 |
-
img = img.resize((card_width, card_height))
|
28 |
-
img_bytes = BytesIO()
|
29 |
-
img.save(img_bytes, format="PNG")
|
30 |
-
img_data = img_bytes.getvalue()
|
31 |
-
img_href = "data:image/png;base64," + img_data.hex()
|
32 |
-
img = svgwrite.image.Image(href=img_href, size=(f"{card_width}px", f"{card_height}px"))
|
33 |
-
dwg.add(img)
|
34 |
|
35 |
# Add suit and value labels
|
36 |
suit = svgwrite.text.Text(suit.upper(), insert=(5, 15), fill="black", font_size="16px", font_weight="bold")
|
@@ -43,7 +30,6 @@ def draw_card(background, suit, value, level, card_width, card_height):
|
|
43 |
svg_string = dwg.tostring()
|
44 |
return svg_string
|
45 |
|
46 |
-
|
47 |
def display_parts_selection():
|
48 |
selected_parts = {}
|
49 |
for part, options in PARTS.items():
|
@@ -51,7 +37,7 @@ def display_parts_selection():
|
|
51 |
return selected_parts
|
52 |
|
53 |
def display_level_selection():
|
54 |
-
selected_level = st.sidebar.selectbox("Select Level",
|
55 |
return selected_level
|
56 |
|
57 |
def display_size_selection(default_width, default_height):
|
@@ -77,8 +63,13 @@ def display_card(selected_parts, selected_level, card_width, card_height, backgr
|
|
77 |
img.save(img_bytes, format="PNG")
|
78 |
img_data = img_bytes.getvalue()
|
79 |
img_href = "data:image/png;base64," + img_data.hex()
|
|
|
|
|
80 |
background = img_href
|
81 |
-
|
|
|
|
|
|
|
82 |
st.write(f'<svg viewBox="0 0 {card_width} {card_height}">{card_svg}</svg>', unsafe_allow_html=True)
|
83 |
|
84 |
# Create a download link for the card SVG
|
@@ -86,16 +77,25 @@ def display_card(selected_parts, selected_level, card_width, card_height, backgr
|
|
86 |
st.download_button("Download Card as SVG", svg_content, "card.svg", "text/plain")
|
87 |
|
88 |
# Create button to level up card
|
89 |
-
if selected_level !=
|
90 |
if st.button("Level Up"):
|
91 |
-
current_level_index =
|
92 |
-
new_level =
|
93 |
selected_level = new_level
|
94 |
st.sidebar.warning(f"Card has been leveled up to {selected_level}")
|
95 |
|
96 |
-
|
97 |
st.set_page_config(page_title="Card Evolution Game", page_icon=":hearts:")
|
98 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
selected_parts = display_parts_selection()
|
100 |
selected_level = display_level_selection()
|
101 |
card_width, card_height = display_size_selection(DEFAULT_CARD_WIDTH, DEFAULT_CARD_HEIGHT)
|
|
|
4 |
from io import BytesIO
|
5 |
import os
|
6 |
|
7 |
+
st.set_page_config(page_title="Card Evolution Game", page_icon=":hearts:")
|
|
|
8 |
|
9 |
+
def get_default_card_size():
|
10 |
+
return 75, 100
|
11 |
+
|
12 |
+
def get_default_parts():
|
13 |
+
return {"background": "white", "suit": "clubs", "value": "1"}
|
14 |
|
15 |
+
def get_default_levels():
|
16 |
+
return ["level 1", "common"]
|
|
|
17 |
|
18 |
def draw_card(background, suit, value, level, card_width, card_height):
|
|
|
19 |
dwg = svgwrite.Drawing(size=(f"{card_width}px", f"{card_height}px"))
|
20 |
+
dwg.add(dwg.rect((0, 0), (card_width, card_height), rx=10, ry=10, fill=background, stroke="black", stroke_width=2))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
# Add suit and value labels
|
23 |
suit = svgwrite.text.Text(suit.upper(), insert=(5, 15), fill="black", font_size="16px", font_weight="bold")
|
|
|
30 |
svg_string = dwg.tostring()
|
31 |
return svg_string
|
32 |
|
|
|
33 |
def display_parts_selection():
|
34 |
selected_parts = {}
|
35 |
for part, options in PARTS.items():
|
|
|
37 |
return selected_parts
|
38 |
|
39 |
def display_level_selection():
|
40 |
+
selected_level = st.sidebar.selectbox("Select Level", LEVELS)
|
41 |
return selected_level
|
42 |
|
43 |
def display_size_selection(default_width, default_height):
|
|
|
63 |
img.save(img_bytes, format="PNG")
|
64 |
img_data = img_bytes.getvalue()
|
65 |
img_href = "data:image/png;base64," + img_data.hex()
|
66 |
+
background_name = os.path.basename(background)
|
67 |
+
st.sidebar.markdown(f"**Background Image:** {background_name}")
|
68 |
background = img_href
|
69 |
+
else:
|
70 |
+
st.sidebar.markdown(f"**Background Image:** {selected_parts['background'].capitalize()}")
|
71 |
+
|
72 |
+
card_svg = draw_card(selected_parts["background"], selected_parts["suit"], selected_parts["value"], selected_level, card_width, card_height)
|
73 |
st.write(f'<svg viewBox="0 0 {card_width} {card_height}">{card_svg}</svg>', unsafe_allow_html=True)
|
74 |
|
75 |
# Create a download link for the card SVG
|
|
|
77 |
st.download_button("Download Card as SVG", svg_content, "card.svg", "text/plain")
|
78 |
|
79 |
# Create button to level up card
|
80 |
+
if selected_level != LEVELS[-1]:
|
81 |
if st.button("Level Up"):
|
82 |
+
current_level_index = LEVELS.index(selected_level)
|
83 |
+
new_level = LEVELS[current_level_index + 1]
|
84 |
selected_level = new_level
|
85 |
st.sidebar.warning(f"Card has been leveled up to {selected_level}")
|
86 |
|
|
|
87 |
st.set_page_config(page_title="Card Evolution Game", page_icon=":hearts:")
|
88 |
|
89 |
+
DEFAULT_CARD_WIDTH, DEFAULT_CARD_HEIGHT = get_default_card_size()
|
90 |
+
DEFAULT_PARTS = get_default_parts()
|
91 |
+
DEFAULT_LEVELS = get_default_levels()
|
92 |
+
|
93 |
+
PARTS = {"background": ["white", "black", "red", "blue", "green", "yellow"],
|
94 |
+
"suit": ["clubs", "diamonds", "hearts", "spades"],
|
95 |
+
"value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]}
|
96 |
+
|
97 |
+
LEVELS = ["level 1", "common", "uncommon", "rare", "epic", "legendary", "mythic", "godlike"]
|
98 |
+
|
99 |
selected_parts = display_parts_selection()
|
100 |
selected_level = display_level_selection()
|
101 |
card_width, card_height = display_size_selection(DEFAULT_CARD_WIDTH, DEFAULT_CARD_HEIGHT)
|