Platform játék
3D-s megjelenítés, véletlenszerű pályagenerálás, jutalmazó játékélmény
map.c fájlreferencia
#include "map.h"

Makródefiníciók

#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}
 

Függvények

void setMapSize (int x, int y)
 A pálya méretét lehet vele beállítani. Részletek...
 
intVector2D getMapSize ()
 A pálya méretét adja vissza. Részletek...
 
block ** getMap ()
 A pályát adja vissza. Részletek...
 
bool isPointWithinBox (vector2D point, vector2D boxPosition, vector2D boxSize)
 Megmondja, hogy egy pont benne van-e egy négyzetben. Részletek...
 
bool isBoxOverlappingBox (vector2D box1Position, vector2D box1Size, vector2D box2Position, vector2D box2Size)
 Megmondja, hogy két négyzet fedésben van-e. Részletek...
 
bool isWithinTheMap (vector2D point, vector2D size)
 Megmondja, hogy egy pont a pályán belül van-e. Részletek...
 
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. Részletek...
 
void freeColorMap ()
 Felszabadítja a színek tömbjét. Részletek...
 
void generateColorMap ()
 Véletlenszerűen létrehozza a kockák palettáját, egy oszlopon belül minden kocka egyszínű. Részletek...
 
void freeMap ()
 Felszabadítja a térkép tömbjét. Részletek...
 
void createMap ()
 Létrehoz egy tömböt a térképnek. Részletek...
 
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. Részletek...
 
int getHeightAtX (int x)
 Megmondja egy adott x-hez milyen magas földszint tartozik. Részletek...
 
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. Részletek...
 
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. Részletek...
 
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. Részletek...
 

Változók

colors * colorMap = NULL
 
block ** map = NULL
 
intVector2D mapSize
 

Makródefiníciók dokumentációja

◆ baseHeightPercent

#define baseHeightPercent   0.3

A pálya hányad része legyen tömör "föld".

◆ fuzziness

#define fuzziness   2

Mennyire legyen recegős a pálya? (legnagyobb magasság különbségek a földszinten)

◆ maxPlatformLength

#define maxPlatformLength   5

A legszélesebb platformok szélessége [m].

◆ minPlatformLength

#define minPlatformLength   2

A legkeskenyebb platformok szélessége [m], ez nem teljesen igaz, mindig lesznek ksiebbek is, csak nem olyan sok.

◆ treasureColor

#define treasureColor   (colors){ (color){69, 82, 160, 255}, (color){58, 69, 135, 255}, (color){44, 53, 102, 255} }

A jutalmak színe.

◆ treasureSize

#define treasureSize   (vector3D){0.5, 0.5, 0.25}

A jutalom mérete.

Függvények dokumentációja

◆ createMap()

void createMap ( )

Létrehoz egy tömböt a térképnek.

◆ detectCollision()

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.

◆ freeColorMap()

void freeColorMap ( )

Felszabadítja a színek tömbjét.

◆ freeMap()

void freeMap ( )

Felszabadítja a térkép tömbjét.

◆ generateColorMap()

void generateColorMap ( )

Véletlenszerűen létrehozza a kockák palettáját, egy oszlopon belül minden kocka egyszínű.

◆ generateMap()

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.

Paraméterek
sebességvektorplayer 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.

◆ getBlockRenderObject()

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.

Paraméterek
koordx
koord*y
Visszatérési érték
test oszlop Pályakockákat és jutalmakat is rajzol.

◆ getHeightAtX()

int getHeightAtX ( int  x)

Megmondja egy adott x-hez milyen magas földszint tartozik.

◆ getMap()

block** getMap ( )

A pályát adja vissza.

◆ getMapSize()

intVector2D getMapSize ( )

A pálya méretét adja vissza.

◆ isBoxOverlappingBox()

bool isBoxOverlappingBox ( vector2D  box1Position,
vector2D  box1Size,
vector2D  box2Position,
vector2D  box2Size 
)

Megmondja, hogy két négyzet fedésben van-e.

◆ isInBlockPerpendicular()

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.

◆ isInBlockSideways()

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.

◆ isPointWithinBox()

bool isPointWithinBox ( vector2D  point,
vector2D  boxPosition,
vector2D  boxSize 
)

Megmondja, hogy egy pont benne van-e egy négyzetben.

◆ isWithinTheMap()

bool isWithinTheMap ( vector2D  point,
vector2D  size 
)

Megmondja, hogy egy pont a pályán belül van-e.

◆ setMapSize()

void setMapSize ( int  x,
int  y 
)

A pálya méretét lehet vele beállítani.

Változók dokumentációja

◆ colorMap

colors* colorMap = NULL

A színeket tartalmazó 1 dimenziós tömb. (minden oszlop egyszínű)

◆ map

block** map = NULL

A pályát tartalmazó 2 dimenziós tömb.

◆ mapSize

intVector2D mapSize

A pálya mérete [m].