mirror of
https://github.com/Relintai/programming_tutorials.git
synced 2025-04-23 21:53:28 +02:00
195 lines
6.2 KiB
Plaintext
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...
|
|
|
|
|