75 Commits
Author SHA1 Message Date
david-spacil e2d689a618 Merge pull request 'hotfix: odstranění hodnoty pro 2×1 – redundantní' (#29) from hotfix/oprava-hodnoty into main
Reviewed-on: david/kostky#29
2026-06-28 07:49:53 +02:00
David Spáčil c53a58c8e4 hotfix: odstranění hodnoty pro 2×1 – redundantní 2026-06-28 07:48:08 +02:00
david-spacil 48f8998d7c Merge pull request 'release: v0.2.0' (#28) from version/v0.2.0 into main
Reviewed-on: david/kostky#28
2026-06-27 19:42:21 +02:00
David Spáčil 17ccd3b61a fix: změna z čísel na písmena v nabídce možností 2026-06-27 19:41:02 +02:00
david-spacil 1fc55d90f3 Aktualizovat README.md 2026-06-27 19:40:09 +02:00
david-spacil 0a83d27962 Merge pull request 'enhancement: výběr kostek písmeny místo čísel' (#27) from enhancement/pismena-misto-cisel into version/v0.2.0
Reviewed-on: david/kostky#27
2026-06-27 19:28:30 +02:00
David Spáčil 06474e7f68 enhancement/pismena: převod z čísel na písmena a zpět 2026-06-27 19:24:19 +02:00
david-spacil d7648a196c Merge pull request 'build: zabalení hry do instalovatelného Python balíčku' (#26) from package into version/v0.2.0
Reviewed-on: david/kostky#26
2026-06-27 19:18:48 +02:00
David Spáčil db3f71592c fix: oprava anotace to_sorted_tuple() 2026-06-27 18:47:54 +02:00
David Spáčil 69b30552cb fix: opravy (načítání csv + ruff) 2026-06-27 18:38:40 +02:00
David Spáčil a9ef19ee52 package: změna názvu importu v __main__.py 2026-06-27 18:18:37 +02:00
David Spáčil a31eff26fd package: přidat pyproject.toml 2026-06-27 18:18:16 +02:00
David Spáčil 9346735af6 package: přejmenovat main.py na kostky.py 2026-06-27 18:16:04 +02:00
David Spáčil 3808081482 package: povinná struktura 2026-06-27 18:10:02 +02:00
David Spáčil 9d5c51a17a package: bezpečné otevírání csv 2026-06-27 18:09:43 +02:00
David Spáčil 388c92f817 package: přesuny souborů 2026-06-27 18:09:15 +02:00
David Spáčil 754119980f package: update .gitignore 2026-06-27 18:05:57 +02:00
david-spacil 74849ff503 Merge pull request 'feature: výsledková tabulka na konci hry' (#24) from feature/vysledky into version/v0.2.0
Reviewed-on: david/kostky#24
2026-06-27 17:51:50 +02:00
David Spáčil c8a31ac6be fix: oprava anotace 2026-06-27 17:29:41 +02:00
David Spáčil 7b0c9cadbb feature/vysledky: definice funkce win() a její volání z bloku win ve funkci game() 2026-06-27 17:15:47 +02:00
David Spáčil bdd66379f7 feature/vysledky: list z to_sorted_tuple() se vrací s číslováním pořadí 2026-06-27 17:11:10 +02:00
David Spáčil c3a2e94cab feature/vysledky: funkce pro řazení výsledku na základě kódu v check_win(); kód v check_win() nahrazen funkcí 2026-06-27 16:58:10 +02:00
david-spacil 485f152a41 Merge pull request 'Refactoring: typové anotace a úklid' (#23) from refactoring into version/v0.2.0
Reviewed-on: david/kostky#23
2026-06-27 12:59:05 +02:00
David Spáčil 26ad8508b5 refactoring: drobné úpravy UI 2026-06-27 12:55:51 +02:00
David Spáčil 2f8d5b12c2 refactoring: čištění 2026-06-27 12:34:04 +02:00
David Spáčil 5aa5beff69 refactoring: oprava tuple[Any, ...] anotace 2026-06-27 12:30:47 +02:00
David Spáčil a58487e9a6 refactoring: type annotation 2026-06-27 12:23:28 +02:00
David Spáčil 9967682373 refactoring: ve funkci evaluate sloučeny přebytečné returny 2026-06-27 09:24:56 +02:00
david-spacil c225161374 Merge pull request 'Vynulování' (#19) from feature/vynulovani into version/v0.2.0
Reviewed-on: david/kostky#19
2026-06-26 20:40:47 +02:00
david-spacil e7c8d99c96 feature/vynulovani: přidána kondolenční hláška 2026-06-26 20:37:38 +02:00
david-spacil cef9468ad0 feature/vynulovani: přidán ukazatel pčtu "striků" v podobě jednoho až dvou X vedle celkového skóre hráče 2026-06-26 20:33:33 +02:00
david-spacil 0682ad88ce feature/vynulovani: byla implementována logika pro vynulování: po třetím tahu končícím nulou dojde k vynulování celkového skóre hráče 2026-06-26 20:21:08 +02:00
david-spacil a6a256992e Merge pull request 'Přidání možnosti exit' (#18) from feature/exit into version/v0.2.0
Reviewed-on: david/kostky#18
2026-06-26 20:02:35 +02:00
david-spacil 1fcf01152d feature/exit: loučící hláška a konec 2026-06-26 20:00:30 +02:00
david-spacil 2fa0aa8a95 feature/exit: přidáno elif do evaluate() 2026-06-26 19:59:05 +02:00
david-spacil 73e8747b73 feature/exit: přidána možnost do herní nabídky 2026-06-26 19:47:20 +02:00
david-spacil 14f1ebbd29 Merge pull request 'Odstraněno volání funkce clear() při renderování chybových hlášek souvisejících s hodem (je vidět hodnoty na kostkách)' (#16) from fix/chybove-hlasky into version/v0.2.0
Reviewed-on: david/kostky#16
2026-06-26 19:45:13 +02:00
david-spacil 7e3639ab12 fix/chybove-hlasky: odstraněno volání funkce clear() při renderování chybových hlášek souvisejících s hodem (je vidět hodnoty na kostkách) 2026-06-26 19:43:06 +02:00
david-spacil c1c1c5ebfb Merge pull request 'release: v0.1.0' (#14) from version/v0.1.0 into main
Reviewed-on: david/kostky#14
2026-06-25 14:08:56 +02:00
david-spacil ed309a10b4 Aktualizovat README.md 2026-06-25 14:02:11 +02:00
david-spacil 58854806c2 Merge pull request 'refactor: převod rekurze na smyčky v game() a add_players()' (#12) from fix/loop into version/v0.1.0
Reviewed-on: david/kostky#12
2026-06-25 13:49:10 +02:00
david-spacil 7f9e3e9ef7 fix/loop: drobné opravy 2026-06-25 13:46:38 +02:00
david-spacil 5f5d3319ed fix/loop: zadávání cílového skóre jako while loop s try-except blokem 2026-06-25 13:38:06 +02:00
david-spacil 663cc79a35 fix/loop: změna z rekurzivní funkce add_players() na while loop 2026-06-25 13:36:33 +02:00
david-spacil 4da38654aa fix/loop: změna z rekurzivní funkce na while loop v game() 2026-06-25 13:15:18 +02:00
david-spacil 16578d3a19 Merge pull request 'feature: konec hry – cílové skóre a vyhlášení vítěze' (#10) from feature/konec-hry into version/v0.1.0
Reviewed-on: david/kostky#10
2026-06-24 23:57:32 +02:00
david-spacil e550f7d50a fix: opraveno iterování vítěze v check_win 2026-06-24 23:53:07 +02:00
david-spacil 4ec5a15e32 feature/konec-hry: vyhodnocení vítěze včetně případu stejného počtu bodů 2026-06-24 23:34:00 +02:00
david-spacil e1450a1d30 feature/konec-hry: nastavení vítězného skóre 2026-06-24 10:14:46 +02:00
david-spacil cedf453861 Merge pull request 'feature: multiplayer – registrace hráčů, střídání tahů a agregace skóre' (#9) from feature/hraci into version/v0.1.0
Reviewed-on: david/kostky#9
2026-06-23 22:43:03 +02:00
david-spacil 1cd796d3d9 refactor: čištění 2026-06-23 22:35:37 +02:00
david-spacil 973a08ebd5 feature/hraci: ošetření prázdného vstupu 2026-06-23 22:28:00 +02:00
david-spacil 0e134eb4a8 feature/hraci: přidán ukazatel aktivního hráče s aktuálním skóre přes agregační proměnnou 2026-06-23 22:15:31 +02:00
david-spacil cf21f7fbdd feature/hraci: zákaz nového hodu více než jednou v řadě (včetně hodu následujícího po prvním hodu tahu) 2026-06-23 22:04:44 +02:00
david-spacil 83f4a222ad feature/hraci: hod s nulovou hodnotou zapíše 0 bodů a přepne na dalšího hráče 2026-06-23 21:49:40 +02:00
david-spacil 61dc5056ff feature/hraci: ošetření edge-case: hot dice 2026-06-23 21:38:17 +02:00
david-spacil 9added3200 feature/hraci: vyhodnocení konce "tahu"; přepnutí na dalšího hráče v řadě 2026-06-23 21:31:15 +02:00
david-spacil 7e412f4d9e feature/hraci: pomocná funkce next_player 2026-06-23 21:17:35 +02:00
david-spacil 6ad58046a6 feature/hraci: další hod v rámci "tahu" 2026-06-23 21:08:47 +02:00
david-spacil 5b282416de feature/hraci: základní logika pro přidání hráčů 2026-06-23 20:56:51 +02:00
david-spacil db76e388fe fix: bust se vyhodnocuje jen na čerstvém hodu (data[2]) 2026-06-23 20:40:30 +02:00
david-spacil af4e7bc1c5 Merge pull request 'feature: bodování hodů a interaktivní herní smyčka' (#7) from feature/vyber-kostek into version/v0.1.0
Reviewed-on: david/kostky#7
2026-06-23 20:32:57 +02:00
david-spacil 1849c1c05b hotfix: check_value(th) == False na not check_value(th) 2026-06-22 18:46:13 +02:00
david-spacil eb5603bca3 fix: oprava předávání dat do funkce evaluate z chybových hlášek 2026-06-21 17:13:23 +02:00
david-spacil f91f7c874a feature/hod: vyhodnocování hodu 2026-06-21 17:09:25 +02:00
david-spacil 1997f96232 refactor: definice typů u funkcí 2026-06-21 16:37:52 +02:00
david-spacil b7ec4eb17f feature/hod: nahrazení throw listu stringem 2026-06-21 16:31:23 +02:00
david-spacil e4fc41a656 feature/hod: oprava check_value 2026-06-21 16:08:04 +02:00
david-spacil d854190480 feature/hod: úvodní kontrola kombinace v hodu 2026-06-21 15:52:03 +02:00
david-spacil ac6d8d9182 feature/hod: import csv s hodnotami 2026-06-21 15:02:45 +02:00
david-spacil d796c6012b feature/hod: csv s hodnotami 2026-06-19 20:40:31 +02:00
david-spacil 6952c7c964 feature/hod: základy logiky pro vyhodnocování hodnoty kostek: načtení hodnot odložených 2026-06-19 20:20:19 +02:00
david-spacil a668a4d7b3 feature/hod: implementován error pro číslo kostky mimo platný rozsah (zbývající počet kostek + n) 2026-06-19 19:52:24 +02:00
david-spacil c1e94faf98 feature: funkce game nyní dostává jako argument tuple: na prvním místě je vždy typ předávaných dat (zatím "count"/"msg")
funkce evaluate kontroluje maximální možný počet hozených kostek
2026-06-19 17:05:19 +02:00
david-spacil 16d940253d feature: výběr kostek: odečítání vybraných kostek z nového hodu 2026-06-18 20:51:07 +02:00
8 changed files with 521 additions and 41 deletions

No files matched your search

+4 -1
View File
@@ -1,2 +1,5 @@
__pycache__/
*.pyc
*.pyc
dist/
build/
*.egg-info/
+98
View File
@@ -1,2 +1,100 @@
# kostky
Textová (CLI) hra v kostky pro více hráčů – varianta klasického *Farkle*
(„tisícovky“). Běží celá v terminálu, v Pythonu, s jedinou závislostí
(`tabulate` pro závěrečnou výsledkovou tabulku).
## Požadavky
- Python 3.9+
- Závislost `tabulate` (doinstaluje se automaticky při instalaci)
## Instalace a spuštění
```bash
git clone https://gitea.spacilovi.eu/david/kostky.git
cd kostky
pip install .
kostky
```
Případně bez instalace (s nainstalovaným `tabulate`) přes `python -m kostky`,
nebo izolovaně jako CLI nástroj přes `pipx install .`.
> Pro vývoj: `pip install -e ".[dev]"` – editovatelná instalace včetně `mypy`
> a `ruff`.
## Jak se hraje
### Začátek hry
1. Zadej jméno prvního hráče (povinné, nesmí být prázdné).
2. Přidávej další hráče; zadáním `x` zadávání ukončíš. Jména musí být unikátní.
3. Zadej cílové skóre, nebo nech pole prázdné pro výchozích **10 000**.
### Průběh tahu
Na začátku tahu uvidíš, kdo je na tahu (s jeho skóre a cílem), a hod šesti
kostkami s písmennými pozicemi:
```
Na tahu je Anna (0/10000).
1, 5, 3, 2, 6, 4
^ ^ ^ ^ ^ ^
a b c d e f
```
Pak zvolíš jednu z akcí:
| Vstup | Akce |
| --- | --- |
| `pozice kostek` | Odložíš vybrané kostky k vyhodnocení – písmeny (např. `a`, `cd`, `abcdef`). Hodnoty na zvolených pozicích musí dohromady tvořit některou kombinaci z bodovací tabulky. |
| `h` | Hodíš znovu zbývajícími kostkami. Povoleno až poté, co v tomto tahu odložíš aspoň jednu bodující kombinaci. |
| `k` | Ukončíš tah, připíšeš si nasbírané skóre a předáš tah dalšímu hráči. |
| `exit` | Předčasně ukončíš celou hru. |
Odkládat můžeš i víc kombinací po sobě – po každém vyhodnocení pokračuješ se
zbývajícími kostkami a body se v rámci tahu sčítají.
### Smůla, hot dice, vynulování a výhra
- **Smůla (bust):** když čerstvý hod neobsahuje žádnou bodující kombinaci,
o body z tohoto tahu přijdeš a tah přechází na dalšího hráče.
- **Hot dice:** když se ti podaří odložit všech šest kostek, dostaneš čerstvý
hod šesti kostkami a pokračuješ ve stejném tahu.
- **Vynulování:** tři po sobě jdoucí nulové tahy vynulují tvé celkové skóre.
Počet aktuálních nul se vedle skóre ukazuje jako `x` / `xx`.
- **Výhra:** po dokončení každého kola vyhrává osamocený lídr nad cílovým
skóre; při shodě na první příčce se hraje dál. Na konci se vypíše výsledková
tabulka s pořadím všech hráčů.
## Bodování
Kompletní tabulka je v souboru [`kostky/hodnoty.csv`](kostky/hodnoty.csv).
Kombinace se vyhodnocuje podle hodnot odložených kostek – na jejich pořadí
nezáleží.
### Stejné kostky
| Kostka | ×1 | ×2 | ×3 | ×4 | ×5 | ×6 |
| --- | --- | --- | --- | --- | --- | --- |
| **1** | 100 | 200 | 1000 | 2000 | 4000 | 8000 |
| **2** | – | – | 200 | 400 | 800 | 1600 |
| **3** | – | – | 300 | 600 | 1200 | 2400 |
| **4** | – | – | 400 | 800 | 1600 | 3200 |
| **5** | 50 | 100 | 500 | 1000 | 2000 | 4000 |
| **6** | – | – | 600 | 1200 | 2400 | 4800 |
(„–“ = daná kombinace samostatně neboduje.)
### Postupky
| Kombinace | Body |
| --- | --- |
| 1-2-3-4-5 | 750 |
| 2-3-4-5-6 | 1000 |
| 1-2-3-4-5-6 | 1500 |
## Licence
Projekt je licencovaný pod [GPL-3.0](LICENSE).
View File
Whitespace-only changes.
+4
View File
@@ -0,0 +1,4 @@
from kostky.kostky import main
if __name__ == "__main__":
main()
+29
View File
@@ -0,0 +1,29 @@
111111,8000
666666,4800
11111,4000
555555,4000
444444,3200
66666,2400
333333,2400
1111,2000
55555,2000
44444,1600
222222,1600
123456,1500
6666,1200
33333,1200
111,1000
5555,1000
23456,1000
4444,800
22222,800
12345,750
666,600
3333,600
555,500
444,400
2222,400
333,300
222,200
1,100
5,50
1 111111 8000
2 666666 4800
3 11111 4000
4 555555 4000
5 444444 3200
6 66666 2400
7 333333 2400
8 1111 2000
9 55555 2000
10 44444 1600
11 222222 1600
12 123456 1500
13 6666 1200
14 33333 1200
15 111 1000
16 5555 1000
17 23456 1000
18 4444 800
19 22222 800
20 12345 750
21 666 600
22 3333 600
23 555 500
24 444 400
25 2222 400
26 333 300
27 222 200
28 1 100
29 5 50
+336
View File
@@ -0,0 +1,336 @@
import csv
import re
from collections import Counter
from importlib.resources import files
from os import name, system
from random import randint
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
csv_text = files(__package__).joinpath("hodnoty.csv").read_text(encoding="utf-8")
csv_reader = csv.reader(csv_text.splitlines())
for row in csv_reader:
key = str(row[0])
value = int(row[1])
hodnoty[key] = value
def throw(count: int) -> str:
count = int(count)
new_throw: list[str] = []
for _dice in range(count):
new_throw.append(str(randint(1, 6)))
new_throw_str: str = "".join(new_throw)
return new_throw_str
def show_throw(throw: str) -> str:
throw_temp: list[str] = []
for x in throw:
throw_temp.append(x)
pretty_list: str = ", ".join(throw_temp)
pretty_list += "\n"
for _i in range(1, len(throw_temp) + 1):
pretty_list += "^ "
pretty_list += "\n"
for i in range(len(throw_temp)):
pretty_list += f"{chr(97+i)} "
return pretty_list
def clear() -> None:
_ = system('cls') if name == 'nt' else system('clear')
def evaluate(inp: Any, count: int, throw: str) -> tuple[Any, ...]:
global h_bool
def eval_score(pick: str) -> bool:
if(pick in hodnoty):
global score
score += hodnoty[pick]
return True
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)
inp_temp: str = ""
if re.search(r"^[a-f]+$", inp):
if len(inp) > count:
data: tuple[Any, ...] = (
"msg",
"ER01",
"Tolika kostkami nemůžete hodit. Zkuste to znovu: ",
count,
throw
)
else:
for x in inp:
x = ord(x)-96
if x > count:
ran = "1" if count == 1 else f"1–{count}"
data = (
"msg",
"ER02",
f"Zvolte prosím kostky v platném rozsahu ({ran}): ",
count,
throw
)
return data
else:
inp_temp += str(x)
inp = inp_temp
old_throw: list[str] = []
pick: list[str] = []
for y in range(count):
if str(y+1) not in inp:
old_throw.append(throw[y])
if str(y+1) in inp:
pick.append(throw[y])
old_throw_str: str = "".join(old_throw)
pick.sort()
pick_str: str = "".join(pick)
new_count: int = len(old_throw_str)
if not eval_score(pick_str):
new_count = count
old_throw_str = throw
else:
h_bool = False
data = ("count", new_count, old_throw_str)
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, "")
elif inp == "k":
global score
if score == 0:
last_two = players[pointer][-2:]
if len(last_two) > 1:
last_two_sum = sum(last_two)
if last_two_sum == 0:
score = -sum(players[pointer])
clear()
input("Po třech nulových hodech bylo vaše skóre vynulováno.")
players[pointer].append(score)
aggr[pointer] = sum(players[pointer])
score = 0
h_bool = True
next_player()
data = ("count", 6, "")
if pointer == first:
winner: str = check_win()
if winner:
data = ("win", winner, aggr[winner])
elif inp == "exit":
data = ("exit",)
else:
data = ("msg", "ER03", "Zadejte prosím platnou hodnotu:", count, throw)
return data
def check_value(throw: str) -> bool:
throw_s: list[str] = sorted(throw)
throw_str: str = "".join(throw_s)
hodnota: bool = False
for h in hodnoty:
if h in throw_str:
hodnota = True
break
return hodnota
def add_players() -> None:
global pointer, first, final_score
while True:
inp: str = input("Zadejte jméno prvního hráče: ")
if inp == "":
print("Jméno nemůže být prázdné.")
else:
players[inp] = []
aggr[inp] = 0
pointer = inp
first = inp
print(f"Do seznamu přidáno jméno {inp}.")
break
while True:
inp = input("Zadejte jméno dalšího hráče nebo [x] pro ukončení zadávání hráčů: ")
if inp == "":
print("Jméno nemůže být prázdné.")
elif inp == "x":
break
elif 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}.")
while True:
inp = input("Zadejte finální skóre (nechte prázdné pro výchozích 10 000): ")
if inp != "":
try:
inp_int: int = int(inp)
final_score = inp_int
except ValueError:
print("Zadejte prosím platnou číselnou hodnotu.")
else:
break
else:
break
def to_sorted_tuple(d: dict[str, int], s: bool = True) -> tuple[list[tuple[int, str, int]],
dict[str, int]]:
L: list[tuple[int, str, int]] = []
if s:
d = dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
for i, (k, v) in enumerate(d.items()):
L.append((i+1, k, v))
return L, d
def check_win() -> str:
over_limit: dict[str, int] = {}
for p in aggr:
if aggr[p] >= final_score:
over_limit[p] = aggr[p]
winner: str = ""
if over_limit:
L, d = to_sorted_tuple(over_limit)
count: Counter = Counter(list(d.values()))
for c in count:
if count[c] == 1:
winner = L[0][1]
break
return winner
def win(winner: str, score: int) -> None:
results, d = to_sorted_tuple(aggr)
headers = ["Pořadí", "Hráč", "Skóre"]
table = tabulate(results, headers=headers, tablefmt="fancy_grid")
print(f"Vítězem se stává {winner} s {score} body!")
print("Díky za hru a zase příště.\n")
print(table)
def game(data: tuple) -> None:
while True:
if data[0] == "count":
count: int = data[1]
th: str = data[2]
if(th == ""):
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:
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
score = 0
input("Oh no... anyway.")
data = evaluate("k", count, th)
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)
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]
clear()
win(winner, score)
break
elif data[0] == "exit":
clear()
print("Hra byla předčasně ukončena. Snad se zase brzy uvidíme.")
break
def main() -> None:
clear()
print("Vítejte ve hře v kostky!")
add_players()
data = ("count", 6, "")
game(data)
if __name__ == "__main__":
main()
-40
View File
@@ -1,40 +0,0 @@
from random import randint
from os import system, name
def throw(count):
count = int(count)
new_throw = []
for dice in range(count):
new_throw.append(str(randint(1, 6)))
return new_throw
def show_throw(throw):
pretty_list = ", ".join(throw)
pretty_list += "\n"
for i in range(1, len(throw) + 1):
pretty_list += "^ "
pretty_list += "\n"
for i in range(1, len(throw) + 1):
pretty_list += f"{i} "
return pretty_list
def clear():
if name == 'nt':
_ = system('cls')
else:
_ = system('clear')
def game():
new_throw = throw(6)
clear()
print(show_throw(new_throw))
input("Prosím, stiskněte enter pro další hod:")
game()
def main():
print("Vítejte ve hře v kostky!")
input("Prosím, stiskněte enter pro první hod:")
game()
if __name__ == "__main__":
main()
+50
View File
@@ -0,0 +1,50 @@
[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"
[project]
name = "kostky"
dynamic = ["version"]
description = "Textová hra v kostky."
readme = "README.md"
requires-python = ">=3.9"
license = "GPL-3.0-or-later"
license-files = ["LICENSE"]
authors = [{ name = "David Spáčil" }]
keywords = ["hra", "kostky", "cli"]
classifiers = [
"Programming Language :: Python :: 3",
"Environment :: Console",
"Operating System :: OS Independent",
"Topic :: Games/Entertainment",
]
dependencies = [
"tabulate",
]
[project.optional-dependencies]
dev = ["mypy", "ruff", "types-tabulate"]
[project.urls]
Repository = "https://gitea.spacilovi.eu/david/kostky"
[project.scripts]
kostky = "kostky.kostky:main"
[tool.hatch.version]
source = "vcs"
[tool.hatch.build.targets.wheel]
packages = ["kostky"]
[tool.mypy]
python_version = "3.9"
strict = true
files = ["kostky"]
[tool.ruff]
target-version = "py39"
line-length = 100
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]