|
Platform játék
3D-s megjelenítés, véletlenszerű pályagenerálás, jutalmazó játékélmény
|
#include "map.h"Macros | |
| #define | maxPlatformLength 5 |
| #define | minPlatformLength 2 |
| #define | baseHeightPercent 0.3 |
| #define | fuzziness 2 |
| #define | treasureColor (colors){ (color){69, 82, 160, 255}, (color){58, 69, 135, 255}, (color){44, 53, 102, 255} } |
| #define | treasureSize (vector3D){0.5, 0.5, 0.25} |
Functions | |
| void | setMapSize (int x, int y) |
| A pálya méretét lehet vele beállítani. More... | |
| intVector2D | getMapSize () |
| A pálya méretét adja vissza. More... | |
| block ** | getMap () |
| A pályát adja vissza. More... | |
| bool | isPointWithinBox (vector2D point, vector2D boxPosition, vector2D boxSize) |
| Megmondja, hogy egy pont benne van-e egy négyzetben. More... | |
| bool | isBoxOverlappingBox (vector2D box1Position, vector2D box1Size, vector2D box2Position, vector2D box2Size) |
| Megmondja, hogy két négyzet fedésben van-e. More... | |
| bool | isWithinTheMap (vector2D point, vector2D size) |
| Megmondja, hogy egy pont a pályán belül van-e. More... | |
| bool | detectCollision (vector2D position, vector2D size, block collidableBlock, block **collidedWith) |
| Megmondja, hogy történt-e ütközés egy négyzet és a pálya között. Visszaadja a szóban forgó kocka pointerét is. More... | |
| void | freeColorMap () |
| Felszabadítja a színek tömbjét. More... | |
| void | generateColorMap () |
| Véletlenszerűen létrehozza a kockák palettáját, egy oszlopon belül minden kocka egyszínű. More... | |
| void | freeMap () |
| Felszabadítja a térkép tömbjét. More... | |
| void | createMap () |
| Létrehoz egy tömböt a térképnek. More... | |
| void | generateMap (vector2D maxVelocity) |
| Térkép platformokkal betöltése, úgy hogy játszható legyen Kisebb egységekre, részekre bontja a pályát. Minden egységben egy darab platform oszlop van. A platformok magasság különbsége olyan, hogy a jelenlegi fizikával a játékos ugrálva elérhesse őket. A pályagenerálás előtt ezért ki kell számolni, milyen messzire ugorhat. More... | |
| int | getHeightAtX (int x) |
| Megmondja egy adott x-hez milyen magas földszint tartozik. More... | |
| bool | isInBlockSideways (int x, int lowestY, int uppermostY) |
| Ez a player modul szempontjából lényeges, megmondja, hogy belelóg-e egy kockába. More... | |
| bool | isInBlockPerpendicular (int leftmostX, int rightmostX, int y) |
| Ez a player modul szempontjából lényeges, megmondja, hogy belelóg-e egy kockába. More... | |
| renderObject | getBlockRenderObject (int x, int *y, int direction, int bound, bool sides[]) |
| A térkép rajzolást teszi lehetővé. A sebesség növelés végett az egymás alatt lévő kockákat (mivel egyszínűek) egyszerre is rajzolhatjuk. Ilyenkor több dologra is kell figyelnünk. Először is, nem elég az azonos szín, arra is figyelni kell, hogy azonos oldalaik is látszódjanak. Ha tud oszlopot rajzolni, akkor az y koordját módosítja hívójának. More... | |
Variables | |
| colors * | colorMap = NULL |
| block ** | map = NULL |
| intVector2D | mapSize |
| #define baseHeightPercent 0.3 |
A pálya hányad része legyen tömör "föld".
| #define fuzziness 2 |
Mennyire legyen recegős a pálya? (legnagyobb magasság különbségek a földszinten)
| #define maxPlatformLength 5 |
A legszélesebb platformok szélessége [m].
| #define minPlatformLength 2 |
A legkeskenyebb platformok szélessége [m], ez nem teljesen igaz, mindig lesznek ksiebbek is, csak nem olyan sok.
| #define treasureColor (colors){ (color){69, 82, 160, 255}, (color){58, 69, 135, 255}, (color){44, 53, 102, 255} } |
A jutalmak színe.
| #define treasureSize (vector3D){0.5, 0.5, 0.25} |
A jutalom mérete.
| void createMap | ( | ) |
Létrehoz egy tömböt a térképnek.
| bool detectCollision | ( | vector2D | position, |
| vector2D | size, | ||
| block | collidableBlock, | ||
| block ** | collidedWith | ||
| ) |
Megmondja, hogy történt-e ütközés egy négyzet és a pálya között. Visszaadja a szóban forgó kocka pointerét is.
| void freeColorMap | ( | ) |
Felszabadítja a színek tömbjét.
| void freeMap | ( | ) |
Felszabadítja a térkép tömbjét.
| void generateColorMap | ( | ) |
Véletlenszerűen létrehozza a kockák palettáját, egy oszlopon belül minden kocka egyszínű.
| void generateMap | ( | vector2D | maxVelocity | ) |
Térkép platformokkal betöltése, úgy hogy játszható legyen Kisebb egységekre, részekre bontja a pályát. Minden egységben egy darab platform oszlop van. A platformok magasság különbsége olyan, hogy a jelenlegi fizikával a játékos ugrálva elérhesse őket. A pályagenerálás előtt ezért ki kell számolni, milyen messzire ugorhat.
| sebességvektor | player max A platformokra random tesz jutalmakat (kék kockákat) is. Nem túl hosszú a függvény, de nem is a legrövidebb, ennél több részre sajnos nem lehet szétszedni szépen. |
| renderObject getBlockRenderObject | ( | int | x, |
| int * | y, | ||
| int | direction, | ||
| int | bound, | ||
| bool | sides[] | ||
| ) |
A térkép rajzolást teszi lehetővé. A sebesség növelés végett az egymás alatt lévő kockákat (mivel egyszínűek) egyszerre is rajzolhatjuk. Ilyenkor több dologra is kell figyelnünk. Először is, nem elég az azonos szín, arra is figyelni kell, hogy azonos oldalaik is látszódjanak. Ha tud oszlopot rajzolni, akkor az y koordját módosítja hívójának.
| koord | x |
| koord* | y |
| int getHeightAtX | ( | int | x | ) |
Megmondja egy adott x-hez milyen magas földszint tartozik.
| block** getMap | ( | ) |
A pályát adja vissza.
| intVector2D getMapSize | ( | ) |
A pálya méretét adja vissza.
| bool isBoxOverlappingBox | ( | vector2D | box1Position, |
| vector2D | box1Size, | ||
| vector2D | box2Position, | ||
| vector2D | box2Size | ||
| ) |
Megmondja, hogy két négyzet fedésben van-e.
| bool isInBlockPerpendicular | ( | int | leftmostX, |
| int | rightmostX, | ||
| int | y | ||
| ) |
Ez a player modul szempontjából lényeges, megmondja, hogy belelóg-e egy kockába.
| bool isInBlockSideways | ( | int | x, |
| int | lowestY, | ||
| int | uppermostY | ||
| ) |
Ez a player modul szempontjából lényeges, megmondja, hogy belelóg-e egy kockába.
| bool isPointWithinBox | ( | vector2D | point, |
| vector2D | boxPosition, | ||
| vector2D | boxSize | ||
| ) |
Megmondja, hogy egy pont benne van-e egy négyzetben.
| bool isWithinTheMap | ( | vector2D | point, |
| vector2D | size | ||
| ) |
Megmondja, hogy egy pont a pályán belül van-e.
| void setMapSize | ( | int | x, |
| int | y | ||
| ) |
A pálya méretét lehet vele beállítani.
| colors* colorMap = NULL |
A színeket tartalmazó 1 dimenziós tömb. (minden oszlop egyszínű)
| block** map = NULL |
A pályát tartalmazó 2 dimenziós tömb.
| intVector2D mapSize |
A pálya mérete [m].
1.8.13