diff --git a/main.py b/main.py index 320e72e..84e7913 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,11 @@ import csv score = 0 hodnoty = {} +players = {} +pointer = "" +first = "" +h_bool = True +aggr = {} with open("hodnoty.csv", "r") as csv_file: csv_reader = csv.reader(csv_file) @@ -45,6 +50,9 @@ def clear(): _ = system('clear') def evaluate(inp: Any, count: int, throw: str) -> tuple: + + global h_bool + def eval_score(pick: str) -> bool: if(pick in hodnoty): global score @@ -53,8 +61,19 @@ def evaluate(inp: Any, count: int, throw: str) -> tuple: else: return False + def next_player() -> None: + global pointer + + keys_iter = iter(players) + for key in keys_iter: + if key == pointer: + nxt_key = next(keys_iter, first) + break + + pointer = nxt_key + inp = str(inp) - if re.search("^\d+$", inp): + if re.search(r"^\d+$", inp): if len(inp) > count: data = ("msg", "ER01", "Tolika kostkami nemůžete hodit. Zkuste to znovu:", count, throw) return data @@ -82,12 +101,35 @@ def evaluate(inp: Any, count: int, throw: str) -> tuple: new_count = len(old_throw) - if eval_score(pick) == False: + if not eval_score(pick): new_count = count old_throw = throw + else: + h_bool = False data = ("count", new_count, old_throw) return data + elif 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, "") + return data + elif inp == "k": + global score + players[pointer].append(score) + aggr[pointer] = sum(players[pointer]) + score = 0 + h_bool = True + next_player() + data = ("count", 6, "") + return data + else: + data = ("msg", "ER03", "Zadejte prosím platnou hodnotu:", count, throw) + return data def check_value(throw: str) -> bool: throw_s = sorted(throw) @@ -100,6 +142,36 @@ def check_value(throw: str) -> bool: return hodnota +def add_players(iter=False): + global players + global pointer + global first + + if not iter: + var = "prvního hráče" + else: + var = "dalšího hráče nebo [x] pro ukončení zadávání hráčů" + + inp = input(f"Zadejte jméno {var}: ") + + if inp == "x": + if not iter: + add_players() + elif inp == "": + print("Jméno nemůže být prázdné.") + add_players(iter) + else: + if inp in players: + print("Zadávejte, prosím, unikátní jména.") + else: + players[inp] = [] + aggr[inp] = 0 + print(f"Do seznamu přidáno jméno {inp}.") + if not iter: + pointer = inp + first = inp + add_players(True) + def game(data: tuple): if data[0] == "count": count = data[1] @@ -107,26 +179,32 @@ def game(data: tuple): if(th == ""): th = throw(count) clear() + print(f"Na tahu je {pointer} ({aggr[pointer]})") print(show_throw(th)) - if not check_value(th) and data[2] == "": - print("Smůla, třeba příště.") + if not check_value(th) and data[2] == "" and count != 0: + global score + score = 0 + input("Oh no... anyway.") + data = evaluate("k", count, th) + game(data) else: + if count == 0: + count = 6 msg = ("Jakou akci chcete provést?\n" " - Zadejte kombinaci kostek k ponechání (dojde k jejich vyhodnocení): [pozice kostek] (např. 1 nebo 34 nebo 123456).\n" " - Hodit znovu: [h].\n" f" - Ukončit hod a ponechat si skóre z tohoto hodu ({score}): [k].\n" ) - # if old_throw != "": - # msg += f"\nHodnoty odložených kostek: {old_throw}" inp = input(msg) data = evaluate(inp, count, th) game(data) elif data[0] == "msg": - if data[1] == "ER01" or data[1] == "ER02": + if data[1] == "ER01" or data[1] == "ER02" or data[1] == "ER03": msg = data[2] count = data[3] th = data[4] + clear() inp = input(msg) data = evaluate(inp, count, th) game(data) @@ -136,6 +214,7 @@ def game(data: tuple): def main(): print("Vítejte ve hře v kostky!") + add_players() input("Prosím, stiskněte enter pro první hod:") data = ("count", 6, "") game(data)