====== Implementační test 23.1.2025 ======
Napište program, který bude simulovat hru Black Jack (Oko bere, Jednadvacet) podle následujících pravidel:
* hraje se s balíčky pokerových karet, které obsahují 52 listů rozdělených do čtyř barev, s hodnotami 2, 3, 4, 5, 6, 7, 8, 9, 10, J (spodek, kluk), Q (královna), K (král), A (eso)
* karty od 2 do 10 mají při počítání stejnou hodnotu, jaká je uvedena na kartě, karty J, Q, K (spodek, královna a král) mají hodnotu 10, eso (A) má hodnotu 11, barvy karet nemají žádný význam
* hry se může účastnit více hráčů (teoreticky neomezeně)
* hráči jsou identifikování jménem, které je načteno ze standardního vstupu
* program automaticky zamíchá karty z tolika balíčků, aby s kartami jednoho balíčku hrálo maximálně 5 hráčů (tj. když bude ve hře 6 hráčů, použijí se dva balíčky - 104 karet)
* cílem hry je mít v ruce karty hodnoty maximálně 21, vyšší hodnota hráče vyřadí ze hry (trop), vyhrává ten, kdo má 21 nebo nejblíže menší hodnotu, na co nejméně karet.
===== Implementace =====
Následující body nejsou povinné, spíš doporučené.
1. Jednotlivé karty budou reprezentovány strukturou, která bude obsahovat název karty (2 - 9, J, Q, K, A), barvu (srdce, kára, kříže, piky) a její hodnotu.
typedef struct
{
// vase implementace
} karta_t;
2. Karty jsou umístěny ve vhodné struktuře, která umožňuje destruktivní náhodný výběr karty z množiny. Jako jedno z možných řešení se nabízí kruhová fronta nebo použití dvou zásobníků: na začátku hry se vloží potřebný počet karet do prvního zásobníku, náhodný počet karet se z prvního zásobníku vyjme a vloží do druhého. Kartu, která je na vrcholu některého ze zásobníků se odebere a dostává ji hráč, který je na tahu.
Generátor náhodných čísel:
#include
#include
srand(time(NULL)); // inicializace, staci zavolat jednou
int r = rand(); // vrati pseudo-nahodne cislo typu integer v rozsahu 0 a RAND_MAX
3. Každý hráč je reprezentován datovou strukturou, která obsahuje informaci o jeho jméně, kartách, které dostal od krupiéra a celkovém součtu ve hře.
typedef struct {
// vase implementace
} hrac_t;
4. Jména hráčů jsou programu jsou vložena na začátku hry, např. všechna najednou, oddělena mezerou
===== Příklad hry =====
$ game.exe
> zadej hrace: Petr, Pavel, Jan
> ve hre jsou Petr, Pavel a Jan
> Petr ? [a/n/s] a
< Piky 2
> Petr 2 Pavel 0 Jan 0
> Pavel ? [a/n/s] a
< Kara A
> Petr 2 Pavel 11 Jan 0
> Jan ? [a/n/s] n
> Petr ? [a/n/s] s
> Soucet: 2
> Piky 2
> Petr ? [a/n/s] a
< Kriz K
> Petr 12 Pavel 11 Jan 0
===== Hodnocení =====
Hodnoceny jsou dílčí části programu:
* Vytvoření hracího balíku
* Rozdávání karet
* Samotná hra