awacke1 commited on
Commit
a184f51
·
1 Parent(s): 6308b0d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -46
app.py CHANGED
@@ -1,34 +1,33 @@
 
 
 
1
  import streamlit as st
2
  import svgwrite
3
  from PIL import Image
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")
24
  dwg.add(suit)
25
  value = svgwrite.text.Text(value, insert=(5, card_height - 10), fill="black", font_size="16px", font_weight="bold")
26
  dwg.add(value)
27
-
28
- # Add level label
29
  level = svgwrite.text.Text(level.upper(), insert=(card_width - 50, card_height - 10), fill="black", font_size="12px", font_weight="bold")
30
- svg_string = dwg.tostring()
31
- return svg_string
 
 
32
 
33
  def display_parts_selection():
34
  selected_parts = {}
@@ -36,40 +35,55 @@ def display_parts_selection():
36
  selected_parts[part] = st.sidebar.selectbox(f"Select {part}", options)
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):
44
  card_width = st.sidebar.slider("Card Width", min_value=50, max_value=150, value=default_width, step=5)
45
  card_height = st.sidebar.slider("Card Height", min_value=75, max_value=200, value=default_height, step=5)
46
  return card_width, card_height
47
 
48
- def display_image_upload():
 
49
  uploaded_file = st.sidebar.file_uploader("Upload Card Background Image", type=["png", "jpg", "jpeg"])
50
  if uploaded_file is not None:
51
- image_name = uploaded_file.name
52
- with open(image_name, "wb") as f:
53
- f.write(uploaded_file.getbuffer())
54
- return image_name
 
 
 
55
  else:
56
  return None
57
-
 
58
  def display_card(selected_parts, selected_level, card_width, card_height, background):
59
  if background and os.path.exists(background):
60
- img = Image.open(background)
61
- img = img.resize((card_width, card_height))
62
- img_bytes = BytesIO()
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,26 +91,11 @@ def display_card(selected_parts, selected_level, card_width, card_height, backgr
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
-
88
- DEFAULT_CARD_WIDTH, DEFAULT_CARD_HEIGHT = get_default_card_size()
89
- DEFAULT_PARTS = get_default_parts()
90
- DEFAULT_LEVELS = get_default_levels()
91
-
92
- PARTS = {"background": ["white", "black", "red", "blue", "green", "yellow"],
93
- "suit": ["clubs", "diamonds", "hearts", "spades"],
94
- "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]}
95
-
96
- LEVELS = ["level 1", "common", "uncommon", "rare", "epic", "legendary", "mythic", "godlike"]
97
-
98
- selected_parts = display_parts_selection()
99
- selected_level = display_level_selection()
100
- card_width, card_height = display_size_selection(DEFAULT_CARD_WIDTH, DEFAULT_CARD_HEIGHT)
101
- background = display_image_upload()
102
- display_card(selected_parts, selected_level, card_width, card_height, background)
 
1
+ import os
2
+ from io import BytesIO
3
+
4
  import streamlit as st
5
  import svgwrite
6
  from PIL import Image
 
 
7
 
8
+ DEFAULT_CARD_WIDTH = 75
9
+ DEFAULT_CARD_HEIGHT = 100
10
 
11
+ PARTS = {"background": ["white", "black", "red", "blue", "green", "yellow"],
12
+ "suit": ["clubs", "diamonds", "hearts", "spades"],
13
+ "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]}
14
 
15
+ LEVELS = ["common", "uncommon", "rare", "epic", "legendary", "mythic", "godlike"]
 
16
 
 
 
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
  suit = svgwrite.text.Text(suit.upper(), insert=(5, 15), fill="black", font_size="16px", font_weight="bold")
23
  dwg.add(suit)
24
  value = svgwrite.text.Text(value, insert=(5, card_height - 10), fill="black", font_size="16px", font_weight="bold")
25
  dwg.add(value)
 
 
26
  level = svgwrite.text.Text(level.upper(), insert=(card_width - 50, card_height - 10), fill="black", font_size="12px", font_weight="bold")
27
+ dwg.add(level)
28
+
29
+ return dwg.tostring()
30
+
31
 
32
  def display_parts_selection():
33
  selected_parts = {}
 
35
  selected_parts[part] = st.sidebar.selectbox(f"Select {part}", options)
36
  return selected_parts
37
 
38
+
39
  def display_level_selection():
40
  selected_level = st.sidebar.selectbox("Select Level", LEVELS)
41
  return selected_level
42
 
43
+
44
  def display_size_selection(default_width, default_height):
45
  card_width = st.sidebar.slider("Card Width", min_value=50, max_value=150, value=default_width, step=5)
46
  card_height = st.sidebar.slider("Card Height", min_value=75, max_value=200, value=default_height, step=5)
47
  return card_width, card_height
48
 
49
+
50
+ def display_image_upload(card_width, card_height):
51
  uploaded_file = st.sidebar.file_uploader("Upload Card Background Image", type=["png", "jpg", "jpeg"])
52
  if uploaded_file is not None:
53
+ image = Image.open(uploaded_file)
54
+ image = image.resize((card_width, card_height))
55
+ img_bytes = BytesIO()
56
+ image.save(img_bytes, format="PNG")
57
+ img_data = img_bytes.getvalue()
58
+ img_href = "data:image/png;base64," + img_data.hex()
59
+ return img_href
60
  else:
61
  return None
62
+
63
+
64
  def display_card(selected_parts, selected_level, card_width, card_height, background):
65
  if background and os.path.exists(background):
 
 
 
 
 
 
66
  background_name = os.path.basename(background)
67
  st.sidebar.markdown(f"**Background Image:** {background_name}")
68
+ background_color = "white"
69
  else:
70
  st.sidebar.markdown(f"**Background Image:** {selected_parts['background'].capitalize()}")
71
+ background_color = selected_parts["background"]
72
+
73
+ card_svg = draw_card(background_color,
74
+ selected_parts["suit"],
75
+ selected_parts["value"],
76
+ selected_level,
77
+ card_width,
78
+ card_height)
79
+
80
+ # Add background
81
+ if background and os.path.exists(background):
82
+ img = svgwrite.image.Image(href=background, size=(f"{card_width}px", f"{card_height}px"))
83
+ dwg = svgwrite.fromstring(card_svg)
84
+ dwg.add(img)
85
+ card_svg = dwg.tostring()
86
 
 
87
  st.write(f'<svg viewBox="0 0 {card_width} {card_height}">{card_svg}</svg>', unsafe_allow_html=True)
88
 
89
  # Create a download link for the card SVG
 
91
  st.download_button("Download Card as SVG", svg_content, "card.svg", "text/plain")
92
 
93
  # Create button to level up card
94
+ if selected_level != "godlike":
95
  if st.button("Level Up"):
96
  current_level_index = LEVELS.index(selected_level)
97
  new_level = LEVELS[current_level_index + 1]
98
  selected_level = new_level
99
  st.sidebar.warning(f"Card has been leveled up to {selected_level}")
100
+ else:
101
+ st.sidebar.warning("This is the highest level")