Hola, estoy en medio del desarrollo, y me ha surgido una duda, y no se como hacerlo ahora mismo. Me explico.
Tengo dos Padres O_PadreA y O_PadreE, que son todos los personajes del juego, Amigos Y enemigos. Todos tiene una variable Vel para determinar su velocidad y orden hacer cosas, el juego es por turnos.
La cosa es que quiero lo siguiente, crear una lista ordenada por esa Vel de todos los objetos de esos Padres, pero luego puede ser que durante el turno alguno adquiera velocidad o la baje. con ds_list solo puedo almacenar una variable, no??, con un array no se como ordenarlo.
Me podeis guiar un poco.
Gracias.
Yo uso Arrays también para mi juego, como este:
enemie[0,0] = "Pepe"; //nombre
enemie[0,1] = "Gran rey de reyes"; //descripcion
enemie[0,2] = 10; //vida
enemie[0,3] = 1; //nivel
enemie[0,4] = "Es calvo"; //pista
enemie[0,5] = spr_enemie1; //sprite_imagen
enemie[0,6] = 3; //damage_base
enemie[0,7] = 0.7; //speed_damage
Lo que hago es tener un Script base que funcione como una base de datos con todos los enemigos, items etc... y a partir de eso esa info se la paso al objeto enemigo
scr_basedatos_enemigo();//llamo a la base de datos
randomize();
enemigo = irandom(num_enemigos); //hago un random para seleccionar a un enemigo aleatoriamente que va a estar ahí entre el total
name = enemie[enemigo,0]; //le añado a name el nombre del enemigo aleatorio que haya salido
velocidad = enemie[enemigo,7];//le añado la velocidad que quiera
Que pasa si quiero que el Enemigo aumente la velocidad? lo cambio directamente con una variable local
if(enemigo == esta_enfadado){
velocidad += 12;
}
Los personajes en la base de datos se añaden con el primer numero es decir, antes tenia "enemie[0,0]", si quiero añadir otro pongo "enemie[1,0]"
Lo más importante que debes entender de los Array es que el primer numero indica el enemigo por ejemplo y el segundo numero indica una caracteristica que tendrá ese enemigo, va todo ordenado pero la interpretación que le des tu a cada numerito es abstracto, es tuya esa interpretación, yo le dije que la posición [0,0] del enemigo fuera el nombre por que queria que lo fuese, pero podria haber sido cualquier otro numero como [0,9]
Si quieres ordenar una matriz en base a los valores de una columna, lo más sencillo es usar grids: crea un grid con ds_grid_create, asígnale valores con ds_grid_set y finalmente ordénalo en base a los valores de una columna usando ds_grid_sort (esta última una poderosa función).
Gracias King195, pero no es eso exactamente. Es algo tipo Heroes of Might and Magic, que según el valor de una estadística, vel, determina cuando actua, antes o después de otra.
Guacusio, algo de eso estoy viendo, voy a ver como termino de implementarlo.
Gracias.
Bueno, al final hice esto, y mas o menos creo que vale. Ahora abro otro hilo con una duda con las view :'( :'(
/// Creamos el orden Accion
///Creamos un grid con el orden de las unidades
//if ds_exists(ControlGrid.GridOrdenAccion,ds_type_grid) {ds_grid_destroy(GridOrdenAccion)}
a= instance_number(O_PadreA)
e= instance_number(O_PadreE)
n = a+e
//cuando haya mas tipos, los ponemos
GridOrdenAccion= ds_grid_create(2,n)
// Añadimos los valores
for (i2 = 0; i2< a; i2=+1)
{p = instance_find(O_PadreA,i)
ds_grid_add(GridOrdenAccion,0,i2,p)
ds_grid_add(GridOrdenAccion,1,i2,p.Vel)
}
for (i2 = 0; i2< e; i2=+1)
{p = instance_find(O_PadreE,i)
ds_grid_add(GridOrdenAccion,0,i2,p)
ds_grid_add(GridOrdenAccion,1,i2,p.Vel)
}
//Ordenamos
ds_grid_sort(GridOrdenAccion,1,false)
Criatura = ds_grid_get(GridOrdenAccion,0,0)