Add quality of life features

This commit is contained in:
2022-08-17 23:32:21 +02:00
parent 12626bfeb3
commit 34004a0099

70
main.py
View File

@@ -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()