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.

#1 Diciembre 20, 2015, 02:30:33 PM Ultima modificación: Diciembre 20, 2015, 02:38:26 PM por king195
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)