Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Ayuda con orden de una lista  (Leído 479 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado arcangelcaos

en: Diciembre 20, 2015, 12:38:16 pm
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.

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado king195

Respuesta #1 en: Diciembre 20, 2015, 02:30:33 pm
Yo uso Arrays también para mi juego, como este:

Código: [Seleccionar]
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

Código: [Seleccionar]

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


Código: [Seleccionar]
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]



« última modificación: Diciembre 20, 2015, 02:38:26 pm por king195 »

 


Desconectado Guacusio

Respuesta #2 en: Diciembre 20, 2015, 02:57:55 pm
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).


 


Desconectado arcangelcaos

Respuesta #3 en: Diciembre 20, 2015, 05:05:29 pm
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.

 


Desconectado arcangelcaos

Respuesta #4 en: Diciembre 20, 2015, 06:56:39 pm
Bueno, al final hice esto, y mas o menos creo que vale. Ahora abro otro hilo con una duda con las view  :'( :'(

Código: [Seleccionar]
/// 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)