Cílem semestrální práce je napsat program splňující zadání a obecné požadavky. Práci je nutno vykonat zcela samostatně a odevzdat e-mailem v určeném termínu.
Zadání je stanoveno na základě domluvy studenta s cvičícím. Součástí zadání jsou stručné požadavky na funkčnost programu (např. “hra se postupně zrychluje”, nebo “úrovně jsou generovány automaticky”). Pokud některý požadavek nelze splnit, student a cvičící se musí domluvit na změně zadání. Pokud při kontrole nebude některý požadavek splněn, práce nebude přijata.
Příklady zadání viz. níže.
Následující požadavky jsou povinné. Práce, která nesplňuje některý z těchto požadavků, nebude přijata.
NULL
, nebo typu void*
je nepřijatelné.
free
, nebo příkazu delete
bude považováno za značně podezřelé.
Existují i nepovinné požadavky, jejich nesplnění může být penalizováno ztrátou bodů.
Semestrální práci je nutno odevzdat cvičícímu e-mailem. Tento e-mail musí obsahovat:
CMakeLists.txt
, Makefile
, nebo projektové soubory IDE (.vcxproj
, apod.)
Pokud je potřeba vysvětlit složité součásti návrhu (velká funkce, komplikovaná třída), není nutné psát detaily do e-mailu, raději je pište do komentářů v kódu.
Nejzazší termín odevzdání je poslední den semestru, neděle 15. ledna 2016. Pozdní odevzdání je možné pouze ve výjimečných případech a po domluvě s cvičícím. Cvičící musí zareagovat do 7 dnů od přijetí odevzdané práce a sdělit studentovi hodnocení. Student může zlepšit svoje hodnocení opakovaným odevzdáním, ale pouze pokud opakované odevzdání proběhne před termínem. Pokud bylo předchozí odevzdání neúspěšné, student může odevzdat i po termínu.
Za semestrální práci je možné získat až 30 bodů. Práce ohodnocená alespoň 15 body je považována za úspěšně odevzdanou. Za velmi kvalitní práci může cvičící přidat i bonusové body nad 30.
Předmětem zadání nemusí být videohra – zkušenost ale praví, že při tvorbě grafických aplikací se lépe udržuje motivace při práci. (Pozor, i když si vyberete zadání z tohoto seznamu, cvičící ho musí schválit. Je to z toho důvodu, aby se zadání příliš neopakovala.)
V příloze jsou všechny zdrojové soubory a VS2015 projekt pro kompilaci hry PONG, která používá Openframeworks (kompiloval jsem proti verzi 0.9.3). Hra je pro dva hráče, levá pálka je ovládána pomocí kláves E (nahorů) a D (dolů). Práva pálka se pak ovládá pomocí kláves O a L. Míček se též dá zastavit klávesou S a vrátit doprostřed obrazovky klávesou C. Šipkami se dá ovládat směr pohybu míčku. Míček se při každém odrazu od pálky zrychlí a je mu dána nová rychlost ve směru Y osy, v závislosti na místě dopadu na pálku a aktuální rychlosti ve směru osy X. Startovní směr a rychlost pohybu míčku po jeho propadnutí je generována náhodně.
Hra se přizpůsobuje měnící se velikosti okna tím, že se pálky přesunou na kraje roztáhnutého okna. Stejně tak se přizpůsobí na změnšení okna, ale nesmí se stát, že se tím dostane míček mimo nové rozměry okna.
Pozor, ukázka v příloze je těsně na úrovni zápočtu, ne-li pod ní.
Pokud pracujete na Linuxu a vidíte chybu s textem podobným undefined reference to `pthread_create
', váš program nepůjde zlinkovat pokud kompilátoru nepředáte -pthread
, třeba takto:
clang++ -std=c++14 -g -Wall -Wextra -pthread main.cpp
Clion používá CMake
a CMakeLists.txt
pro kontrolu kompilace. Jako kompilátor ale používá buďto g++
nebo Clang
, a tudíž je mu též potřeba říct, aby linkoval vlákna. Nejjednodušší způsob je v CMakeLists.txt
změnit set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++14”)
na set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++14 -pthread”)
.
Vzhledem k rychlosti dnešních strojů je nepravděpodobné, že se vám nepovede udržet fixních 60 fps. Nicméně stejně doporučujeme mít změny v polohách upravené dle rychlosti normalizované pro aktuální fps vaší hry. Toho můžete docílit například tak, že při přípravě nového framu spočítáte koeficient odpovídající rozdílu mezi očekávanou dobu framu a reálnou dobou posledního framu.
frame_rate_coefficient = target_fps / (1. / time_needed_for_last_frame);