Table of Contents

Semestrální práce

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.

Přehled studentů a vybraných témat

Zadání

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.

Obecné požadavky

Následující požadavky jsou povinné. Práce, která nesplňuje některý z těchto požadavků, nebude přijata.

Existují i nepovinné požadavky, jejich nesplnění může být penalizováno ztrátou bodů.

Odevzdání, termín a hodnocení

Semestrální práci je nutno odevzdat cvičícímu e-mailem. Tento e-mail musí obsahovat:

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říklady zadání

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.)

Příklad průvodního mailu

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.

Příloha

Pozor, ukázka v příloze je těsně na úrovni zápočtu, ne-li pod ní.

Podporované knihovny

Rady

Kompilace programů používající vlákna na Linuxu

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

Kompilace programů používající vlákna v CLion IDE

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”).

Proměnlivá rychlost pohybu dle fps

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);

1)
viz podporované knihovny