9. týždeň

Problem Set 4: Ball Sort Puzzle & Connect Four

Ciele

  1. Vytvoriť vlastné funkcie podľa špecifikácie.
  2. Rutinne pracovať s dvojrozmerným poľom a reťazcami.
  3. Používať pole ako parameter (vstupný a výstupný) vo funkciách.
  4. Používať generátor náhodných čísel.

Ball Sort Puzzle

Asi každý z vás už hral alebo počul o hre s názvom Ball sort puzzle. Hra začína s guľôčkami rôznych farieb poprehadzovanými vo viacerých valcoch. Cieľom hry je, aby ich hráč postupne poukladal podľa farieb do valcov. Hráč však nesmie ukladať guľôčky na iné farby, aké sú oni samé. Ak sú všetky guľôčky poukladané, hráč vyhráva.

Hra Ball Sort Puzzle.
Obr. 1: Hra Ball Sort Puzzle.

Hra postupuje nasledovne:

  1. Hráč dostane pole, kde sú znaky rozhádzané.
  2. Postupne presúva znaky na miesta, kam sa dajú umiestniť.
  3. Ak sú všetky usporiadané, hráč vyhráva.

Farebné guľôčky by boli v našom riešení určite pekné, nám však bude stačiť terminálové rozhranie. Namiesto farieb a guľôčiek použijeme znaky.

Vašou úlohou bude naprogramovať päť funkcií:

  • void generator(const int rows, const int columns, char field[rows][columns]) - Vygenerovanie dvojrozmeného herného poľa.
  • void down_possible(const int rows, const int columns, char field[rows][columns], int x, int y) - Znak môže ísť na rovnaký znak a dostať sa na najmožnejší spodok stĺpca.
  • bool check(const int rows, const int columns, char field[rows][columns]) - Kontrola rovnakých stĺpcov.
  • void game_field(const int rows, const int columns, char field[rows][columns]) - Vykreslenie herného poľa.
  • ball_sort_puzzle() - Funkcionalita samotnej hry.

Všetkých 5 funkcií sa bude nachádzať v súbore ballsortpuzzle.c. Ich deklarácie sú uvedené v súbore ballsortpuzzle.h. Hlavný program sa nachádza v súbore main.c.

Okrem požadovaných funkcií si môžete vytvoriť aj vlastné funkcie. Tieto však budú súkromné pre Váš modul (nebudú deklarované v hlavičkovom súbore ballsortpuzzle.h).

Úloha 1: Generovanie poľa

Naprogramujte funkciu void generator(const int rows, const int columns, char field[rows][columns]) s parametrami:

  • const int rows - Počet riadkov v poli
  • const int columns - Počet stĺpcov v poli
  • char field[rows][columns] - Dvojrozmerné pole, v ktorom budú uložené znaky

Funkcia nevráti žiadnu hodnotu.

Funkcia náhodne vygeneruje dvojrozmerné pole so znakmi. Musí však dodržiavať tieto pravidlá:

  • Vždy musia existovať 2 prázdne stĺpce.
  • Každý znak sa môže vyskytovať práve toľko krát, aká je výška stĺpca. Pre nás stačí, že toto číslo je rows.
  • Znaky musia byť vygenerované náhodne, nesmú sa vyskytovať už vyplnené stĺpce.
  • Hráč (foreground) indexuje od čísla 1 a z jeho pohľadu hracie pole začína vľavo hore. Hra (background) indexuje od čísla 0 a z jej pohľadu hracie pole začína tiež vľavo hore.

Príklad 1:

         FOREGROUND                           BACKGROUND               SOME INDEXES
 1 | @ | * |   |   | + | + |    [0]: {'@', '*', ' ', ' ', '+', '+'}    [0][4]: '+'
 2 | * | + |   |   | * | + |    [1]: {'*', '+', ' ', ' ', '*', '+'}    [1][2]: ' '
 3 | @ | ^ |   |   | ^ | @ |    [2]: {'@', '^', ' ', ' ', '^', '@'}    [2][4]: '^'
 4 | ^ | ^ |   |   | @ | * |    [3]: {'^', '^', ' ', ' ', '@', '*'}    [3][5]: '*'
    --- --- --- --- --- ---
     1   2   3   4   5   6            [0]  [1]  [2]  [3]  [4]  [5]

Príklad 2:

         FOREGROUND                           BACKGROUND               SOME INDEXES
 1 | * | @ |   | * |   | ^ |    [0]: {'*', '@', ' ', '*', ' ', '^'}    [0][3]: '*'
 2 | * | @ |   | + |   | ^ |    [1]: {'*', '@', ' ', '+', ' ', '^'}    [1][3]: '+'
 3 | * | + |   | @ |   | ^ |    [2]: {'*', '+', ' ', '@', ' ', '^'}    [2][3]: '@'
 4 | ^ | @ |   | + |   | + |    [3]: {'^', '@', ' ', '+', ' ', '+'}    [3][3]: '+'
    --- --- --- --- --- ---
     1   2   3   4   5   6            [0]  [1]  [2]  [3]  [4]  [5]

Hodnotenie

Táto úloha je za max. 1 bod. Bude testovaná automatom.

Úloha 2: Presun znakov po hracom poli

Naprogramujte funkciu void down_possible(const int rows, const int columns, char field[rows][columns], int x, int y) s paramerami:

  • const int rows - Počet riadkov v poli
  • const int columns - Počet stĺpcov v poli
  • char field[rows][columns] - Pole, v ktorom sú uložené znaky
  • int x - Číslo stĺpca, z ktorého chceme znak presunúť
  • int y - Číslo stĺpca, kam chceme znak presunúť

Funkcia nevráti žiadnu hodnotu.

Táto funkcia bude slúžiť na presun znakov po hracej ploche. Okrem presunu musí zabezpečiť aj to, aby sa znak nemohol dostať na iný znak, ako je on sám.

Pozor treba venovať aj situácii, v ktorej sa znak nebude premiestňovať na znak, ale na spodok stĺpca.

Ak sa hráč pokúsi presunúť znak na nevhodné miesto, funkcia nič nevykoná, a hráča upozorní na to, že sa pokúša urobiť nepovolený ťah.

Pri vkladaní znaku do stĺpca treba dbať na to, aby sa znak umiestnil na najmožnejší spodok, a neplával tak vo vzduchu.

Hráč nesmie na presun zvoliť rovnaký stĺpec, napríklad z 2. stĺpca do 2. stĺpca.

Príklad presunu z 1. stĺpca do 2. stĺpca (spodok nádoby):

 1 | * |   | ^ | @ | @ |   |    1 |   |   | ^ | @ | @ |   |
 2 | + |   | ^ | @ | ^ |   |    2 | + |   | ^ | @ | ^ |   |
 3 | + |   | * | + | + |   |    3 | + |   | * | + | + |   |
 4 | * |   | * | @ | ^ |   |    4 | * | * | * | @ | ^ |   |
    --- --- --- --- --- ---        --- --- --- --- --- ---
     1   2   3   4   5   6          1   2   3   4   5   6

Príklad presunu zo 6. stĺpca do 4. stĺpca (spodok nádoby):

 1 |   |   | ^ |   |   |   |    1 |   |   | ^ | @ |   |   |
 2 | + |   | ^ | @ | ^ |   |    2 | + |   | ^ | @ | ^ |   |
 3 | + |   | * | + | + | @ |    3 | + |   | * | + | + |   |
 4 | * | * | * | @ | ^ | @ |    4 | * | * | * | @ | ^ | @ |
    --- --- --- --- --- ---        --- --- --- --- --- ---
     1   2   3   4   5   6          1   2   3   4   5   6

Hodnotenie

Táto úloha je za max. 1 bod. Bude testovaná automatom.

Úloha 3: Kontrola usporiadania stĺpcov

Naprogramujte funkciu bool check(const int rows, const int columns, char field[rows][columns]) s parametrami:

  • const int rows - Počet riadkov v poli
  • const int columns - Počet stĺpcov v poli
  • char field[rows][columns] - Pole, v ktorom sú uložené znaky

Funkcia vráti hodnotu true, ak sú všetky znaky v stĺpcoch rovnaké. Funkcia vráti hodnotu false, ak nie sú všetky znaky rovnaké. Pozor na situáciu, ak sa v stĺpci nachádza iba jeden znak. Táto situácia sa nepovažuje sa konečný stav hry. V každom stĺpci musia byť všetky rovnaké znaky až po vrch.

Funkcia vráti false:

 1 |   |   | ^ |   |   |   |
 2 | + |   | ^ | @ | ^ |   |
 3 | + |   | * | + | + | @ |
 4 | * | * | * | @ | ^ | @ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

Funkcia vráti true:

 1 |   | @ | + | * |   | ^ |
 2 |   | @ | + | * |   | ^ |
 3 |   | @ | + | * |   | ^ |
 4 |   | @ | + | * |   | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

Hodnotenie

Táto úloha je za max. 1 bod. Bude testovaná automatom.

Úloha 4: Herné pole

Naprogramujte funkciu void game_field(const int rows, const int columns, char field[rows][columns]) s parametrami:

  • const int rows - Počet riadkov v poli
  • const int columns - Počet stĺpcov v poli
  • char field[rows][columns] - Pole, v ktorom sú uložené znaky

Funkcia nevráti žiadnu hodnotu.

Táto funkcia je ponechaná na vašu predstavivosť. Bude slúžiť na vykreslenie herného poľa. Čím kreatívnejšie, tým lepšie. Pre nadšencov knižnice curses bude táto knižnica použitá pri preklade programu.

Hodnotenie

Táto úloha je za max. 1 bod. Bude hodnotená Vašim učiteľom. Nahrajte k nej screenshot task_4.png.

Úloha 5: Hra

Naprogramujte funkciu void ball_sort_puzzle(), ktorá bude riadiť celé fungovanie hry.

Funkcia nevráti žiadnu hodnotu.

V tejto funkcii použijete Vami vytvorené funkcie bool check(), void down_possible(), void generator() a void game_field().

Najprv sa musí herné pole vygenerovať. Ak bude vygenerované, vykreslíte ho, a pridáte používateľské rozhranie vo forme dialógu.

Hráča sa najskôr opýtate na stĺpec, z ktorého chcete znak presunúť a potom na stĺpec, kam ho presúvate. Tieto informácie posuniete do funkcie void down_possible(). Po každom presune sa bude overovať stav hry funkciou bool check(). Je na Vás, ako sa hra ukončí. Môže sa ukončiť napríklad vypísaním textu: Congratulations! You won!

Príklad priebehu hry 1:

$ ./ballsortpuzzle
 1 | * | @ |   |   |   |   |
 2 | * | @ |   |   |   | ^ |
 3 | + | @ |   | + | * | ^ |
 4 | ^ | @ | + | * | + | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

 Enter what: 4

 Enter where: 2
 MUST BE SAME

 1 | * | @ |   |   |   |   |
 2 | * | @ |   |   |   | ^ |
 3 | + | @ |   | + | * | ^ |
 4 | ^ | @ | + | * | + | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

 Enter what: 4

 Enter where: 3

 1 | * | @ |   |   |   |   |
 2 | * | @ |   |   |   | ^ |
 3 | + | @ | + |   | * | ^ |
 4 | ^ | @ | + | * | + | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

Príklad priebehu hry 2:

$ ./ballsortpuzzle
 1 |   | @ |   | * |   |   |
 2 |   | @ | + | * |   | ^ |
 3 | + | @ | + | * |   | ^ |
 4 | ^ | @ | + | * |   | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

 Enter what: 1

 Enter where: 3

 1 |   | @ | + | * |   |   |
 2 |   | @ | + | * |   | ^ |
 3 |   | @ | + | * |   | ^ |
 4 | ^ | @ | + | * |   | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

 Enter what: 1

 Enter where: 6

 1 |   | @ | + | * |   | ^ |
 2 |   | @ | + | * |   | ^ |
 3 |   | @ | + | * |   | ^ |
 4 |   | @ | + | * |   | ^ |
    --- --- --- --- --- ---
     1   2   3   4   5   6

 YOU WON

Hodnotenie

Táto úloha je za max. 1 bod. Bude hodnotená Vašim učiteľom. Nahrajte k nej screenshot task_5.png.

Connect Four

Hra Connect Four určená pre dvoch hráčov, funguje na podobnom princípe ako piškvorky. Vyhráva ten hráč, ktorý ako prvý zoradí svoje krúžky po štyroch do horizontálneho, vertikálneho alebo diagonálneho radu.

Veľkosť herného poľa musí byť aspoň 4x4. Hráč sa strieda po každom ťahu. Hra začína prázdnym herným poľom. Prvý hráč položí svoj krúžok do ľubovoľného stĺpca. Hra končí remízou, ak je celé herné pole zaplnené alebo jeden z hráčov ma 4 krúžky zoradené do vertikálneho, horizontálne alebo diagonálneho smeru.

V našom prípade bude herné pole reprezentované formou 2D poľa znakov, hráč číslo 1 bude mať krúžok reprezentovaný znakom Xa hráč číslo znakom O.

Vašou úlohou bude naprogramovať 6 funkcií:

  • void initialize_board(int rows, int cols, char board[rows][cols]) - Funkcia inicializuje prázdne herné pole
  • void print_board(int rows, int cols, const char board[rows][cols]) - Funkcia vykreslí aktuálny stav herného poľa na štandartný výstup
  • int is_valid_move(int rows, int cols, const char board[rows][cols], int col) - Funkcia overí či nasledujúci ťah je možné vykonať
  • int drop_piece(int rows, int cols, char board[rows][cols], int col, char player_piece) - Funkcia položí krúžok hráča na do daného sĺpca
  • int check_win(int rows, int cols, const char board[rows][cols], int row, int col, char player_piece) - Funkcia overí vyhru v každom zo smerov
  • int is_board_full(int rows, int cols, const char board[rows][cols]) - Funkcia zistí či je herné pole už plné a teda jední sa o remízu

Všetkých 6 funkcií sa bude nachádzať v súbore c4.c. Ich deklarácie sú uvedené v súbore c4.h. Hlavný program sa nachádza v súbore main.c.

Okrem požadovaných funkcií si môžete vytvoriť aj vlastné funkcie. Tieto však budú súkromné pre Váš modul (nebudú deklarované v hlavičkovom súbore c4.h).

Úloha 6: Inicializácia poľa

Vytvorte funkciu void initialize_board(int rows, int cols, char board[rows][cols]), ktorá slúži na inicializáciu poľa s troma parametrami:

  • int rows - počet riadkov herného poľa
  • int cols - počet stlpcov herného poľa
  • char board[rows][cols] - pole znakov predstavujúce herné pole

Funkcia nevracia žiadnu hodnotu, ale vyplňuje celé pole znakom '.'. Táto úloha je za max. 0.5 boda. Bude testovaná automatom.

Úloha 7: Vykreslenie poľa

Vytvorte funkciu void print_board(int rows, int cols, const char board[rows][cols]), ktorá na vykreslenie aktuálneho stavu herného poľa s troma parametrami:

  • int rows - počet riadkov herného poľa
  • int cols - počet stlpcov herného poľa
  • char board[rows][cols] - pole znakov predstavujúce herné pole

Funkcia nevráti žiadnu hodnotu.

Táto úloha je za je súčastou úlohy 12 - grafického rozhrania. Bude hodnotená Vaším učiteľom.

Príklad použitia fukcií:

    int rows = 4;
    int cols = 5;
    char board[rows][cols];

    initialize_board(rows, cols, board);

    int player_turn = 1; 

    print_board(rows, cols, board);

    //prints

/*  | . | . | . | . | . |
    | . | . | . | . | . |
    | . | . | . | . | . |
    | . | . | . | . | . |
    ---------------------
    1   2   3   4   5       */

Úloha 8: Validácia ťahu

Vytvorte funkciu int is_valid_move(int rows, int cols, const char board[rows][cols], int col), ktorá validuje či je nasledujúci ťah je možné vykonať so štyrmi parametrami:

  • int rows - počet riadkov herného poľa
  • int cols - počet stlpcov herného poľa
  • char board[rows][cols] - pole znakov predstavujúce herné pole
  • int col - číslo stĺpca do ktorého sa vloží krúžok

Funkcia vráti 1 v prípade, že ťah je možné vykonať inak vráti hodnotu 0.

Táto úloha je za max. 0.75 boda. Bude testovaná automatom.

Úloha 9: Položenie krúžku

Vytvorte funkciu int drop_piece(int rows, int cols, char board[rows][cols], int col, char player_piece), ktorá položí krúžok aktuálneho hráča do poľa so štyrmi parametrami:

  • int rows - počet riadkov herného poľa
  • int cols - počet stlpcov herného poľa
  • char board[rows][cols] - pole znakov pretavujúce herné pole
  • int col - číslo stĺpca do ktorého sa vloží krúžok
  • char player_piece - krúžok aktuálneho hráča

Funkcia položí krúžok a vráti číslo riadku v prípade, že krúžok sa podarilo položiť inak vráti hodnotu -1.

Táto úloha je za max. 0.75 boda. Bude testovaná automatom.

Úloha 10: Overenie výhry

Vytvorte funkciu int check_win(int rows, int cols, const char board[rows][cols], int row, int col, char player_piece), ktorá overí výhru aktuálneho hráča v každom smere so šiestimi parametrami:

  • int rows - počet riadkov herného poľa
  • int cols - počet stlpcov herného poľa
  • char board[rows][cols] - pole znakov pretavujúce herné pole
  • int row - číslo overovaného riadku
  • int col - číslo overovaného sĺplca
  • char player_piece - krúžok aktuálneho hráča

Funkcia vráti 1 v prípade, že aktuálny hráč vyhral inak vráti hodnotu 0.

Táto úloha je za max. 0.5 boda. Bude testovaná automatom.

Úloha 11: Overenie remízy

Vytvorte funkciu int is_board_full(int rows, int cols, const char board[rows][cols]), ktorá zistí či je pole plné a je teda remíza s troma parametrami:

  • int rows - počet riadkov herného poľa
  • int cols - počet stlpcov herného poľa
  • char board[rows][cols] - pole znakov predstavujúce herné pole

Funkcia vráti 1 v prípade, že je pole plné inak vráti hodnotu 0.

Táto úloha je za max. 0.5 boda. Bude testovaná automatom.

Príklad použitia funkcií:

    if (check_win(rows, cols, board, row, column - 1, (player_turn == 1) ? 'X' : 'O')) {
        //...
        printf("Player %d wins!\n", player_turn);
        //....

    if (is_board_full(rows, cols, board)) {
        //....
        printf("It's a draw!\n");
        //...
   

Príklad Gameplayu

| . | . | . | . | . |
| . | . | . | . | . |
| . | . | . | . | . |
| . | . | . | . | . |
---------------------
  1   2   3   4   5 

Player 1, enter your move (1-5): 1

| . | . | . | . | . |
| . | . | . | . | . |
| . | . | . | . | . |
| X | . | . | . | . |
---------------------
  1   2   3   4   5 

Player 2, enter your move (1-5): 2

| . | . | . | . | . |
| . | . | . | . | . |
| . | . | . | . | . |
| X | O | . | . | . |
---------------------
  1   2   3   4   5 

Player 1, enter your move (1-5): 1

| . | . | . | . | . |
| . | . | . | . | . |
| X | . | . | . | . |
| X | O | . | . | . |
---------------------
  1   2   3   4   5 

Player 2, enter your move (1-5): 2

| . | . | . | . | . |
| . | . | . | . | . |
| X | O | . | . | . |
| X | O | . | . | . |
---------------------
  1   2   3   4   5 

Player 1, enter your move (1-5): 2

| . | . | . | . | . |
| . | X | . | . | . |
| X | O | . | . | . |
| X | O | . | . | . |
---------------------
  1   2   3   4   5 

Player 2, enter your move (1-5): 3

| . | . | . | . | . |
| . | X | . | . | . |
| X | O | . | . | . |
| X | O | O | . | . |
---------------------
  1   2   3   4   5 

Player 1, enter your move (1-5): 1

| . | . | . | . | . |
| X | X | . | . | . |
| X | O | . | . | . |
| X | O | O | . | . |
---------------------
  1   2   3   4   5 

Player 2, enter your move (1-5): 2

| . | O | . | . | . |
| X | X | . | . | . |
| X | O | . | . | . |
| X | O | O | . | . |
---------------------
  1   2   3   4   5 

Player 1, enter your move (1-5): 1

| X | O | . | . | . |
| X | X | . | . | . |
| X | O | . | . | . |
| X | O | O | . | . |
---------------------
  1   2   3   4   5 

Player 1 wins!

Úloha 12: Grafické rozhranie

Vytvorené funckie spracujte ho hernej slučky a implementujte ľudobovoľné grafické rozhranie.

Za grafické spracovanie môžete získať 2 body. Spracovanie bude hodnotené vaším učiteľom. Nahrajte k nej screenshot task_12.png.

Odovzdávanie projektu

Zadanie odovzdajte do 30.11.2023 (štvrtok). Posledné testovanie prebehne v tento deň o polnoci.

Zadanie sa odovzdáva prostredníctvom systému na správu verzií Git na serveri git.kpi.fei.tuke.sk.

Názov Vášho projektu musí byť v tvare: zap-2023-id.

Projekt musí mať nasledujúcu štruktúru priečinkov a súborov:

.
├── ps4
│   ├── ballsortpuzzle.c
│   ├── ballsortpuzzle.h
│   ├── c4.c
│   ├── c4.h
│   ├── main.c
│   ├── task_4.png
│   ├── task_5.png
│   ├── task_12.png
└── README

Význam jednotlivých súborov je nasledovný:

  • README - Súbor, v ktorom bude uvedená Vaša skupina, ktorú navštevujete na cvičeniach v tvare:
GROUP : C1
  • /ps4/ballsortpuzzle.c - Zdrojový kód knižnice pre hru ball sort puzzle.
  • /ps4/ballsortpuzzle.h - Hlavičkový súbor knižnice ball sort puzzle.
  • /ps4/main.c - Zdrojový kód obsahujúci funkciu main().
  • /ps4/task_4.png - Screenshot pre úlohu č. 4.
  • /ps4/task_5.png - Screenshot pre úlohu č. 5.
  • /ps4/task_12.png - Screenshot pre grafické spracovanie Connect Four.
  • /ps4/c4.c - Zdrojový kód knižnice pre hru c4.
  • /ps4/c4.h - Hlavičkový súbor knižnice c4.

Upozornenie

Je dôležité, aby Vaše súbory zachovali uvedenú štruktúru. Ak sa niektorý zo súborov síce v repozitári nachádza, ale v inom priečinku, bude to považované za chybu a takýto projekt nebude považovaný za správny.

Upozornenie

Pri názvoch priečinkov, súborov a obsahu súboru README záleží na veľkosti písmen!

Poznámka

Ak sa vo Vašom projekte budú nachádzať ďalšie súbory okrem požadovaných, ich existencia nebude považovaná za chybu.

Kostra projektu

Z nasledujúceho odkazu si stiahnite súbor ballsortpuzzle.zip, ktorý obsahuje kostru projektu Ball Sort Puzzle . Tento balíček obsahuje nasledujúce súbory:

  • ballsortpuzzle.h - Hlavičkový súbor, v ktorom sa nachádzajú deklarácie všetkých požadovaných funkcií pre hru Ball Sort Puzzle.
  • ballsortpuzzle.c - Zdrojový súbor, v ktorom sa bude nachádzať Vaša výsledná implementácia pre hru Ball Sort Puzzle.

V prostredí OS Linux môžete pre stiahnutie použiť príkaz wget v tvare:

wget http://kurzy.kpi.fei.tuke.sk/zap/resources/ballsortpuzzle.zip

Potom z nasledujúceho odkazu si stiahnite súbor connectfour.zip, ktorý obsahuje kostru projektu Connect Four. Tento balíček obsahuje nasledujúce súbory:

  • c4.c - Hlavičkový súbor, v ktorom sa nachádzajú deklarácie všetkých požadovaných funkcií pre hru Connect Four.
  • c4.h - Hlavičkový súbor, v ktorom sa nachádzajú deklarácie všetkých požadovaných funkcií pre hru Connect Four.

V prostredí OS Linux môžete pre stiahnutie použiť príkaz wget v tvare:

wget http://kurzy.kpi.fei.tuke.sk/zap/resources/connectfour.zip

Hodnotenie a testovanie

Za zadanie môžete získať max. 10 bodov. Ľubovoľné 2 body sa započítajú do zápočtu, ostatné body sa započítajú do skúšky. Počet získaných bodov za prvé úlohy sa bude odrážať od výsledku testov, ktorými Vaše zadanie úspešne prejde. Overovať sa bude:

  • Štruktúra Vášho projektu (či sa v ňom nachádzajú všetky potrebné súbory).
  • Funkčnosť Vašej implementácie.

Posledné úlohy bude hodnotiť Váš učiteľ. K úlohám nahrajte screenshot.

Váš kód sa bude prekladať prekladačom gcc s nasledovnými prepínačmi:

gcc -std=c11 -Werror -Wall -Wno-vla-parameter -lcurses

Za chybu sa bude považovať:

  • Ak vo Vašej implementácii použijete globálnu premennú.
  • Ak počas prekladu dôjde ku chybe (upozornenia sú priamo konvertované na chyby).
  • Ak Vaša implementácia neprejde niektorým z testov.

Testovanie Vašich riešení sa bude vykonávať automaticky každé 3 hodiny a to konkrétne o 0300, 0600, 0900, 1200, 1500, 1800, 2100 a 2400.

Vaše riešenia prejdú kontrolou originality. Preto sa pri práci na Vašom zadaní správajte podľa pravidiel etického kódexu! V prípade, že odovzdáte zadanie, ktoré nie je Vaše, môžete byť vylúčení z predmetu!