diff --git a/kostky/kostky.py b/kostky/kostky.py index 13cd539..821b21a 100644 --- a/kostky/kostky.py +++ b/kostky/kostky.py @@ -8,12 +8,10 @@ from typing import Any from tabulate import tabulate -score: int = 0 hodnoty: dict[str, int] = {} players: dict[str, list[int]] = {} pointer: str = "" first: str = "" -h_bool: bool = True aggr: dict[str, int] = {} final_score: int = 10000 @@ -154,9 +152,7 @@ def eval_wrapper(count: int, throw: str, inp_hod: str) -> tuple[bool, int, int, return data -def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]: - - global h_bool +def evaluate(inp_akce: str, count: int, score: int) -> tuple[Any, ...]: def next_player() -> None: global pointer @@ -169,20 +165,10 @@ def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]: pointer = nxt_key - inp = str(inp) - - if inp == "h": - if h_bool: - clear() - input("Nemůžete házet znovu, dokud nevyhodnotíte některé kostky.") - data = ("count", count, throw) - else: - h_bool = True - data = ("count", count, "") - - elif inp == "k": - global score + if inp_akce == "h": + data = ("count", count, score) + elif inp_akce == "k" or not inp_akce: if score == 0: last_two = players[pointer][-2:] if len(last_two) > 1: @@ -194,21 +180,16 @@ def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]: players[pointer].append(score) aggr[pointer] = sum(players[pointer]) - score = 0 - h_bool = True next_player() - data = ("count", 6, "") + data = ("count", 6, 0) if pointer == first: winner: str = check_win() if winner: data = ("win", winner, aggr[winner]) - elif inp == "exit": + elif inp_akce == "x": data = ("exit",) - else: - data = ("msg", "ER03", "Zadejte prosím platnou hodnotu:", count, throw) - return data def check_value(throw: str) -> bool: @@ -310,54 +291,65 @@ def game(data: tuple) -> None: while True: if data[0] == "count": count: int = data[1] - th: str = data[2] - if(th == ""): - th = throw(count) + score: int = data[2] + if not count: + count = 6 + th = throw(count) clear() - # print(f"Vítězné skóre: {final_score}.") strikes: str = "" if len(players[pointer]) > 0: if players[pointer][-1:][0] == 0: strikes = "x" - if players[pointer][-2:][0] == 0: + if players[pointer][-2:][0] == 0 and len(players[pointer]) > 1: strikes += "x" else: strikes = "" print(f"Na tahu je {pointer} ({aggr[pointer]}{strikes}/{final_score}).") print(show_throw(th)) - if not check_value(th) and data[2] == "" and count != 0: - global score + if not check_value(th) and count != 0: score = 0 input("Oh no... anyway.") - data = evaluate("k", count, th) + data = evaluate("k", count, score) else: if count == 0: count = 6 - msg: str = ("Jakou akci chcete provést?\n" - " - Zadejte kombinaci kostek k ponechání (dojde k jejich vyhodnocení): " - "[pozice kostek] (např. a nebo cd nebo abcdef).\n" - " - Hodit znovu: [h].\n" - f" - Ukončit hod a ponechat si skóre z tohoto hodu ({score}): [k].\n" - " - Ukončit hru: [exit].\n" - ) - inp: str = input(msg) - data = evaluate(inp, count, th) + inp_hod: str = input("Vyberte kostky k vyhodnocení: ") + while True: + data = eval_wrapper(count, th, inp_hod) + if not data[0]: + inp_hod = input(data[3]) + continue + score_temp = data[1] + print("Hodnota hodu:", score_temp) + add = ("Hodnota je nulová. Ukončit kolo a přičíst " + f"{score} bodů? ") if not score_temp else "" + while True: + inp = input(f"Potvrdit výběr? {add}[a]no/[n]e: ") + if inp in ["a", "y", "n"]: + break + if inp in ["a", "y"]: + count = data[2] + score += score_temp + break + inp_hod = input("Vyberte kostky k vyhodnocení: ") + + while True: + if not score_temp: + inp_akce: str = "k" + else: + inp_akce = input( + f"[h]odit znovu\nu[k]ončit tah a přičíst {score} bodů\ne[x]it?\n" + ) + if inp_akce in ["h", "k", "x"]: + break + else: + print("Zadejte prosím platnou hodnotu [h/k/x]. ") + + data = evaluate(inp_akce, count, score) - elif data[0] == "msg": - if data[1] == "ER01" or data[1] == "ER02" or data[1] == "ER03": - msg = data[2] - count = data[3] - th = data[4] - inp = input(msg) - data = evaluate(inp, count, th) - else: - msg = data[1] - print(msg) - break - elif data[0] == "win": winner: str = data[1] score = data[2] @@ -375,7 +367,7 @@ def main() -> None: clear() print("Vítejte ve hře v kostky!") add_players() - data = ("count", 6, "") + data = ("count", 6, 0) game(data) if __name__ == "__main__":