A keretrendszer használatához szükséges fájlok (Code::Blocks / Windows alapú munkához - linux oprendszer alatt is lehet dolgozni egyeztetés után):
- main.cpp - összekötő kód a háttérben használt FLTK keretrendszerrel, nem lesz szükség majd a szerkesztésére
- sgf.h - fejállomány, melyben le van írva, hogy
az egyszerűsített keretrendszer milyen lehetőségeket biztosít; ez a fájl include-dal fel lesz
használva az alábbi
rendering.cpp-ben - rendering.cpp - ide írjuk a saját kódunkat
- fltk-x64.zip (64-bites fordítóhoz) vagy fltk-x86.zip (32-bites fordítóhoz) - ezek valamelyikében található foldert kicsomagolva elhelyezzük majd a projektben (itt található az FLTK keretrendszer dll fájlja és fejállományai)
Code::Blocks projekt elkészítése
Lépések:
- Készítünk egy új projektet (Console Application, aztán majd később átállítjuk).
- A
main.cppfájl tartalmát (vagy az egész fájlt felülírással) lecseréljük a fentebbi main.cpp-re. - A projekt könyvtárába (
main.cppmellé másoljuk a másik két forrásfájlt, majd ezeket hozzáadjuk a projekthez (a bal oldali navigációs panelen jobb click a projekt nevére, majd Add files opció). - A rendszerarchitektúrának megfelelő
fltk-*.zipfájlt kicsomagoljuk a projekt könyvtárába (tehát lesz ott egyfltk-x*nevű mappa, közvetlenül ebben pedig egy .dll fájl és egy FL mappa). - A Code::Blocks menüben a Project / Properties… ablak Build targets tabján Debug és Release target esetén is átállítjuk a Type melletti legördülő listát Console application-ről GUI application-re.
- A Code::Blocks menüben a Project / Build options… ablak bal oldali paneljében kiválasztjuk a legfelső
elemet (tehát az egész projektre állítunk be valamit, nem csak adott target-re), majd elvégezzük a következő
módosításokat:
- Search directories tab: Add, benne “fltk-x64” (vagy “fltk-x86”) - nem kell teljes útvonal, mint amilyet az ablak ajánl. Közben ezen belül a Compiler altab volt kijelölve, ugyanezt el kell végezni a Linker-re is.
- Linker settings tab: a Link libraries részben Add opció, majd oda beírjuk az
mgwfltknox-1.4szöveget (tulajdonképpen a .dll fájl nevét kiterjesztés nélkül).
Ezek után a szokásos Build and Run opcióval el kellene induljon a projekt.
Bevezető feladatok:
- Rajzoljunk ki az ablak közepére egy lehető legnagyobb méretű zöld négyzetet.
- Rajzoljunk sakktáblát.
- Készítsünk színátmenetet (vízszintesen, függőlgesen vagy körkörösen) két szín között.
- Kövessük az egér mozgását (jelenjen meg minden pillanatban pont az egér alatt egy körlap).
- Jelenjen meg egy körlap mindenhol, ahová a felhasználó eddig klikkelt.
Projektötletek
1.
Implementáljunk a rajzolóprogramokból ismert szabadkezes rajzoláshoz hasonló funkciót a grafikus ablakon!
Követelmények (a felhasználó szemszögéből):
- akkor és csak akkor húzzunk vonalat, ha az egér úgy mozog az ablak fölött, hogy közben a bal egérgomb le van nyomva
- a vonal ne legyen túl vékony és ne szakadjon meg (az iránytól és a mozgás sebességétől függetlenül)
- lehessen változtatni a színét, lehessen törölni a vászon tartalmát (billentyűgombok lenyomásával)
Ötletek az implementációhoz:
- a vászon jelenlegi tartalmát egy Color típusú elemekből álló mátrixban tároljuk (lehet pl. 1920x1080 méretű)
- render esetén a mátrixunk megfelelő részét másoljuk a képernyőre draw_pixel hívásokkal
- az egér- és billentyűeseményeket kezelő függvényekben fogjuk változtatni a mátrix tartalmát
- a szaggatottság elkerülésére valamilyen vonal-raszterizáló algoritmust használunk (lásd az olvasmányoknál)
Ajánlott olvasmányok:
- A keretrendszer alapötlete és alkalmazások
- Digital Differential Analyzer (vonalak raszterizációja): https://www.baeldung.com/cs/digital-differential-analyzer-algorithm
2.
Tic-tac-toe játék 3x3-as táblán.
Követelmények (a felhasználó szemszögéből):
- lehessen látni a négyzetrácsot a játék jelenlegi állásával
- az “A” gomb megnyomása esetén a soron következő játékos helyett lépjen a számítógép (optimális algoritmussal)
- detektáljuk a játék végét, írjunk ki megfelelő üzenetet
Ajánlott olvasmányok:
- A keretrendszer alapötlete és alkalmazások
- Digital Differential Analyzer (vonalak raszterizációja): https://www.baeldung.com/cs/digital-differential-analyzer-algorithm
- Minimax algoritmus az optimális lépés megkereséséhez: https://www.neverstopbuilding.com/blog/minimax, illetve https://www.freecodecamp.org/news/how-to-make-your-tic-tac-toe-game-unbeatable-by-using-the-minimax-algorithm-9d690bad4b37/
3.
Kétdimenziós domborzati információk megjelenítése skálázva és eltolva.
Felasználói követelmények:
- adott méretű mátrix beolvasása fájlból, az értékek valamilyen színskála szerinti megjelenítése
- mátrix megjelenítése felnagyítva vagy lekicsinyítve az ablak aktuális méretére (megfelelően megszerkesztett gradiensekkel elérjük, hogy az ábrán az átmenetek folytonosnak tűnjenek)
- eltolás egérrel, nagyítás görgetéssel úgy, hogy az egér alatti pont helyben maradjon
Ajánlott olvasmányok:
- A keretrendszer alapötlete és alkalmazások Lásd a függvényábrázolós részben használt geometriai transformációkat.
A dolgozatok szerkezete:
- mátrixok és struktúrák C++-ban (elméleti tárgyalás, 1-2 feladat szöveges I/O műveletekkel)
- ezek alkalmazása 2D grafikában (a grafikus keretrendszerünk leírása, hivatkozhattok a fentebbi dolgozatra, néhány bevezető jellegű feladat megoldással és képekkel)
- projekt leírása, lényegesebb ötletek (esetleg kódrészletek), képernyőképek működés közben