From 34004a0099e549ce750687ecd2ec632e5e3bf82c Mon Sep 17 00:00:00 2001 From: Lucas Alber Date: Wed, 17 Aug 2022 23:32:21 +0200 Subject: [PATCH] Add quality of life features --- main.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index 7200d7a..e59d29f 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,17 @@ import os +import json try: import android_ui as ui + + COLORS = {"RED": "", "END": ""} except ImportError: import terminal_ui as ui + COLORS = {"RED": "\033[91m", "END": "\033[0m"} + MIN_CELL_WIDTH = 15 +SAVE_FILE = "save.json" def clear(): @@ -28,7 +34,7 @@ def print_standings(players, guesses, results): # Header width = max(MIN_CELL_WIDTH, *[len(player) for player in players]) - print("| Round |", end="") + print("| Runde |", end="") for player in players: pad = " " * (width - len(player) - 2) print(f" {player}{pad} |", end="") @@ -43,8 +49,13 @@ def print_standings(players, guesses, results): for player in players: if num_round <= len(results[player]): - points[player] += calc_points(guesses[player][num_round - 1], results[player][num_round - 1]) - text = f"{points[player]} / {guesses[player][num_round - 1]} ({results[player][num_round - 1]})" + points[player] += calc_points( + 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: text = f"??? / {guesses[player][num_round - 1]} (?)" @@ -58,18 +69,32 @@ def main(): clear() print("Hey! Willkommen bei WiZaRδ!\n") - 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} + # LOAD LAST GAME + + 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) # 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(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 @@ -82,7 +107,10 @@ def main(): if j == i: guess = ui.query_int(f"{player}, wie viele Stiche machst du?") 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] guess_sum += guess if j != i + len(players) - 1: @@ -106,9 +134,11 @@ def main(): for j in range(i, i + len(players)): player = players[j % len(players)] 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: - result = ui.query_int(f"{player}?") + result = ui.query_int(f"{player}? (von {guesses[player][-1]})") results[player] += [result] if j != i + len(players) - 1: @@ -120,11 +150,29 @@ def main(): else: 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() print_standings(players, guesses, results) 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__": main()