Neprihlásený používateľ |

Špecifikácia zadania


Cieľom zadania je pokračovať v programovaní hry Monopoly a rozšíriť ju o kreatívne funkcie. Hlavnou úlohou je implementovať používateľské rozhranie (UI) pre Monopoly v termináli. UI bude slúžiť na ovládanie hry a vizualizáciu jej priebehu. Môžu sa využiť farby, okná, menu, formuláre, práca s myšou a klávesnicou na grafické znázornenie jednotlivých prvkov hry. Na tvorbu UI v textovom móde je dovolené použiť knižnicu ncurses. Zadanie nebude automatizovane hodnotené unit testami, ale v rámci tzv. blind peer review, kde si budú študenti anonymne a vzájomne medzi sebou hodnotiť a bodovať odovzdané riešenia podľa ich kvality.

Úloha

Úlohou je ďalej rozvíjať hru Monopoly, ktorá bola predmetom zadania 4 a 5. V tomto zadaní je hlavnou úlohou rozšíriť vaše existujúce riešenie o používateľské rozhranie v termináli, ktoré prinesie interaktivitu, herný zážitok a vizualizáciu priebehu hry. Zadanie má formu free style, t.j. študent nie je obmedzovaný v tom, ako bude dané používateľské rozhranie vyzerať a fungovať. Neexistujú žiadne pravidlá pre formu a obsah výpisov.

Keďže sú možnosti kreslenia grafiky v termináli značne obmedzené, bude možné na vývoj použiť známu knižnicu ncurses, ktorá ponúka pokročilú prácu s terminálom. Návod na inštaláciu a používanie tejto knižnice bol odprezentovaný na seminári dňa 24. 4. 2024. Takisto je k dispozícii literatúra, v ktorej sú všetky potrebné náležitosti používania knižnice vysvetlené.

Zadanie nebude automatizovane hodnotené pomocou unit testov. Počet odovzdávacích pokusov bude neobmedzený. Zmyslom je zapojiť vlastnú kreativitu do programovania a vizualizácie údajov.

Funkcie používateľského rozhrania (nápady):

  • Menu:
    • Spustenie/skončenie hry
    • Konfigurácia hráčov
    • Konfigurácia hracieho plánu
    • Iné nastavenia
  • Vizualizácia (treba používať vhodnú grafiku a farby):
    • hracieho plánu
    • figúrok hráčov
    • kocky
    • informácií o hráčoch
    • nakúpených nehnuteľností hráčov
    • víťaza
  • Interakcia (ľudský vstup):
    • hádzanie kockou
    • rozhodnutia počas hry
    • editovanie hracieho plánu
  • Nápoveda (zobrazovanie nápovedy ako hra funguje a ako sa ovláda)
  • Extra funkcie:
    • Save/load
    • Editor/generátor hracieho plánu
    • Rozšírené herné pravidlá (napr. pridanie klasických pravidiel Monopoly)
    • Rôzne herné režimy (turnaj viacerých hráčov)
    • Zobrazovanie štatistík

Obrázok 1a: Zobrazenie hracieho plánu v termináli (inšpirácia prevzatá z Monopoly in C)



Obrázok 1b: Zobrazenie hracieho plánu v termináli (ďalšia inšpirácia ako zobraziť hrací plán, kód je k dispozícii na stiahnutie) (veľký obrázok)



Obrázok 1c : Hrací plán Monopoly + hod kockou + pohyb figúrky (kód je k dispozícii na stiahnutie) (veľký obrázok)

Knižnica ncurses

Je to knižnica, ktorá umožňuje programátorovi vyvíjať používateľské rozhrania v termináli. Návod ako nainštalovať a používať knižnicu spolu s programátorskými príkladmi sú dostupné na stiahnutie v ľavom paneli tejto webstránky po prihlásení. Taktiež máte k dispozícii literatúru s dokumentáciou, návodmi a tutoriálmi.

Pomocou tejto knižnice dokážeme:

  • vytvoriť menu aplikácie
  • obrazovku rozdeliť na okná
  • zadávať vstup do formulárov
  • pracovať s farbami
  • rozpoznávať stlačené tlačidlá a polohu ukazovateľa myši
  • rozpoznávať stlačené klávesy



Obrázok 2: Niektoré vizuálne prvky knižnice ncurses (zhora nadol: menu, okno, farby).

Odovzdávanie

Pokyny pre odovzdávanie:

  • Odovzdáva sa 1 zdrojový súbor (súbor s príponou .c).
  • Počet odovzdávacích pokusov je neobmedzený. Bodová penalizácia je deaktivovaná.
  • Hodnotí sa posledný odovzdaný súbor.
  • Odovzdaný súbor musí byť kompilovateľný pomocou prekladača GCC.
  • Po skompilovaní programu, musí vzniknúť spustiteľná konzolová aplikácia.
  • Herná logika musí obsahovať aspoň zjednodušené pravidlá hry, s ktorými sme pracovali v zadaní 4.
  • Hra musí obsahovať minimálne herný režim: človek vs. PC.
  • Kód musí byť riadne okomentovaný, aby sa v ňom vaši recenzenti vyznali.
  • Do komentárov neuvádzajte vaše meno.

Čo je dovolené použiť vo vašom zdrojovom kóde:

  • Štandardnú knižnicu jazyka C (t. j. bežné hlavičkové súbory ako stdio.h, stdlib.h, string.h a pod.).
  • Knižnicu ncurses (hlavičkové súbory tejto knižnice a prilinkovanie samotnej knižnice).

Pred odovzdaním:

  • Skontrolujte, či sa dá váš kód skompilovať pomocou prekladača GCC.
  • Skontrolujte, či váš program neobsahuje chyby pomocou nástrojov Valgrind a Address Sanitizer
  • Dôkladne pretestujte váš program z hľadiska používania (recenzentovi musí byť jasné ako sa program používa). Do programu integrujte nápovedu.
  • Do komentára uveďte postup ako si musí recenzent skompilovať váš kód (ak napríklad používate knižnicu ncurses a postup nie je zrejmý).

Obrázok 3: Odovzdávací formulár na webstránke zadania
(pod formulárom je odkaz na posledný odovzdaný súbor).

Blind peer review

Zadanie sa bude hodnotiť v rámci blind peer review. Je to proces, v ktorom si odovzdané riešenia hodnotia navzájom študenti anonymným spôsobom. Každé odovzdané zadanie bude vyhodnotené 3 náhodne zvolenými študentmi. Body môže získať len ten študent, ktorý odovzdal zadanie. Celý proces hodnotenia prebieha pomocou webstránky zadania.


Obrázok 4: Panel s peer review hodnotením zobrazuje 3 náhodne pridelené zadania, ktoré musí študent vyhodnotiť (zobrazí sa po vypršaní termínu na odovzdávanie zadaní).


Každý študent, ktorý odovzdal zadanie vyhodnotí 3 náhodne pridelené zadania. Hodnotenie zadania spočíva v pridelení bodov v intervale $\langle0,3\rangle$ a napísaní slovného komentára, v ktorom recenzent vymenuje všetky potrebné argumenty, ktoré vysvetľujú, prečo udelil daný počet bodov. Ak študent vyhodnotí všetky 3 pridelené zadania, získa 1 bod za aktivitu.

Oblasti, ktoré musí recenzent zohľadniť v hodnotení:

  • Funkcionalita (overenie, či hra funguje a aké možnosti ponúka)
  • Kvalita kódu (overenie, či je kód kvalitný, logicky organizovaný, pamäťovo a časovo efektívny)
  • Umelecký dojem a hrateľnosť (posúdenie vizuálnej atraktivity a kvality herného zážitku)

Ďalšie oblasti, ktoré môže recenzent posúdiť:

  • Prítomnosť run-time chýb v programe (napríklad chyby odhalené Valgrindom alebo Address Sanitizerom)
  • Prítomnosť/kvalita komentárov
  • Nápoveda počas hry
  • Inovatívnosť/originálnosť/pridaná hodnota autora

Dôležité odporúčanie pre recenzenta:

Programy napísané pomocou knižnice ncurses neskúšať/netestovať v integrovanom termináli vývojového prostredia CLion. Aplikácia sa tam nebude zobrazovať korektne a pravdepodobne nebude ani fungovať. Na testovanie použite systémový terminál.


Obrázok 5: Príklad hodnotenia zadania (spočíva v pridelení bodov z intervalu $\langle0,3\rangle$ a slovného komentára). Zdrojový kód hodnoteného zadania sa nachádza v spodnej časti formulára (veľký obrázok).

Spúšťanie cudzích programov

Každý študent, ktorý odovzdal zadanie sa stane recenzentom, ktorému budú náhodne pridelené 3 anonymné zadania, ktoré musí vyhodnotiť. Na vyhodnotenie je však potrebné skompilovať a spustiť cudzí kód iného študenta. Takýto kód môže byť potenciálne nebezpečný a preto je potrebné byť opatrný. Zdrojový kód je potrebné pred skompilovaním najprv analyzovať, či nie je škodlivý (napr. nedochádza k zápisu/vymazávaniu súborov a pod.). Z bezpečnostných dôvodov odporúčame spúšťať cudzie programy v izolovanom prostredí resp. na inom počítači, kde sa nenachádzajú vaše osobné/citlivé údaje.

Ako spustiť cudzí program?

  • Na vlastnom počítači na vlastnú zodpovednosť (treba vopred dôkladne skontrolovať zdrojový kód).
  • Pomocou virtual machine (VMWare, VirtualBox a pod.)
  • Pomocou Dockeru
  • Pomocou Windows Sandboxu
  • Online vývojové prostredie replit.com

Výsledky hodnotenia

Po uplytnutí doby na peer review sa na webstránke zadaní zobrazí každému študentovi výsledok hodnotenia. Za zadanie je možné získať max. 10 bodov.

Výsledok hodnotenia:

  • 1 bod za aktivitu (iba ak študent vyhodnotil všetky 3 pridelené zadania)
  • Max. 9 bodov za vlastné zadanie od 3 anonymných recenzentov (každý recenzent môže dať max. 3 body).

Obrázok 6: Panel s výsledkami hodnotenia (obsahuje body za aktivitu a body pridelené jednotlivými anonymnými recenzentmi). Po stlačení tlačidla Detail si môžete prečítať slovný komentár vášho recenzenta. Tento panel sa zobrazí až po uplynutí doby na peer review.

Dôležité termíny

Dôležité termíny:

  • Deadline pre odovzdávanie: 12. máj 2024, 23:59:59
  • Obdobie na peer review: 13. máj 2024, 00:00:00 - 15. máj 2024, 23:59:59
  • Posledné konzultácie (MS Teams): 16. a 17. máj 2024, 10:00 - 12:00

Obrázok 7: Dôležité termíny, ktoré sa týkajú zadania č. 6.

Video

Ako odovzdať zadanie

Odovzdáva sa 1 zdrojový súbor v jazyku C. Počet odovzdávacích pokusov je neobmedzený. Hodnotiť sa bude posledné odovzdanie. Do komentárov je zakázané uviesť meno autora.


Ako hodnotiť pridelené zadania

Po uplynutí termínu na odovzdanie sa spustí systém pre blind peer review. Každý študent bude mať rolu recenzenta a bude musieť vyhodnotiť 3 náhodne pridelené anonymné zadania. Hodnotenie pozostáva z pridelených bodov v intervale $\langle0,3\rangle$ a slovného komentára. Do slovného komentára je zakázané uviesť meno recenzenta.


Zobrazenie výsledkov hodnotenia

Po uzatvorení systému peer review si môže každý študent pozrieť výsledky hodnotenia. Uvidí svoje body za aktivitu a body pridelené 3 anonymnými recenzentmi spolu s ich textovým komentárom.

Zdroje

Nasledujúce zdroje vám môžu pomôcť pri programovaní zadania.

Jazyk C

  • Neoficiálna príručka jazyka C. Veľmi dobré na vyhľadávanie knižničných funkcíí, obsahuje popis parametrov funkcíí, návratových hodnôt a príklady.
  • Oficiálna príručka jazyka C (kompatibilná so štandardom). Veľmi dobré na vyhľadávanie knižničných funkcíí, obsahuje popis parametrov funkcíí, návratových hodnôt a príklady. Je to najspoľahlivejší zdroj informácií, avšak prezentovaný veľmi technicky a pre začiatočníkov miestami náročne na pochopenie.

Knižnica ncurses

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.