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 <time.h>
#include <stdlib.h>
 
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
courses/b0b99prpa/implementace.txt · Last modified: 2025/01/23 08:49 by viteks