117 lines
3.0 KiB
Python
117 lines
3.0 KiB
Python
from random import randint
|
||
from os import system, name
|
||
import re
|
||
import csv
|
||
|
||
score = 0
|
||
hodnoty = {}
|
||
|
||
with open("hodnoty.csv", "r") as csv_file:
|
||
csv_reader = csv.reader(csv_file)
|
||
|
||
for row in csv_reader:
|
||
key = str(row[0])
|
||
value = str(row[1])
|
||
|
||
hodnoty[key] = value
|
||
|
||
def throw(count: int) -> str:
|
||
count = int(count)
|
||
new_throw = []
|
||
for dice in range(count):
|
||
new_throw.append(str(randint(1, 6)))
|
||
new_throw = "".join(new_throw)
|
||
return new_throw
|
||
|
||
def show_throw(throw):
|
||
throw_temp = []
|
||
for x in throw:
|
||
throw_temp.append(x)
|
||
|
||
pretty_list = ", ".join(throw_temp)
|
||
pretty_list += "\n"
|
||
for i in range(1, len(throw_temp) + 1):
|
||
pretty_list += "^ "
|
||
pretty_list += "\n"
|
||
for i in range(1, len(throw_temp) + 1):
|
||
pretty_list += f"{i} "
|
||
return pretty_list
|
||
|
||
def clear():
|
||
if name == 'nt':
|
||
_ = system('cls')
|
||
else:
|
||
_ = system('clear')
|
||
|
||
def evaluate(inp, count, throw):
|
||
inp = str(inp)
|
||
if re.search("^\d+$", inp):
|
||
if len(inp) > count:
|
||
data = ("msg", "ER01", "Tolika kostkami nemůžete hodit. Zkuste to znovu:", count)
|
||
return data
|
||
else:
|
||
for x in inp:
|
||
x = int(x)
|
||
if x > count:
|
||
if count == 1:
|
||
ran = "1"
|
||
else:
|
||
ran = f"1–{count}"
|
||
data = ("msg", "ER02", f"Zvolte prosím kostky v platném rozsahu ({ran}):", count)
|
||
return data
|
||
old_throw = []
|
||
for y in range(count):
|
||
if str(y+1) in inp:
|
||
old_throw.append(throw[y])
|
||
|
||
count = len(inp)
|
||
data = ("count", count, old_throw)
|
||
return data
|
||
|
||
def check_value(throw):
|
||
throw_s = sorted(throw)
|
||
throw_str = "".join(throw_s)
|
||
hodnota = False
|
||
for h in hodnoty:
|
||
if h in throw_str:
|
||
hodnota = True
|
||
break
|
||
|
||
return hodnota
|
||
|
||
def game(data: tuple):
|
||
if data[0] == "count":
|
||
count = data[1]
|
||
old_throw = data[2]
|
||
new_throw = throw(count)
|
||
clear()
|
||
print(show_throw(new_throw))
|
||
if check_value(new_throw):
|
||
msg = "Vyberte, kterými kostkami chcete hodit znovu (např. 135):"
|
||
if old_throw != "":
|
||
msg += f"\nHodnoty odložených kostek: {old_throw}"
|
||
inp = input(msg)
|
||
data = evaluate(inp, count, new_throw)
|
||
game(data)
|
||
else:
|
||
print("Smůla, třeba příště.")
|
||
elif data[0] == "msg":
|
||
if data[1] == "ER01" or data[1] == "ER02":
|
||
msg = data[2]
|
||
count = data[3]
|
||
inp = input(msg)
|
||
data = evaluate(inp, count)
|
||
game(data)
|
||
else:
|
||
msg = data[1]
|
||
print(msg)
|
||
|
||
def main():
|
||
print("Vítejte ve hře v kostky!")
|
||
input("Prosím, stiskněte enter pro první hod:")
|
||
data = ("count", 6, "")
|
||
game(data)
|
||
|
||
if __name__ == "__main__":
|
||
main()
|