Neprihlásený používateľ |

Špecifikácia zadania


Cieľom zadania je naprogramovať zjednodušenú verziu stolovej hry Monopoly v jazyku C. Jedná sa o ťahovú zábavnú hru, v ktorej sa obchoduje s nehnuteľnosľami. V zadaní si precvičíte štruktúry, polia, pointre a spracovanie command-line (CMD) argumentov.

Monopoly

Monopoly je stolová hra, ktorú hrajú 2-4 hráči. Počas hry hráči hádžu kockou, pohybujú sa po hracom pláne a obchodujú s nehnuteľnosťami. Pre jednoduchosť implementácie zavedieme zjednodušené pravidlá.

Herné prvky:

Hrací plán

Hrací plán obsahuje 24 očíslovaných polí (poradové čísla začínajú od 1). Polia sú rozdelené podľa typu na tieto kategórie:

  • Nehnuteľnosť: 16-krát
  • Špeciálne pole: 8-krát

Obrázok 1: Hrací plán hry Monopoly (veľký obrázok)


Nehnuteľnosti

Nehnuteľnost (z angl. property) predstavuje pole na hracom pláne, ktoré hráči kupujú alebo zaň platia nájomné vlastníkovi. Ak hráč stúpi na nikým nevlastnenú nehnuteľnosť, musí ju kúpiť. Ak hráč stúpi na nehnuteľnosť vlastnenú protihráčom, musí mu zaplatiť nájomné.


Obrázok 2: Polia s nehnuteľnosťami (dvojice nehnuteľností rovnakej farby)


Každá nehnuteľnosť má nasledovné atribúty:

  • Názov
  • Cena/nájomné
  • Farba

Na hracom pláne je dokopy 16 rôznych nehnuteľností (8 dvojíc rôznej farby). Ak hráč vlastní obidve nehnuteľnosti rovnakej farby, hovoríme, že vlastní monopol. Viac o monopole sa dozviete nižšie. Cena nehnuteľnosti vyjadrená v EUR zároveň predstavuje výšku nájomného, ktorú platia hráči vlastníkovi po stúpení na pole.


Obrázok 3: Detail poľa s nehnuteľnostou (vidíme 3 atribúty: farba, názov a cena/nájomné)


Špeciálne polia

Okrem nehnuteľností obsahuje hrací plán 8 špeciálnych polí. Špeciálne pole sa nedá kúpiť. Ak hráč stúpi na špeciálne pole, vykoná príslušnú akciu. Existujú nasledovné typy špeciálnych polí.

  • Štart
  • In jail ("vo väzení")
  • Go to jail ("choď do väzenia")
  • 4x Priepustka z väzenia (z angl. "jail pass")
  • Free parking

Štart

Na tomto poli hráči začínajú hru. Vždy, keď hráč počas hry prekročí alebo stúpi na toto pole, dostane odmenu 2 EUR. Pole Štart má poradové číslo 1.


Obrázok 4: Pole Štart (poradové číslo 1)

In jail

Toto pole predstavuje väzenie. Po stúpení na toto pole sa nič nedeje. Na tomto poli sú umiestnení hráči, ktorí stúpili na pole Go to jail. Vo väzení môže byť súčasne viacero hráčov. Pole In jail má poradové číslo 7. Viac informácií sa dočítate ďalej.


Obrázok 5: Pole In jail (poradové číslo 7)

Go to jail

Ak hráč stúpi na toto pole, okamžite ide do väzenia, t.j. vráti sa na pole In jail. Presun do väzenia neznamená prejdenie kola (jedná sa o vrátenie sa na pole In jail v rámci toho istého kola). Pole Go to jail má poradové číslo 19. Viac informácií sa dočítate ďalej.


Obrázok 6: Pole Go to jail (poradové číslo 19)

Priepustka

Priepustka zabráni tomu, aby hráč išiel do väzenia, keď stúpi na pole Go to jail. Hráč môže vlastniť neobmedzený počet priepustiek. Na hracom pláne sú umiestnené 4 priepustky na poliach s číslami 4, 10, 16 a 22. Viac informácií sa dočítate ďalej.


Obrázok 7: Polia s priepustkami (poradové čísla 4, 10, 16 a 22)

Free parking

Pole bez významu. Po stúpení na toto pole sa nič nedeje. Toto pole má poradové číslo 13.


Obrázok 8: Pole Free parking (poradové číslo 13)
Hráči

Hru môžu hrať 2-4 hráči. Hráči sa svojimi figúrkami pohybujú po hracom pláne v smere hodinových ručičiek. Pohyb figúrkou je určený číslom, ktoré padne na kocke.

Atribúty hráča:

  • číslo hráča (1, 2, 3 alebo 4)
  • číslo poľa, na ktorom stojí hráčova figúrka (1-24)
  • hotovosť (z angl. cash)
  • počet nazbieraných priepustiek z väzenia
  • informácia, či je hráč vo väzení
  • zoznam vlastnených nehnuteľností
Banka

Banka má nekonečne veľa peňazí. Je to fiktívna inštitúcia, ktorej hráči platia za nákup nehnuteľností. Z banky dostanú hráči na začiatku hry štartovaciu hotovosť. Banke sa platí pokuta pred opustením väzenia. Banka vypláca odmenu za prejdenie kola.

Kocka

Každý hráč vo svojom ťahu hádže 1 kockou. Kocka určí počet miest na hracom pláne, o ktoré sa hráč pohne dopredu. Čísla hodené na kocke sa načítavajú z klávesnice, pokiaľ nie je zadaná nenumerická hodnota. Číslo na kocke je z intervalu $\langle1,6\rangle$.

Priebeh hry

Hlavné fázy hry:

  1. Inicializácia
  2. Výpis stavu na začiatku hry
  3. Hra (hráči sa striedajú na ťahu)
  4. Určenie víťaza hry
  5. Výpis stavu na začiatku hry

Inicializácia

Vykonajú sa 3 kroky:

  • Určí sa počet hráčov, ktorí budú hrať.
  • Rozdá sa úvodná hotovosť.
  • Hráči umiestnia svoju figúrku na pole Štart.

Rozdanie úvodnej hotovosti hráčom:

  • Ak hrajú 2 hráči, každý dostane 20 EUR.
  • Ak hrajú 3 hráči, každý dostane 18 EUR.
  • Ak hrajú 4 hráči, každý dostane 16 EUR.

Hra

Počas hry sa hráči striedajú na ťahu, posúvajú sa po hracom pláne a vykonávajú rôzne akcie. Kompletná špecifikácia ťahu so všetkými detailami je v kapitole Špecifikácia ťahu. Každý ťah má svoju pevne danú postupnosť krokov.

Ťah:

  1. Hráč hádže kockou – t.j. načíta sa číslo z klávesnice.
  2. Skontroluje sa, či hráč neopúšťa väzenie.
  3. Skontroluje sa, či hráč neprešiel kolo.
  4. Hráč stúpi na pole na hracom pláne a vykoná akciu podľa typu poľa.
  5. Ak hráč v rámci kola neskrachoval, v ťahu pokračuje ďalší hráč.

Po ťahu:

Aby bolo možné sledovať priebeh hry, po každom ťahu môže nastať výpis v stanovenom formáte (okrem ťahu, v ktorom niektorý hráč skrachuje). Výpis po ťahu aktivujú zadané prepínače v termináli. Rozlišujeme nasledovné typy výpisov.

  • výpis hracieho plánu (prepínač -s)
  • výpis hráčov (prepínač -p)
  • výpis stavu celej hry (prepínač -g)

Určenie víťaza hry

Hra končí, keď niektorý z hráčov skrachuje. Po skrachovaní niektorého z hráčov sa určí víťaz. Viac sa dozviete v kapitole Víťaz hry.

Špecifikácia ťahu

Na začiatku ťahu hodí hráč kockou. Predpokladáme, že vždy sa načíta z klávesnice platné číslo, t.j. 1-6 (iné situácie netreba ošetrovať). Ak sa načíta nenumerický vstup (niečo, čo nie je číslo), hra končí.

Predtým, ako sa hráč posunie dopredu treba:

  • Skontrolovať, či hráč nevychádza von z väzenia.
  • Skontrolovať, či hráč neprešiel kolo.
Akcia

Hráč môže stúpiť na jedno z nasledovných typov polí a podľa toho vykoná príslušnú akciu.

Nehnuteľnosť

Nehnuteľnosť môže byť:

  • Vlastnená:
    • hráčom na ťahu (nič sa vtedy nevykoná)
    • protihráčom
  • Nevlastnená

Nehnuteľnosť vlastnená protihráčom:

Hráč vtedy musí zaplatiť vlastníkovi nájomné vo výške ceny nehnuteľnosti. Ak je nehnuteľnosť monopolom (t.j. niekto vlastní obidve nehnuteľnosti danej farby), tak mu hráč musí zaplatiť 2-násobné nájomné. Ak hráč nemá peniaze na zaplatenie nájomného, tak skrachuje a hra končí.


Obrázok 9: Príklad monopolu: niektorý z hráčov vlastní obidve nehnuteľnosti zelenej farby.
Ak niekto stúpi na monopol (THE ZOO alebo AQUARIUM),
musí zaplatiť 2-násobné nájomné, t.j. 8 EUR.


Nikým nevlastnená nehnuteľnosť:

Ak nehnuteľnosť nikto nevlastní, hráč ju musí kúpiť. Cenu za nehnuteľnosť hráč zaplatí banke. Ak hráč nemá peniaze na kúpu nehnuteľnosti, tak skrachuje a hra končí.

Štart

Ak hráč stúpi na Štart, dostane odmenu 2 EUR za prejdenie kola. Odmenu dostane, aj keď dopadne za pole Štart.

Free parking

Po stúpení na toto pole sa nič nevykoná.

In jail

Toto pole predstavuje väzenie. Po stúpení na toto pole sa nič nedeje. Na tomto poli sú umiestnení hráči, ktorí stúpili na pole Go to jail. Vo väzení môže byť naraz viac hráčov. Ak hráč vychádza von z väzenia, musí zaplatiť banke pokutu 1 EUR. Ak hráč nemá peniaze na zaplatenie pokuty, zostáva vo väzení, skrachuje a hra končí.

Go to jail

Ak hráč stúpi na toto pole, môžu nastať 2 situácie:

  • Hráč má aspoň 1 priepustku: ak hráč má priepustku, tak ju musí použiť a tým pádom do väzenia nejde. Vzápätí sa mu počet nazbieraných priepustiek zníži o 1. Po použití priepustky hráč zostáva stáť na poli Go to jail a v ďalšom kole normálne pokračuje v hre.
  • Hráč nemá priepustku: v tomto prípade ide hráč okamžite do väzenia, t.j. vráti sa na pole In jail (pozor neprejde vtedy kolo, iba sa vráti na pole s väzením). Na začiatku jeho ďalšieho ťahu musí zaplatiť banke pokutu 1 EUR, aby mohol vyjsť von z väzenia. Počas pobytu vo väzení môže hráč vyberať nájomné od ostatných hráčov.

Priepustka

Po stúpení na toto pole sa hráčovi zvýši počet priepustiek o 1. Hráč môže počas hry nazbierať neobmedzený počet priepustiek.

Víťaz hry

Vyhráva ten hráč, ktorý má najviac peňazí (t.j. má najvyššiu hotovosť) po tom, ako niektorý z hráčov skrachuje.

  1. Čo treba spraviť, keď sa nedá na základe výšky hotovosti určiť víťaz?

    Ak majú viacerí zostávajúci hráči rovnakú najvyššiu hotovosť, nie je možné jednoznačne identifikovať víťaza. Ak nastane takáto situácia, tak si každý z nich spočíta ceny vlastnených nehnuteľností a pripočíta si túto hodnotu k celkovej hotovosti. Následne sa víťazom stane najbohatší hráč.

  2. Čo ak sa aj napriek tomu nedá určiť víťaz?

    Ak by nastala aj napriek tomu zhoda vo výške financíí hráčov, hra končí remízou - nemá určeného víťaza.

Kedy hráč skrachuje?

  • V prípade, že nemá peniaze na zaplatenie pokuty 1 EUR pred opustením väzenia.
  • V prípade, že nemá peniaze na zaplatenie nájomného vlastníkovi nehnuteľnosti.
  • V prípade, že nemá peniaze na kúpu nehnuteľnosti.

Výpis programu

Počas behu programu bude dochádzať k rôznym výpisom, ktoré budú informovať o priebehu hry. Výpisy budeme rozdeľovať na 2 kategórie:

  • výpisy, ktoré sa uskutočnia vždy
  • výpisy aktivované prepínačmi
Výpisy, ktoré sa uskutočnia vždy

Vždy sa vypíše

  • Stav hry na začiatku (pred vykonaním prvého ťahu).
  • Stav hry na konci (po skrachovaní niektorého hráča a určení víťaza).
  • V každom ťahu:
    • hodené číslo na kocke
    • číslo ťahu (začína od 1)
    • označenie hráča, ktorý je na ťahu

Obrázok 10: Štruktúra výpisu, ktorý sa uskutoční vždy (bez ohľadu na zadané prepínače). Príklad ukazuje situáciu 4 ťahov, kde sa striedajú 2 hráči. Medzi jednotlivými blokmi výpisu musí byť 1 prázdny riadok.



Obrázok 11: Akceptovaný formát riadkov s výpisom hodeného čísla na kocke, čísla ťahu a označenia hráča, ktorý je na ťahu.


Výpisy aktivované prepínačmi

Po každom ťahu sa vypíše:

  • hrací plán, ak bol zadaný prepínač -s
  • informácie o hráčoch, ak bol zadaný prepínač -p
  • stav hry, ak bol zadaný prepínač -g

Jedinou výnimkou je ťah, v ktorom hráč skrachuje - vtedy sa po skončení ťahu nič nevypíše a namiesto toho sa vypíše koncový stav hry.


Obrázok 12: Štruktúra výpisu programu s potenciálnymi výpismi po ťahu, pokiaľ boli aktivované príslušnými prepínačmi. Príklad ukazuje situáciu 3 ťahov, kde sa striedajú 2 hráči. Zelené bloky predstavujú výpisy, ktoré sa uskutočnia, len v prípade, že bol zadaný príslušný prepínač a hráč neskrachoval.


CMD argumenty

Program môžeme spustiť s týmito prepínačmi:

  • -n num_players
  • -s
  • -p
  • -g

Prepínače -s/-p/-g sa nebudú kombinovať. Vždy sa použije len jeden z nich. Situáciu kombinovania prepínačov netreba ošetrovať.

Prepínač -n

Tento prepínač určuje počet hráčov. Platný počet hráčov je 2-4. Iné situácie netreba ošetrovať. Na prevod reťazca param na číselnú hodnotu odporúčame použiť funkciu sscanf. Ak používateľ nezadá prepínač -n, hra začne s 2 hráčmi. Situáciu zadania prepínača -n bez jeho povinného parametra netreba ošetrovať.

./z4 -n param
Prepínač -s

Tento prepínač aktivuje výpis hracieho plánu po skončení ťahu hráča. Ak hráč v danom ťahu skrachuje, výpis sa neuskutoční.

./z4 -s

Obrázok 13: Štruktúra výpisu v prípade zadania prepínača -s. Výpis sa bude opakovať po každom ťahu.


Každý z riadkov tohto výpisu spadá do jednej z týchto kategórií:

  • výpis špeciálneho poľa
  • výpis nevlastnenej nehnuteľnosti
  • výpis vlastnenej nehnuteľnosti

Obrázok 14: Akceptovaný formát výpisu riadkov hracieho plánu v závislosti od toho, aký typ poľa vypisujeme (veľký obrázok).


Prepínač -p

Tento prepínač aktivuje výpis informácií o hráčoch po skončení ťahu hráča. Ak hráč v danom ťahu skrachuje, výpis sa neuskutoční.

./z4 -p

Obrázok 15: Štruktúra výpisu v prípade zadania prepínača -p. Príklad ukazuje situáciu 2 hráčov. Výpis sa bude opakovať po každom ťahu.


Výpis každého hráča sa skladá z 2 častí:

  • výpis atribútov hráča
  • výpis zoznamu vlastnených nehnuteľností

Dôležitá poznámka: vlastnené nehnuteľnosti hráča sa musia vypísať v takom poradí, v akom boli nakúpené.


Obrázok 16: Akceptovaný formát výpisu riadkov o hráčovi (veľký obrázok).


Prepínač -g

Tento prepínač aktivuje výpis stavu hry po skončení ťahu hráča. Ak hráč v danom ťahu skrachuje, výpis sa neuskutoční.

./z4 -g

Obrázok 17: Štruktúra výpisu v prípade zadania prepínača -g. Výpis sa bude opakovať po každom ťahu.


Výpis stavu hry sa skladá z 3 častí:

  • výpis hráčov (rovnaký výpis ako v prípade prepínača -p)
  • výpis hracieho plánu (rovnaký výpis ako v prípade prepínača -s)
  • výpis víťaza

Obrázok 18: Akceptovaný formát výpisu riadku s víťazom (veľký obrázok).


Spustenie programu bez prepínačov

V tomto prípade sa uskutoční len výpis, ktorý je popísaný v časti Výpisy, ktoré sa uskutočnia vždy.

Diagram aplikácie

Na tomto diagrame je znázornený herný algoritmus od spustenia programu až po jeho ukončenie.


Obrázok 19: Herný algoritmus (veľký obrázok).


Projekt

V rámci tohto zadania budete pracovať na projekte, ktorý sa skladá z viacerých súborov. Štruktúra projektu je znázornená na obrázku nižšie.


Obrázok 20: Štruktúra projektu


monopoly.h

Tento hlavičkový súbor obsahuje:

  • Makrá
  • Definície dátových typov (struct a enum)
  • Deklarácie premenných (extern)
#ifndef Z4_MONOPOLY_H
#define Z4_MONOPOLY_H

#include <stdio.h>

// Makra
#define MAX_NAME 100        // max. dlzka nazvu (bez znaku '\0')
#define NUM_PROPERTIES 16   // pocet nehnutelnosti na hracom plane
#define NUM_SPACES 24       // pocet poli na hracom plane
#define MAX_PLAYERS 4       // max. pocet hracov
#define NUM_SPACE_TYPES 6   // pocet typov poli na hracom plane
#define NUM_COLORS 8        // pocet farieb nehnutelnosti

// Definicie vlastnych datovych typov

// Typy poli na hracom plane
typedef enum _space_type {
    Property,       // nehnutelnost
    Start,          // startovacie pole
    Free_parking,   // specialne pole bez akcie
    In_jail,        // specialne pole, predstavuje vazenie
    Go_to_jail,     // specialne pole, ktore presunie hraca do vazenia
    Jail_pass       // specialne pole s priepustkou
} SPACE_TYPE;

// Farba nehnutelnosti
typedef enum _color {
    Brown,
    Skyblue,
    Purple,
    Orange,
    Red,
    Yellow,
    Green,
    Blue
} COLOR;

// Struktura pre nehnutelnost
typedef struct _property {
    char name[MAX_NAME + 1];    // nazov
    int price;                  // cena nehnutelnosti/vyska najomneho
    COLOR color;                // farba
} PROPERTY;

// Struktura pre pole na hracom plane
typedef struct _space {
    SPACE_TYPE type;        // typ pola na hracom plane
    PROPERTY *property;     // pointer na nehnutelnost ak je pole
                            // typu Property, inak NULL
} SPACE;

// Struktura pre hraca
typedef struct _player {
    int number;             // cislo hraca (1, 2, 3 alebo 4)
    int space_number;       // cislo pola, na ktorom stoji (pole Start ma cislo 1)
    int cash;               // hotovost hraca
    int num_jail_pass;      // pocet nazbieranych priepustiek z vazenia
    int is_in_jail;         // info, ci je hrac vo vazeni: 0 - nie je; 1 - je
    PROPERTY *owned_properties[NUM_PROPERTIES]; // zoznam kupenych nehnutelnosti
    int num_properties;                         // pocet kupenych nehnutelnosti
} PLAYER;

// Deklaracie premennych
extern const char *space_types[NUM_SPACE_TYPES];    // nazvy typov poli na hracom plane
extern const char *property_colors[NUM_COLORS];     // nazvy farieb nehnutelnosti
extern PROPERTY properties[NUM_PROPERTIES];         // zoznam vsetkych nehnutelnosti
extern SPACE game_board[NUM_SPACES];                // hraci plan s 24 poliami

#endif //Z4_MONOPOLY_H
monopoly.c

Tento zdrojový súbor obsahuje:

  • Názvy jednotlivých typov polí na hracom pláne.
  • Názvy farieb nehnuteľností
  • Databáza nehnuteľností
  • Hrací plán
#include "monopoly.h"

// nazvy typov poli na hracom plane
const char *space_types[NUM_SPACE_TYPES] = {
        "PROPERTY",
        "START",
        "FREE PARKING",
        "IN JAIL",
        "GO TO JAIL",
        "JAIL PASS"
};

// nazvy farieb nehnutelnosti
const char *property_colors[] = {
        "Brown",
        "Skyblue",
        "Purple",
        "Orange",
        "Red",
        "Yellow",
        "Green",
        "Blue"
};

// zoznam nehnutelnosti na hracom plane
PROPERTY properties[NUM_PROPERTIES] = {
        {.name = "FOOD TRUCK", .price = 1, .color = Brown},
        {.name = "PIZZA RESTAURANT", .price = 1, .color = Brown},
        {.name = "DOUGHNUT SHOP", .price = 1, .color = Skyblue},
        {.name = "ICE CREAM SHOP", .price = 1, .color = Skyblue},
        {.name = "MUSEUM", .price = 2, .color = Purple},
        {.name = "LIBRARY", .price = 2, .color = Purple},
        {.name = "THE PARK", .price = 2, .color = Orange},
        {.name = "THE BEACH", .price = 2, .color = Orange},
        {.name = "POST OFFICE", .price = 3, .color = Red},
        {.name = "TRAIN STATION", .price = 3, .color = Red},
        {.name = "COMMUNITY GARDEN", .price = 3, .color = Yellow},
        {.name = "PET RESCUE", .price = 3, .color = Yellow},
        {.name = "AQUARIUM", .price = 4, .color = Green},
        {.name = "THE ZOO", .price = 4, .color = Green},
        {.name = "WATER PARK", .price = 5, .color = Blue},
        {.name = "AMUSEMENT PARK", .price = 5, .color = Blue}
};

// inicializacia hracieho pola
SPACE game_board[NUM_SPACES] = {
        {.type = Start, .property = NULL},
        {.type = Property, .property = &properties[0]},
        {.type = Property, .property = &properties[1]},
        {.type = Jail_pass, .property = NULL},
        {.type = Property, .property =  &properties[2]},
        {.type = Property, .property =  &properties[3]},
        {.type = In_jail, .property =  NULL},
        {.type = Property, .property =  &properties[4]},
        {.type = Property, .property =  &properties[5]},
        {.type = Jail_pass, .property =  NULL},
        {.type = Property, .property =  &properties[6]},
        {.type = Property, .property =  &properties[7]},
        {.type = Free_parking, .property =  NULL},
        {.type = Property, .property =  &properties[8]},
        {.type = Property, .property =  &properties[9]},
        {.type = Jail_pass, .property =  NULL},
        {.type = Property, .property =  &properties[10]},
        {.type = Property, .property =  &properties[11]},
        {.type = Go_to_jail, .property =  NULL},
        {.type = Property, .property =  &properties[12]},
        {.type = Property, .property =  &properties[13]},
        {.type = Jail_pass, .property =  NULL},
        {.type = Property, .property =  &properties[14]},
        {.type = Property, .property =  &properties[15]}
};
z4.c

Toto je hlavný zdrojový súbor, v ktorom vypracujete zadanie. Je v ňom už správne vložený hlavičkový súbor monopoly.h (tento riadok nemeňte).

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "monopoly.h" // NEMENIT !!!

// TODO vlastne funkcie

int main(int argc, char *argv[]) {
    // TODO
    return 0;
}
CMakeLists.txt

Jedná sa o projektový súbor pre CLion. Je predkonfigurovaný tak, aby sa dal projekt skompilovať. V prípade nesprávnej verzie nástroja CMake, zmeňte číslo verzie na vyhovujúce.

cmake_minimum_required(VERSION 3.24)
project(z4 C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -lm")

add_executable(z4 src/z4.c src/monopoly.c)
target_include_directories(z4 PRIVATE ${PROJECT_SOURCE_DIR}/include)

Hodnotenie zadania

Odovzdávací systém otestuje a ohodnotí nasledovné oblasti funkcionality vášho programu. Na získanie bodov za konkrétny testovací scenár je nutné, aby testom prešli všetky testovacie prípady v danom scenári.

Testovacie scenáre
Scenár 1
Spustenie bez prepínačov -s/-p/-g, výpis stavu hry na začiatku
0,5 b
Scenár 2
Spustenie bez prepínačov -s/-p/-g, základné situácie, celý výpis
1,0 b
Scenár 3
Spustenie bez prepínačov -s/-p/-g, pokročilé situácie, celý výpis
1,0 b
Scenár 4
Prepínač -s, základné situácie, celý výpis
1,0 b
Scenár 5
Prepínač -s, pokročilé situácie, celý výpis
1,5 b
Scenár 6
Prepínač -p, základné situácie, celý výpis
1,0 b
Scenár 7
Prepínač -p, pokročilé situácie, celý výpis
1,5 b
Scenár 8
Prepínač -g, základné situácie, celý výpis
1,0 b
Scenár 9
Prepínač -g, pokročilé situácie, celý výpis
1,5 b
Súčet 10 b

Testovacie príklady

Táto sekcia obsahuje testovacie príklady pre jednotlivé scenáre. Ku každému testovaciemu príkladu sú s k dispozícii na stiahnutie TXT súbory. Každý testovací príklad predstavuje jedno spustenie programu so zadanými CMD argumentmi a sú k nemu pripojené dva TXT súbory (jeden súbor pre stdin a druhý súbor pre správny stdout).

TXT súbory pre stdin:

  • obsahujú postupnosť čísiel hodených na kocke počas hry
  • každé číslo hodené na kocke je v samostatnom riadku
  • posledný riadok súboru obsahuje nenumerickú hodnotu na jasné ukončenie postupnosti (použije sa znak .)

Obrázok 21: Štruktúra testovacieho TXT súboru, ktorý reprezentuje stdin.


Poznámka: ideálny spôsob testovania vášho programu je prostredníctvom presmerovania štandardného vstupu v termináli z príslušného TXT súboru, ktorý obsahuje vstupy (aby ste sa tak vyhli komplikáciám pri kopírovaní údajov a ich zadávaní pomocou klávesnice).

Zoznam testovacích scenárov:

Základné situácie:

  • hrať bude rôzny počet hráčov (2, 3 alebo 4)
  • može aj nemusí byť zadaný prepínač -n
  • hráči kúpia nehnuteľnosť
  • hráč môže zaplatiť nájomné (keď stúpi vlastníkovi na na nehnuteľnosť)
  • hráč môže prejsť viac ako 1 kolo (prekročí Štart)
  • hra bude mať víťaza (len na základe výšky hotovosti)

Pokročilé situácie:

  • hráč môže stúpiť na pole Priepustka
  • hráč môže stúpiť na pole Go to jail, keď má/nemá priepustku
  • hráč môže zaplatiť nájomné za monopol (2-násobok bežného nájomného)
  • hra môže mať víťaza, ktorý bude určený až po sčítaní hotovosti + majetku
  • hra môže skončiť remízou
Scenár 1 Spustenie bez prepínačov -s/-p/-g, výpis stavu hry na začiatku

s01

Scenár 2 Spustenie bez prepínačov -s/-p/-g, základné situácie, celý výpis

s02

Scenár 3 Spustenie bez prepínačov -s/-p/-g, pokročilé situácie, celý výpis

s03

Scenár 4 Prepínač -s, základné situácie, celý výpis

s04

Scenár 5 Prepínač -s, pokročilé situácie, celý výpis

s05

Scenár 6 Prepínač -p, základné situácie, celý výpis

s06

Scenár 7 Prepínač -p, pokročilé situácie, celý výpis

s07

Scenár 8 Prepínač -g, základné situácie, celý výpis

s08

Scenár 9 Prepínač -g, pokročilé situácie, celý výpis

s09

Zdroje

Nasledujúce zdroje vám môžu pomôcť pri programovaní zadania. Odporúčame si tieto zdroje preštudovať. Na prístup k niektorým zdrojom potrebujete byť prihlásení vo vašom Google STU konte.

Prednášky

Jazyk C

Funkcie printf a scanf

Zdroje obrázkov

Copyright © 2024, Pavol Marák, ÚIM FEI STU.
Vyrobené pomocou Django a Spectre.css.
Regulárne výrazy testujeme pomocou Regular Expression 101.
Videá prehrávame pomocou Plyr prehrávača.