awacke1 commited on
Commit
1dc4501
·
1 Parent(s): ab8aab7

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -0
app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import svgwrite
3
+ from PIL import Image
4
+ import urllib.request
5
+
6
+ DEFAULT_CARD_WIDTH = 75
7
+ DEFAULT_CARD_HEIGHT = 100
8
+
9
+ PARTS = {"background": ["white", "black", "red", "blue", "green", "yellow"],
10
+ "suit": ["clubs", "diamonds", "hearts", "spades"],
11
+ "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]}
12
+
13
+ LEVELS = {"level 1": ["common", "uncommon", "rare"],
14
+ "level 2": ["epic", "legendary", "mythic"],
15
+ "level 3": ["godlike"]}
16
+
17
+ def draw_card(background, suit, value, level, card_width, card_height):
18
+ dwg = svgwrite.Drawing(size=(f"{card_width}px", f"{card_height}px"))
19
+ dwg.add(dwg.rect((0, 0), (card_width, card_height), rx=10, ry=10, fill="white", stroke="black", stroke_width=2))
20
+ if background:
21
+ img = svgwrite.image.Image(href=background, size=(f"{card_width}px", f"{card_height}px"))
22
+ dwg.add(img)
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
+ level = svgwrite.text.Text(level.upper(), insert=(card_width - 50, card_height - 10), fill="black", font_size="12px", font_weight="bold")
28
+ dwg.add(level)
29
+ svg_string = dwg.tostring()
30
+ return svg_string
31
+
32
+ def display_parts_selection():
33
+ selected_parts = {}
34
+ for part, options in PARTS.items():
35
+ selected_parts[part] = st.sidebar.selectbox(f"Select {part}", options)
36
+ return selected_parts
37
+
38
+ def display_level_selection():
39
+ selected_level = st.sidebar.selectbox("Select Level", list(LEVELS.keys()))
40
+ return selected_level
41
+
42
+ def display_size_selection(default_width, default_height):
43
+ card_width = st.sidebar.slider("Card Width", min_value=50, max_value=150, value=default_width, step=5)
44
+ card_height = st.sidebar.slider("Card Height", min_value=75, max_value=200, value=default_height, step=5)
45
+ return card_width, card_height
46
+
47
+ def display_image_upload():
48
+ uploaded_file = st.sidebar.file_uploader("Upload Card Background Image", type=["png", "jpg", "jpeg"])
49
+ if uploaded_file is not None:
50
+ image = Image.open(uploaded_file)
51
+ image.save("background.png")
52
+ return "background.png"
53
+ else:
54
+ return None
55
+
56
+ def display_card(selected_parts, selected_level, card_width, card_height, background):
57
+ card_svg = draw_card(background, selected_parts["suit"], selected_parts["value"], selected_level, card_width, card_height)
58
+ st.write(f'<svg viewBox="0 0 {card_width} {card_height}">{card_svg}</svg>', unsafe_allow_html=True)
59
+
60
+ # Create a download link for the card SVG
61
+ svg_content = '<?xml version="1.0" encoding="utf-8" ?>' + card_svg
62
+ st.download_button("Download Card as SVG", svg_content, "card.svg", "text/plain")
63
+
64
+ # Create button to level up card
65
+ if selected_level != "level 3":
66
+ if st.button("Level Up"):
67
+ current_level_index = list(LEVELS.keys()).index(selected_level)
68
+ new_level = list(LEVELS.keys())[current_level_index + 1]
69
+ selected_level = new_level
70
+ st.sidebar.warning(f"Card has been leveled up to {selected_level}")
71
+
72
+ st.set_page_config(page_title="Card Evolution Game", page_icon=":hearts:")
73
+
74
+ selected_parts = display_parts_selection()
75
+ selected_level = display_level_selection()
76
+ card_width, card_height = display_size_selection(DEFAULT_CARD_WIDTH, DEFAULT_CARD_HEIGHT)
77
+ background = display_image_upload()
78
+ display_card(selected_parts, selected_level, card_width, card_height, background)