Add quality of life features
This commit is contained in:
70
main.py
70
main.py
@@ -1,11 +1,17 @@
|
|||||||
import os
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import android_ui as ui
|
import android_ui as ui
|
||||||
|
|
||||||
|
COLORS = {"RED": "", "END": ""}
|
||||||
except ImportError:
|
except ImportError:
|
||||||
import terminal_ui as ui
|
import terminal_ui as ui
|
||||||
|
|
||||||
|
COLORS = {"RED": "\033[91m", "END": "\033[0m"}
|
||||||
|
|
||||||
MIN_CELL_WIDTH = 15
|
MIN_CELL_WIDTH = 15
|
||||||
|
SAVE_FILE = "save.json"
|
||||||
|
|
||||||
|
|
||||||
def clear():
|
def clear():
|
||||||
@@ -28,7 +34,7 @@ def print_standings(players, guesses, results):
|
|||||||
# Header
|
# Header
|
||||||
width = max(MIN_CELL_WIDTH, *[len(player) for player in players])
|
width = max(MIN_CELL_WIDTH, *[len(player) for player in players])
|
||||||
|
|
||||||
print("| Round |", end="")
|
print("| Runde |", end="")
|
||||||
for player in players:
|
for player in players:
|
||||||
pad = " " * (width - len(player) - 2)
|
pad = " " * (width - len(player) - 2)
|
||||||
print(f" {player}{pad} |", end="")
|
print(f" {player}{pad} |", end="")
|
||||||
@@ -43,8 +49,13 @@ def print_standings(players, guesses, results):
|
|||||||
|
|
||||||
for player in players:
|
for player in players:
|
||||||
if num_round <= len(results[player]):
|
if num_round <= len(results[player]):
|
||||||
points[player] += calc_points(guesses[player][num_round - 1], results[player][num_round - 1])
|
points[player] += calc_points(
|
||||||
text = f"{points[player]} / {guesses[player][num_round - 1]} ({results[player][num_round - 1]})"
|
guesses[player][num_round - 1], results[player][num_round - 1]
|
||||||
|
)
|
||||||
|
correct = (
|
||||||
|
guesses[player][num_round - 1] != results[player][num_round - 1]
|
||||||
|
)
|
||||||
|
text = f"{COLORS['RED'] if correct else ''}{points[player]} / {guesses[player][num_round - 1]} ({results[player][num_round - 1]}){COLORS['END'] if correct else ''}"
|
||||||
else:
|
else:
|
||||||
text = f"??? / {guesses[player][num_round - 1]} (?)"
|
text = f"??? / {guesses[player][num_round - 1]} (?)"
|
||||||
|
|
||||||
@@ -58,18 +69,32 @@ def main():
|
|||||||
clear()
|
clear()
|
||||||
print("Hey! Willkommen bei WiZaRδ!\n")
|
print("Hey! Willkommen bei WiZaRδ!\n")
|
||||||
|
|
||||||
players = [name.strip() for name in ui.query("Gib die Spielernamen ein (Kommagetrennt)").split(",")]
|
# LOAD LAST GAME
|
||||||
guesses = {player: [] for player in players}
|
|
||||||
results = {player: [] for player in players}
|
if os.path.isfile("save.json") and ui.query_yes_no("Letztes Spiel laden?"):
|
||||||
|
with open(SAVE_FILE, "r") as file:
|
||||||
|
save = json.load(file)
|
||||||
|
players = save["players"]
|
||||||
|
guesses = save["guesses"]
|
||||||
|
results = save["results"]
|
||||||
|
else:
|
||||||
|
players = [
|
||||||
|
name.strip()
|
||||||
|
for name in ui.query("Gib die Spielernamen ein (Kommagetrennt)").split(",")
|
||||||
|
]
|
||||||
|
guesses = {player: [] for player in players}
|
||||||
|
results = {player: [] for player in players}
|
||||||
|
|
||||||
num_rounds = 60 // len(players)
|
num_rounds = 60 // len(players)
|
||||||
|
|
||||||
# NORMAL GAMEPLAY
|
# NORMAL GAMEPLAY
|
||||||
|
|
||||||
for i in range(1, num_rounds + 1):
|
for i in range(len(guesses[players[0]]) + 1, num_rounds + 1):
|
||||||
print("\n\n")
|
print("\n\n")
|
||||||
print(f"Runde {i} von {num_rounds}.")
|
print(f"Runde {i} von {num_rounds}.")
|
||||||
print(f"{players[(i - 1) % len(players)]} teilt aus, {players[i % len(players)]} fängt an.\n\n")
|
print(
|
||||||
|
f"{players[(i - 1) % len(players)]} teilt aus, {players[i % len(players)]} fängt an.\n\n"
|
||||||
|
)
|
||||||
|
|
||||||
# INPUT GUESSES
|
# INPUT GUESSES
|
||||||
|
|
||||||
@@ -82,7 +107,10 @@ def main():
|
|||||||
if j == i:
|
if j == i:
|
||||||
guess = ui.query_int(f"{player}, wie viele Stiche machst du?")
|
guess = ui.query_int(f"{player}, wie viele Stiche machst du?")
|
||||||
else:
|
else:
|
||||||
guess = ui.query_int(f"{player}?{f' ({i - guess_sum} ist nicht erlaubt)' if j == i + len(players) - 1 and i > 3 else ''}")
|
not_allowed = i - guess_sum
|
||||||
|
guess = ui.query_int(
|
||||||
|
f"{player}?{f' ({not_allowed} ist nicht erlaubt)' if j == i + len(players) - 1 and i > 3 and i - guess_sum >= 0 else ''}"
|
||||||
|
)
|
||||||
guesses[player] += [guess]
|
guesses[player] += [guess]
|
||||||
guess_sum += guess
|
guess_sum += guess
|
||||||
if j != i + len(players) - 1:
|
if j != i + len(players) - 1:
|
||||||
@@ -106,9 +134,11 @@ def main():
|
|||||||
for j in range(i, i + len(players)):
|
for j in range(i, i + len(players)):
|
||||||
player = players[j % len(players)]
|
player = players[j % len(players)]
|
||||||
if j == i:
|
if j == i:
|
||||||
result = ui.query_int(f"{player}, wie viele Stiche hast du gemacht?")
|
result = ui.query_int(
|
||||||
|
f"{player}, wie viele Stiche hast du von {guesses[player][-1]} gemacht?"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
result = ui.query_int(f"{player}?")
|
result = ui.query_int(f"{player}? (von {guesses[player][-1]})")
|
||||||
results[player] += [result]
|
results[player] += [result]
|
||||||
|
|
||||||
if j != i + len(players) - 1:
|
if j != i + len(players) - 1:
|
||||||
@@ -120,11 +150,29 @@ def main():
|
|||||||
else:
|
else:
|
||||||
remove_line(results)
|
remove_line(results)
|
||||||
|
|
||||||
|
# WRITE RESULTS
|
||||||
|
save = {"players": players, "guesses": guesses, "results": results}
|
||||||
|
with open(SAVE_FILE, "w") as file:
|
||||||
|
json.dump(save, file)
|
||||||
|
|
||||||
# PRINT STANDINGS
|
# PRINT STANDINGS
|
||||||
print()
|
print()
|
||||||
print_standings(players, guesses, results)
|
print_standings(players, guesses, results)
|
||||||
input("\nDrücke ENTER um fortzufahren...")
|
input("\nDrücke ENTER um fortzufahren...")
|
||||||
|
|
||||||
|
# Print places
|
||||||
|
|
||||||
|
results = reversed(
|
||||||
|
sorted(
|
||||||
|
[
|
||||||
|
(sum(map(calc_points, guesses[player], results[player])), player)
|
||||||
|
for player in players
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for i, (result, player) in enumerate(results):
|
||||||
|
print(f"{i + 1}. {player} with {result} points{' WOOOHOO!!' if i == 0 else ''}")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
Reference in New Issue
Block a user