feature: multiplayer – registrace hráčů, střídání tahů a agregace skóre #9
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user