====== 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