elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Avances][¿Qué mas agrego?] DEZCIAN LIB2D - Simple motor de videojuegos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Avances][¿Qué mas agrego?] DEZCIAN LIB2D - Simple motor de videojuegos  (Leído 1,424 veces)
Dezcian

Desconectado Desconectado

Mensajes: 9



Ver Perfil WWW
[Avances][¿Qué mas agrego?] DEZCIAN LIB2D - Simple motor de videojuegos
« en: 1 Enero 2015, 17:14 pm »

PUBLICALO EN ELHACKER.NET MOSTRANDO AVANCES, NO HACIENDO SPAM.
Código
  1.  
  2. /*   ________
  3.  *  /\    _  \_
  4.  *  \ \  \  \  \  _______  ________  ________  ________   ________   ________
  5.  *   \ \  \  \  \/\   ___\/\__     \/\   ____\/\__    _\ /\   __  \ /\   __  \
  6.  *    \ \  \ _\  \ \   ___\/_/    /_\ \  \____\/__\   \__\ \  \_\  \\ \  \ \  \
  7.  *     \ \_______\\ \______\/\_______\ \_______\/\_______\\ \__\ \__\\ \__\ \__\
  8.  *      \/_______/ \/______/\/_______/\/_______/\/_______/ \/__/\/__/ \/__/\/__/
  9.  *                                                    DEZCIAN LIB2D - GAME MAKER
  10.  *
  11.  *      Mini-libreria DEZCIAN 2D, funciones y utilidades complementarias para el
  12.  *      desarrollo de videojuegos en 2D. Creado como proyecto personal, no inten
  13.  *      ta competir contra motores de fisica y/o de videojuegos, simplemente son
  14.  *      elementos necesario que voy ocupando con el tiempo y comparto por la red
  15.  *      como agradecimiento. Ya que gracias a la misma han sido posibles algunos
  16.  *      proyectos personales (incluyendo este).
  17.  *
  18.  *
  19.  */
  20.  

Esta es la primera revisión de mi pequeña librería (le queda muy grande el nombre), la cual actualmente incluye elementos muy básicos que he necesitado en el desarrollo de videojuegos. Cabe mencionar que no es una librería gráfica ni mucho menos y que utiliza sólo funciones propias de C++ nativo, por lo que su portabilidad es del 101%, por lo que se puede usar en cualquier sistema y con cualquier método gráfico que nos guste.

Aún es muy simple, pero con el paso del tiempo y lo que valla necesitando pienso agregar más utilidades. Seguiré subiendo avances muy seguido en este mismo post, no sé si este permitido en este foro, pero creo que sí, de cualquier manera, si no lo es, favor de hacérmelo saber .


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DIRECCIONES DE MOVIMIENTO PREESTABLECIDAS

No hay mucho que decir en esta parte, simplemente la escribí con el fin de no tener que hacerlo en cada nuevo proyecto, y tener un pequeño "estándar". Son simples definiciones de enteros que corresponden a la hora que marcarían las manecillas del reloj en esa dirección.

DIRECTION_UP
DIRECTION_DOWN
DIRECTION_LEFT
DIRECTION_RIGHT



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

EL OBJETO ROOM

NEW_OBJECT_ROOM(int LONGX, int LONGY)
Como en la mayoría de videojuegos. Corresponde a un mundo o mapa. Se declara escribiendo NEW_OBJECT_ROOM seguido de paréntesis y las dimensiones del mundo, posteriormente un espacio y el nombre del objeto.

Sus propiedades internas son las siguientes.

void SET_LONG_OBJECT(int LONG_OBJECT)
Establece el tamaño de los objetos estáticos del mundo, se usa principalmente para detectar de manera  correcta colisiones estáticas y útiles al momento de usar Allegro, SDL, etc.

void CLEAN_FULL()
No queda mucho que decir en esta parte, simplemente limpia todo el mundo, es decir, se borran todos los objetos estáticos.

void NEW_OBJECT_STATIC(int COORDX, int COORDY, char OBJECT_ID)
Su única función es situar algún objeto estático en el mundo, el OBJECT_ID es un carácter, por lo que va entre comillas simples.

int RET_LONGX()
Obtiene la longitud horizontal del mundo.

int RET_LONGY()
Obtiene la longitud vertical del mundo.

char RET_OBJECT(int COORDX, int COORDY)
Obtiene el objeto situado en las coordenadas dadas.

int RET_LONG_OBJECT()
Obtiene la longitud de cada objeto.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

EL OBJETO DINAMICO

NEW_OBJECT_DYNAMIC(int COORDX, int COORDY, int LONGX, int LONGY)
El propósito de este tipo de objeto es crear algún personaje vivo (por decirlo de alguna manera), puede desplazarse, caer, morir, etc.

void CHANGE_VELOCITY(int NEW_VELOCITY)
Cambia la velocidad constante de movimiento.

bool DETECT_COLISION_DINAMIC(NEW_OBJECT_DINAMIC OBJECT)
Detecta colisión con otro objeto dinámico. Tipo bounding box.

void MOVE(int DIRECTION)
Desplaza de acuerdo a velocidad constante, y además, a la dirección que indiquemos con las direcciones de movimiento preestablecidas y gira el objeto a esa dirección.

void GRAVITY_RUN()
Se usa simplemente para aplicar la función de gravedad en el objeto.

void CLEAN_GRAVITY_VELOCITY()
Después de usar GRAVITY_RUN(), se llama esta función para perder la velocidad.

void SET_LIVES(int LIVES)
Se establece el número de vidas.

void UP_LIVES(int LIVES)
Se aumentan las vidas que queramos.

void DOWN_LIVES(int LIVES)
Se disminuyen las vidas que queramos.

int RET_COORDX()
Obtiene posición o coordenada horizontal.

int RET_COORDY()
Obtiene posición o coordenada vertical.

int RET_DIRECTION()
Obtiene dirección actual.

int RET_LIVES()
Obtiene vidas restantes.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

EL OBJETO CAMARA

NEW_OBJECT_CAMERA
Complemento simple pero muy útil si es que deseamos mostrar solo un pedazo de mapa.

void FOLLOW_OBJECT_DINAMIC(NEW_OBJECT_DINAMIC OBJECT, NEW_OBJECT_ROOM ROOM, int WINDOW_LONGX, int WINDOW_LONGY)


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Por el momento es lo único que agrega ya que es lo único que se me ha ocurrido agregar, como ya dije, con el paso del tiempo y conforme necesite nuevas cosas, las iré agregando, de cualquier manera todo tipo de ayuda, consejo, sugerencia es totalmente bienvenido.



Aun no comento el código, para cualquier duda esta el primer post.
Código
  1. #ifndef DEZCIAN_LIB2D_H
  2. #define DEZCIAN_LIB2D_H
  3.  
  4.  
  5. #define DIRECTION_UP   12
  6. #define DIRECTION_DOWN  6
  7. #define DIRECTION_LEFT  9
  8. #define DIRECTION_RIGHT 3
  9.  
  10.  
  11. class NEW_OBJECT_ROOM
  12. {
  13. private:
  14.    int longX, longY, longObject;
  15.    char **universe;
  16.  
  17. public:
  18.  
  19.    NEW_OBJECT_ROOM(int LONGX, int LONGY)
  20.    {
  21.        longX = LONGX;
  22.        longY = LONGY;
  23.  
  24.        universe = new char *[longX];
  25.        for (int i = 0; i < longX; i++)
  26.            universe[i] = new char [longY];
  27.  
  28.        for (int y = 0; y < longY; y++)
  29.        {
  30.            for (int x = 0; x < longX; x++)
  31.                universe[x][y] = ' ';
  32.        }
  33.    }
  34.  
  35.    void SET_LONG_OBJECT(int LONG_OBJECT)
  36.    {
  37.        longObject = LONG_OBJECT;
  38.    }
  39.  
  40.    void CLEAN_FULL()
  41.    {
  42.        for (int y = 0; y < longY; y++)
  43.        {
  44.            for (int x = 0; x < longX; x++)
  45.                universe[x][y] = ' ';
  46.        }
  47.    }
  48.  
  49.    void NEW_OBJECT_STATIC(int COORDX, int COORDY, char OBJECT_ID)
  50.    {
  51.        universe[COORDX][COORDY] = OBJECT_ID;
  52.    }
  53.  
  54.    int RET_LONGX()
  55.    {
  56.        return longX;
  57.    }
  58.  
  59.    int RET_LONGY()
  60.    {
  61.        return longY;
  62.    }
  63.  
  64.    char RET_OBJECT(int COORDX, int COORDY)
  65.    {
  66.        return universe[COORDX][COORDY];
  67.    }
  68.  
  69.    int RET_LONG_OBJECT()
  70.    {
  71.        return longObject;
  72.    }
  73. };
  74.  
  75.  
  76. class NEW_OBJECT_DYNAMIC
  77. {
  78. private:
  79. int coordX, coordY, longX, longY, lives, velocity, velocityGravity, direction;
  80.  
  81. public:
  82. NEW_OBJECT_DYNAMIC(int COORDX, int COORDY, int LONGX, int LONGY)
  83. {
  84. coordX = COORDX;
  85. coordY = COORDY;
  86. longX = LONGX;
  87. longY = LONGY;
  88. velocity = 2;
  89. velocityGravity = velocity;
  90. direction = DIRECTION_DOWN;
  91. }
  92.  
  93. void CHANGE_VELOCITY(int NEW_VELOCITY)
  94. {
  95.    velocity = NEW_VELOCITY;
  96. }
  97.  
  98. bool DETECT_COLISION_DYNAMIC(NEW_OBJECT_DINAMIC OBJECT)
  99. {
  100.    if ((coordX > OBJECT.coordX + OBJECT.longX - 1) ||
  101.            (coordY > OBJECT.coordY + OBJECT.longY - 1) ||
  102.            (OBJECT.coordX > coordX + longX - 1) ||
  103.            (OBJECT.coordY > coordY + longY - 1))
  104.            return false;
  105.        return true;
  106. }
  107.  
  108. void MOVE(int DIRECTION)
  109. {
  110.    if (DIRECTION == 12)
  111.            coordY -= velocity;
  112.        else if (DIRECTION == 3)
  113.            coordX += velocity;
  114.        else if (DIRECTION == 6)
  115.            coordY += velocity;
  116.        else if (DIRECTION == 9)
  117.            coordX -= velocity;
  118.        direction = DIRECTION;
  119. }
  120.  
  121. void GRAVITY_RUN()
  122. {
  123.    coordY += velocityGravity;
  124.    velocityGravity += velocityGravity;
  125. }
  126.  
  127. void CLEAN_GRAVITY_VELOCITY()
  128. {
  129.    velocityGravity = velocity;
  130. }
  131.  
  132. void SET_LIVES(int LIVES)
  133. {
  134.    lives = LIVES;
  135. }
  136.  
  137. void UP_LIVES(int LIVES)
  138. {
  139.    lives += LIVES;
  140. }
  141.  
  142. void DOWN_LIVES(int LIVES)
  143. {
  144.    lives -= LIVES;
  145. }
  146.  
  147. int RET_COORDX()
  148. {
  149.    return coordX;
  150. }
  151.  
  152. int RET_COORDY()
  153. {
  154.    return coordY;
  155. }
  156.  
  157. int RET_DIRECTION()
  158. {
  159.    return direction;
  160. }
  161.  
  162. int RET_LIVES()
  163. {
  164.    return lives;
  165. }
  166. };
  167.  
  168.  
  169. class NEW_OBJECT_CAMERA
  170. {
  171. private:
  172.    int coordX, coordY;
  173.  
  174. public:
  175.    void FOLLOW_OBJECT_DINAMIC(NEW_OBJECT_DINAMIC OBJECT, NEW_OBJECT_ROOM ROOM, int WINDOW_LONGX, int WINDOW_LONGY)
  176.    {
  177.        coordX = OBJECT.RET_COORDX() - WINDOW_LONGX / 2;
  178.        coordY = OBJECT.RET_COORDY() - WINDOW_LONGY / 2;
  179.        if (coordX < 0) coordX = 0;
  180.        if (coordY < 0) coordY = 0;
  181.        if (coordX > (ROOM.RET_LONGX() * ROOM.RET_LONG_OBJECT()) - WINDOW_LONGX) coordX = (ROOM.RET_LONGX() * ROOM.RET_LONG_OBJECT()) - WINDOW_LONGX;
  182.        if (coordY > (ROOM.RET_LONGY() * ROOM.RET_LONG_OBJECT()) - WINDOW_LONGX) coordY = (ROOM.RET_LONGY() * ROOM.RET_LONG_OBJECT()) - WINDOW_LONGY;
  183.    }
  184. };
  185.  
  186.  
  187. #endif
  188.  
  189.  
  190.  


« Última modificación: 1 Enero 2015, 21:55 pm por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como le Agrego subtítulos a un DVD?
Multimedia
UTU 1 1,606 Último mensaje 31 Mayo 2006, 20:16 pm
por Mance
AVANCES EN DICCIONARIOS WPA/2
Dudas Generales
flux21 1 5,565 Último mensaje 4 Diciembre 2011, 11:03 am
por @NUBI$
Avances de mi proyecto en C
Programación General
armizh 7 3,743 Último mensaje 19 Enero 2012, 21:38 pm
por armizh
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines