Hola a todos,
En el capitulo 2 de este tutorial os introduje el tema de los defines.
Si habeís practicado habreis decubierto que los defines son muy poderosos de cara la mantenibilidad del código ya que nos permite definir valores o comportamientos que luego podremos cambiar dejando el código idéntico a como lo teniamos.
En los videojuegos los defines se usan mucho para los estados del juego o de los personajes.
Imaginemos que estamos en el proceso de desarrollo de un RPG en que los personajes pueden tener los siguientes estados:
#define STAND 0
#define ATTACK 1
#define DEATH 2
Si con el tiempo vamos incluyendo nuevas funcionalidades y cambiando las existentes es muy normal que esta lista de defines se alarge hasta el infinito y que estemos constantemente reordenando números cosa que al final genera errores humanos en el código.
Solución??? Enums!!
Los enums los podemos entender como listas de defines autonumerados, es decir que si tenemos lo siguiente (extraido de LP Engine)
// animation list
typedef enum {
STAND,
RUN,
ATTACK,
PAIN_A,
PAIN_B,
PAIN_C,
JUMP,
FLIP,
SALUTE,
FALLBACK,
WAVE,
ANIM_POINT,
CROUCH_STAND,
CROUCH_WALK,
CROUCH_ATTACK,
CROUCH_PAIN,
CROUCH_DEATH,
DEATH_FALLBACK,
DEATH_FALLFORWARD,
DEATH_FALLBACKSLOW,
BOOM,
MAX_ANIMATIONS
} animType_t;
STAND vale 0, RUN vale 1, ATTACK vale 2....
Particularidaes de los enums:
1. Los valores iniciales se pueden fijar:
enum {
STAND = 3,
RUN,
ATTACK,
PAIN_A,
PAIN_B,
PAIN_C,
JUMP,
FLIP,
SALUTE,
}
STAND vale 3, RUN vale 4, ATTACK vale 5,etc..
2. Los enums no son defines , así que con los ejemplos anteriores si hicieramos #ifdef STAND nunca entrariamos por esa condición del precompilador.
"Truco" para saltarse este problema del ifdef:
enum {
STAND,
#define STAND STAND
RUN,
#define RUN RUN
ATTACK,
#define ATTACK ATTACK
PAIN_A,
#define PAIN_A PAIN_A
PAIN_B,
#define PAIN_B PAIN_B
PAIN_C,
#define PAIN_C PAIN_C
JUMP,
#define JUMP JUMP
FLIP,
#define FLIP FLIP
SALUTE,
#define SALUTE SALUTE
}
De esta manera se consigue una lista autcompletada en la que además podemos aplicar #ifdef.
Espero que os haya servido para aprender y os haya gustado.
Para cualquier duda ya lo sabeís.
Nos vemos
0 comentarios :
Publicar un comentario