diff --git a/panel/ID_card.py b/panel/ID_card.py
index e2cf68f..8939365 100644
--- a/panel/ID_card.py
+++ b/panel/ID_card.py
@@ -7,17 +7,17 @@
from starwalkers.func import get_d_sym, get_cost
+# Display Commander Grade with stars
def display_stars(grade):
full_star = '⭐'
empty_star = '☆'
max_stars = 5
-
stars = full_star * grade + empty_star * (max_stars - grade)
return stars
+# Reformatting money
def format_money(value):
- """Format money value into a more readable string with suffixes."""
if value >= 1_000_000_000:
return f"{value / 1_000_000_000:.2f}B"
elif value >= 1_000_000:
@@ -29,7 +29,7 @@ def format_money(value):
def ID_card(username, display="community_info"):
- user_info = sql.get_user(username)
+ user_info = sql.get_user(username) # Some elements are not necessary
money = user_info[2]
ship_list = user_info[3]
enemy_list = user_info[4]
@@ -61,10 +61,11 @@ def ID_card(username, display="community_info"):
navigation_time_bonus = user_info[30]
grade_token = user_info[31]
token_bonus = user_info[32]
-
+
if user_info:
st.header(f"🧑🏽🚀 Captain {username}'s ID Card {display_stars(grade)}")
+ # Resources (money)
st.subheader("💲 Resources")
colres1, colres2, colres3, colres4 = st.columns(4, gap="small")
colres1.metric(f"💲 Money", f"{format_money(money)}$")
@@ -74,6 +75,7 @@ def ID_card(username, display="community_info"):
if display == "player_info":
colres4.progress(battle_played)
+ # Space fleet
st.subheader("🚀 Space Fleet")
with st.expander(f"Space fleet capacity: {fleet_size} ships", expanded=True):
ship_data = []
@@ -99,12 +101,14 @@ def ID_card(username, display="community_info"):
else:
df = pd.DataFrame()
+ # Stats battles
st.subheader("⚔️ Battles")
colbattle1, colbattle2, colbattle3 = st.columns(3, gap="small")
colbattle1.metric(f"🏆 Win", f"{win}")
colbattle2.metric(f"💥 Loose", f"{loose}")
colbattle3.metric(f"⚖️ Win/Loss Ratio", f"{ratio_WL}")
+ # Skills and trophies
st.subheader("🏆 Skills and trophies")
if display == "player_info":
colsu1, colsu2, colsu3 = st.columns(3, gap="small")
diff --git a/panel/battle.py b/panel/battle.py
index 3a17e12..7df583d 100644
--- a/panel/battle.py
+++ b/panel/battle.py
@@ -10,7 +10,7 @@
def battle(username, df):
- user_info = sql.get_user(username)
+ user_info = sql.get_user(username) # Some elements are not necessary
money = user_info[2]
ship_list = user_info[3]
enemy_list = user_info[4]
@@ -43,15 +43,27 @@ def battle(username, df):
grade_token = user_info[31]
token_bonus = user_info[32]
+ # Header
st.header("⚔️ Space war")
colwar1, colwar2 = st.columns(2, gap="small")
if 'selected_ships_enemy' not in st.session_state or not st.session_state.selected_ships_enemy:
st.session_state.selected_ships_enemy = []
+ # Begin the battle
+ if colwar1.button("💥 Look for enemies !", disabled=True if len(enemy_list) > 2 else False):
+ for _ in range(random.randint(1, 10)):
+ ship = roll(proba_letter=p_letter, proba_number=p_number)
+ sql.add_ship(username, ship, "enemies")
+ st.toast("⚔️ The enemies enter the battles")
+ time.sleep(0.75) & st.rerun()
+
+ # During the battle
if enemy_list:
enemy_data = []
colfight1, colfight2 = st.columns(2, gap="small")
+
+ # Display enemies and selected enemies
for ship in json.loads(enemy_list):
enemy_data.append(
{"Ship": ship, "Value": get_d_sym(get_cost(ship)).replace('$', '💲')})
@@ -68,12 +80,10 @@ def battle(username, df):
colfight1.write("Enemies list:")
colfight1.dataframe(styled_df_enemy, use_container_width=True, hide_index=True)
- # Vérifiez et sélectionnez aléatoirement les navires ennemis si nécessaire
if not st.session_state.selected_ships_enemy:
num_ships_to_select = random.randint(1, 4 if len(enemy_data) >= 4 else len(enemy_data))
st.session_state.selected_ships_enemy = random.sample(enemy_data, num_ships_to_select)
- # Affichage des navires sélectionnés dans le deuxième tableau
colfight2.write("Fight against:")
styled_df_enemy = pd.DataFrame(st.session_state.selected_ships_enemy).sort_values(by="Value",
ascending=False)
@@ -83,6 +93,7 @@ def battle(username, df):
]).set_properties(**{'text-align': 'left'})
colfight2.dataframe(styled_selected_df_enemy, use_container_width=True, hide_index=True)
+ # Selection of shuttles to fight
if not df.empty and enemy_data:
colselectfight1, colselectfight2 = st.columns([2, 1], gap="small")
shuttles_for_fight = colselectfight1.multiselect("Select shuttles to fight", df["Ship"].tolist(),
@@ -91,10 +102,10 @@ def battle(username, df):
max_selections=4, default=df["Ship"].tolist()[:4])
value_player = int(sum(get_cost(ship) for ship in shuttles_for_fight) * random.uniform(1, damage_bonus))
value_enemies = int(sum(get_cost(ship) for ship in styled_df_enemy["Ship"]))
- # colselectfight2.write(value_enemies)
- # colselectfight2.write(value_player)
if colselectfight2.button(f"FIGHT !"):
damage = random.randint(0, 100)
+
+ # Win
if value_player > value_enemies:
sql.trade_token(username, len(styled_df_enemy['Ship']) + int(random.randint(0, token_bonus)))
money_win = int((sum(get_cost(ship) for ship in styled_df_enemy['Ship']) // 1.5) * random.uniform(1, treasure_money_bonus))
@@ -105,16 +116,17 @@ def battle(username, df):
for ship in shuttles_for_fight:
player_let, player_int = ship.split("-")
new_number = int(player_int) - (int((damage * random.uniform(resistance_bonus, 1))) // len(shuttles_for_fight))
- if new_number >= 0:
+ if new_number >= 0: # Shuttles operational
update_ship = roll(letter=player_let, number=new_number)
sql.add_ship(username, update_ship, "player", fight=True)
sql.remove_ship(username, ship, "player")
- else:
+ else: # Shuttles broken
sql.remove_ship(username, ship, "player", fight=True)
st.toast(f"💥 You loose {ship} in the battle.")
st.toast(f'🏆 You win the battle. 💲 Money win: {money_win}$. 🛠️ Damage: {damage}.')
time.sleep(2) & st.rerun()
+ # Loose
if value_player <= value_enemies:
sql.trade_token(username, len(shuttles_for_fight) + int(random.randint(0, token_bonus)))
for ship in shuttles_for_fight:
@@ -122,17 +134,18 @@ def battle(username, df):
for ship in styled_df_enemy['Ship']:
enemy_let, enemy_int = ship.split("-")
new_number = int(enemy_int) - (int((damage / random.uniform(1, resistance_bonus))) // len(styled_df_enemy))
- if new_number >= 0:
+ if new_number >= 0: # Shuttles operational
update_ship = roll(letter=enemy_let, number=new_number)
sql.add_ship(username, update_ship, "enemies", fight=True)
sql.remove_ship(username, ship, "enemies")
- else:
+ else: # Shuttles broken
sql.remove_ship(username, ship, "enemies", fight=True)
st.session_state.pop('selected_ships_enemy', None)
st.toast(
f'💥 You lost the battle and {" ".join(ship for ship in shuttles_for_fight)} shuttle(s)')
time.sleep(0.75) & st.rerun()
+ # Leave (coward)
if colwar2.button("🏃♂️Leave fight"):
if random.random() <= agility_bonus:
for ship in json.loads(enemy_list):
@@ -145,10 +158,3 @@ def battle(username, df):
elif df.empty:
st.warning("You don't have shuttles")
-
- if colwar1.button("💥 Look for enemies !", disabled=True if len(enemy_list) > 2 else False):
- for _ in range(random.randint(1, 10)):
- ship = roll(proba_letter=p_letter, proba_number=p_number)
- sql.add_ship(username, ship, "enemies")
- st.toast("⚔️ The enemies enter the battles")
- time.sleep(0.75) & st.rerun()
diff --git a/panel/community.py b/panel/community.py
index 350968e..1effbf5 100644
--- a/panel/community.py
+++ b/panel/community.py
@@ -7,7 +7,7 @@
def community(username):
- user_info = sql.get_user(username)
+ user_info = sql.get_user(username) # Some elements are not necessary
money = user_info[2]
ship_list = user_info[3]
enemy_list = user_info[4]
@@ -40,18 +40,23 @@ def community(username):
grade_token = user_info[31]
token_bonus = user_info[32]
+ # Header
st.header("👨🏼🚀 Community")
usernames = sql.get_user()
default_user = username if username in sql.get_user() else usernames[0]
+
colcom1, colcom2 = st.columns([2, 1], gap="small")
selected_username = colcom1.selectbox('👨🏽🚀 See a Captain', usernames, placeholder="Choose a captain")
+
if selected_username:
colcom2.markdown("")
colcom2.markdown("")
if colcom2.toggle(f"{selected_username} ID card"):
- ID_card.ID_card(selected_username)
+ ID_card.ID_card(selected_username) # See selected user
colsm1, colsm2 = st.columns([2, 1], gap="small")
+
+ # Send money
send_money = colsm1.slider("💸 Send money", step=1, min_value=0,
max_value=money if money > 0 else 1,
disabled=True if money < 1 or selected_username == username else False)
@@ -62,4 +67,4 @@ def community(username):
sql.update_money(selected_username, send_money, context="receiver")
sql.update_money(username, send_money, context="sender")
st.toast(f"💸 {send_money}$ sends to {selected_username}")
- time.sleep(0.75) & st.rerun()
\ No newline at end of file
+ time.sleep(0.75) & st.rerun()
diff --git a/panel/shop.py b/panel/shop.py
index 4235729..68efb08 100644
--- a/panel/shop.py
+++ b/panel/shop.py
@@ -8,7 +8,7 @@
def shop(username, df, value_list):
- user_info = sql.get_user(username)
+ user_info = sql.get_user(username) # Some elements are not necessary
money = user_info[2]
ship_list = user_info[3]
enemy_list = user_info[4]
@@ -41,6 +41,7 @@ def shop(username, df, value_list):
grade_token = user_info[31]
token_bonus = user_info[32]
+ # Header
st.header("🏪 Store")
# Open case
@@ -53,9 +54,10 @@ def shop(username, df, value_list):
if "buy_shuttles" not in st.session_state:
st.session_state.buy_shuttles = False
- if st.session_state.buy_shuttles is True:
+ if st.session_state.buy_shuttles is True and st.session_state.effect_sound:
sound_effects.shuttles()
st.session_state.buy_shuttles = False
+
colopencase2.markdown("")
if colopencase2.button(f"Open {open_case} case(s) for {open_case * ((10 + 10 * grade) * commerce_bonus)}$",
disabled=True if money < ((10 + 10 * grade) * commerce_bonus) or len(df) >= fleet_size else False):
@@ -71,6 +73,8 @@ def shop(username, df, value_list):
colsellship1, colsellship2 = st.columns([2, 1], gap="small")
if not df.empty:
+
+ # Select shuttles to sell
sell = colsellship1.multiselect("Sell ship", df["Ship"].tolist(), label_visibility="collapsed",
placeholder="Select shuttles for sale")
price = sum(get_cost(ship) for ship in sell)
@@ -82,6 +86,7 @@ def shop(username, df, value_list):
st.toast("The shuttles have been sold!")
time.sleep(0.75) & st.rerun()
+ # Sell by value
st.markdown("Sell shuttles of the same value")
sorted_values = sorted(value_list, reverse=True)
num_columns = 3
diff --git a/probabilities/probabilities_letter.py b/probabilities/probabilities_letter.py
index dc2ef19..4085094 100644
--- a/probabilities/probabilities_letter.py
+++ b/probabilities/probabilities_letter.py
@@ -12,9 +12,8 @@
total = sum(probabilities)
probabilities = [p / total for p in probabilities]
- # Sauvegarde des probabilités dans un fichier JSON
with open(f'probabilities_letter_{value}.json', 'w') as f:
json.dump(probabilities, f)
- print(f"Probabilités pour value={value} sauvegardées avec succès.")
+ print(f"Probabilities for value={value} saved successfully.")
diff --git a/probabilities/probabilities_number.py b/probabilities/probabilities_number.py
index 326402f..b702d40 100644
--- a/probabilities/probabilities_number.py
+++ b/probabilities/probabilities_number.py
@@ -11,8 +11,7 @@
total_probability = sum(probabilities_number)
probabilities_number = [p / total_probability for p in probabilities_number]
- # Sauvegarde des probabilités dans un fichier JSON
with open(f'probabilities_number_{value}.json', 'w') as f:
json.dump(probabilities_number, f)
- print("Probabilités sauvegardées avec succès.")
+ print(f"Probabilities for value={value} saved successfully.")
diff --git a/scheduled_tasks.py b/scheduled_tasks.py
index 622e6c8..1ffac69 100644
--- a/scheduled_tasks.py
+++ b/scheduled_tasks.py
@@ -24,7 +24,7 @@ def create_backup():
backup_filename = f'users_{now}.db'
backup_path = os.path.join(backup_dir, backup_filename)
shutil.copy2(db_path, backup_path)
- print(f'Sauvegarde créée : {backup_path}')
+ print(f'Backup created : {backup_path}')
# Clean old backups if more than 10 present
backups = sorted(os.listdir(backup_dir), key=lambda x: os.path.getmtime(os.path.join(backup_dir, x)))
diff --git a/starwalkers/func.py b/starwalkers/func.py
index 8386ffb..08b95ff 100644
--- a/starwalkers/func.py
+++ b/starwalkers/func.py
@@ -5,7 +5,7 @@
def got_let_int(letter): # Letter value
letters = {
- "*": 100,
+ "*": 100, # This one not accessible by random buy of shuttles
"A": 26,
"B": 25,
"C": 24,
@@ -39,6 +39,7 @@ def roll(proba_letter=None, proba_number=None, number_min=None, number_max=None,
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
+ # To manage categories
if letter_min or letter_max:
min_index = letters.index(letter_min.upper())
max_index = letters.index(letter_max.upper())
@@ -48,24 +49,27 @@ def roll(proba_letter=None, proba_number=None, number_min=None, number_max=None,
sub_letters = letters[max_index:min_index + 1]
ship_let = random.choice(sub_letters)
+ # Specific letter
elif letter is not None:
ship_let = letter
+ # Random letter
else:
- letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
with open(f'probabilities/probabilities_letter_{proba_letter}.json', 'r') as f:
probabilities = json.load(f)
ship_let = random.choices(letters, weights=probabilities)[0]
+ # To manage categories
if number_min or number_max:
number_min = 0 if number_min is None else number_min
number_max = 9999 if number_max is None else number_max
ran = random.randint(number_min, number_max) if number is None else number
+ # Specific number
elif number is not None:
ran = number
+ # Random number
else:
digits = list(range(10000))
with open(f'probabilities/probabilities_number_{proba_number}.json', 'r') as f:
@@ -91,7 +95,7 @@ def get_cost(a): # Get cost of a ship
return cost
-def upgrade_fleet(fleet_size):
+def upgrade_fleet(fleet_size): # Price for upgrade fleet size
x1 = 10
y1 = 0.5
x2 = 40
@@ -102,6 +106,6 @@ def upgrade_fleet(fleet_size):
return price
-def upgrade(grade, coefficient, multiplier):
+def upgrade(grade, coefficient, multiplier): # Price for skills and others capacities
price = math.floor(multiplier * math.exp(coefficient * (grade + 1)))
return price
diff --git a/starwalkers/sound_effects.py b/starwalkers/sound_effects.py
index 022b32c..1ef6ba8 100644
--- a/starwalkers/sound_effects.py
+++ b/starwalkers/sound_effects.py
@@ -4,36 +4,33 @@
import streamlit as st
-def shuttles():
+def shuttles(): # Effects for shuttles
audio_files = [os.path.join('./sounds/effect/shuttles/', f) for f in os.listdir('./sounds/effect/shuttles/') if
f.endswith('.mp3')]
effect(audio_files)
-def battle():
+def battle(): # Effects for battle
audio_files = [os.path.join('./sounds/effect/battle/', f) for f in os.listdir('./sounds/effect/battle/') if f.endswith('.mp3')]
effect(audio_files)
-def effect(audio_files):
+def effect(audio_files): # Output for effect sound
st.markdown(f"""
""", unsafe_allow_html=True)
-def ambient():
+def ambient(): # Ambient sound
audio_files = [os.path.join('./sounds/ambient/', f) for f in os.listdir('./sounds/ambient/') if f.endswith('.mp3')]
concatenated_audio = b""
for file_path in audio_files:
with open(file_path, 'rb') as f:
concatenated_audio += f.read()
-
- # Encoder le fichier audio en base64
audio_data = base64.b64encode(concatenated_audio).decode()
- # Inclure le fichier audio dans st.markdown()
st.markdown(f"""