programming_tutorials/21_others.txt

195 lines
6.2 KiB
Plaintext

Egyéb feladatok.
Ezeket már nem fejtettem ki teljesen, csak "guideline"-okat, és ötleteket írok róluk.
============================== Asset DB ==============================
Egy olyan osztály, amely képes tárolni, és elérhetővé tenni (Singleton),
a betöltött pl Textúrákat, és egyéb több helyen szükséges resource-okat.
Lehet pl map-okat rakni bele, string kulccsal, de pl lehet vectort, ami structokat
tárol, amikbe string név és resource típus van (lehget pl template, de akár
minden típoushoz lehet kézzel is cisnálni.), de lehet például enum, vagy konstans
int kulcsokat is használni, stringek helyett.
A program elején töltsétek be a szükséges dolgokat, és innen legyenek elérhetőek.
(Nyilván közbe is lehet betöltögetni, de nem lessz rá szükség ilyen egyszerű
programoknál.)
============================== Animated Sprite ==============================
Animált Sprite.
Azaz egy olyan Sprite osztály, amelynek van update(float delta) metódusa,
és vagy van egy Sprite vectorja, amiben Sprite-okat lehet eltárolni,
vagy a megadott textúrát tudja x és y darabra osztva kirajzolni.
(Nyilván nem kell annyi textúrát létrehozni, elég csak a clip_rect-et
állítani a megfelelő időben.)
Kell neki még egy változó, amivel az animáció sebességét lehet állítani.
És minden (animáció sebesség) időnként képkockát fog váltani.
A kipróbálásához pl lehet OpenGameArt-on "sprite sheet"-eket keresni.
============================== Tile Map ==============================
Egy olyan osztály, amelyben vagy egy 2d-s int tömb (vagy természetesen 1ds,
vagy akár lehet régiókra is osztani, azaz sok 2ds-tömb), és van egy tile_size
változója (Lehet x, y külön is).
Illetve van benne egy sprite tömb, (De lehet akár map is),
és képes kirajzolni magát, méghozzá úgy, hogy tile_size méretű
rácson a 2ds int tömb alapján a rácsra a sprite-okat ráhelyezi.
A Sprite-okat nem muszály clip-eltetni vele tile_size méretre.
Valószínűleg egyszerűbben érthető, ha rákerestek keresőben a "tile map"
szóra, és/vagy ránéztek pl a Tiled-re (https://www.mapeditor.org/).
A kipróbálásához pl lehet OpenGameArt-on "tile set"-eket keresni.
============================== Bitmap Font ==============================
Megj.: Majdnem teljesen ugyan az, mint a TileMap! Ha azt megcsináltátok,
csak alakítsátok át ezzé.
Ez egy olyan osztály, amely szöveg kiírását fogja tudni elvégezni, az
ablakonkra. (Lehet, hogy meglepő, de szövegek megfelelő kirajzolása
meglepően nehéz feladat! Sőt! Valójában szinte biztos, hogy ehhez hasonló
módszert alkalmaz szinte minden program, ugyanis betűk kirajzolgatása
a font fájlokból idő és processzor igényes, és ezzel a módszerrel
egyszerűen optimalizálható. Amúgy, az dsl-nek van egy sdl_ttf nevű
kiegészítő könyvtára, az is ugyan ezt csinálja a háttérben!.)
Nyilván, a legeszerűbb mód a szövegek kiírására, ha ugyan azt csináljuk,
mint a TileMapnál, csak kicsit erre a célra átalakítva.
-------
Lehet úgy csinálni, hogy van egy vektorunk, amiben Sprite*-okat tudunk
tárolni. Akár be is allokáltathatunk 256-os méretre.
És egyesével beállítgatjuk a megfelelő helyre a megfelelő Sprite-ot.
(A char típus a háttérben unsigned 8 bites int! Azaz simán lehet vele
indexelni! (Ha a fordító esetleg nyavajogna, akkor triviálisan
átcastolható pl int-é!))
Ennek a megoldásnak előnye, hogy a betűk lehetnek más méretűek,
illetve, hogy kevesebb átlátszó pixelt kell majd rajzoltatni.
Viszont hátránya, hogy sok kód létrehozni egy példányt belőle.
-------
Másik megoldás, hogy azt mondjuk, hogy fix méretű betűtípust használunk
(Monospace font).
Ekkor csak a betűk méreteit kell megadni, illetve, egy stringet,
amely tartalmazza a karakteketet, a megfelelő sorrendben,
és máris létrehozható egy példány.
-------
Ami függvények mindenképp legyenek:
get_width(String s) -> Megmondja, hogy mekkora lesz a megadott szöveh szélessége
get_height(String s) -> Megmondja, hogy mekkora lesz a megadott szöveh magassága
draw(String s, int x, int y) -> kiírja a szöveget a megadott helyre
draw_centered(String s, int x, int y) -> kiírja a szöveget a megadott helyre, középre
igazítottan.
Valószínűleg egyszerűbb, ha magatok összedobtok egy egyszerű teszt képet,
de rá is lehet keresni "bitmap font" okra az interneten, nagyon sok van belőlük.
============================== Widget készlet ==============================
Írjunk egy egyszerű Widget készletet.
Megj.: Ha már van használható BitmapFont osztályotok, midnenképp használjátok
fel itt, ha nincs akkor sincs probléma, akkor viszont minden szöveget kézzel
kell megcisnálni, és betölteni képekként.
Widget
Container : Widget
PanelContainer : Container
HBoxContainer : Container
VBoxContainer : Container
Label : Widget
Button : Widget
LabelButton : Button
ImageButton : Button
Image : Widget
============================== Notepad ==============================
Írj egy nagyon egyszerű Notepad szerű programot, a widget
készleted felhasználásával.
Az se probléma, ha nem lehet szerkeszteni a szöveget.
============================== Táblázatkezelő ==============================
Írj egy nagyon egyszerű excel szerű táblázatkezelő programot,
a widget készleted felhasználásával.
============================== Pong klón ==============================
Írj egy Pong klónt.
============================== Breakout klón ==============================
Írj egy Breakout klónt.
A Tile Map osztállyal egyszerűen megoldható.
============================== Snake játék ==============================
Írj egy snake klónt.
A Tile Map osztállyal is egyszerűen megoldható.
============================== Monopolys programhoz gui ==============================
Írj az előzőleg kifejleszett Monopolys szimulációhoz egy felhasználói felületet.
============================== Raycaster ==============================
Implementálj egy Raycaster-t.
Pl.:
https://www.youtube.com/watch?v=gYRrGTC7GtA
https://www.youtube.com/watch?v=PC1RaETIx3Y
https://www.youtube.com/watch?v=eOCQfxRQ2pY
etc...