Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: DaiGoN en Junio 13, 2014, 08:42:37 AM

Título: Duda sobre id aleatorio en el objeto
Publicado por: DaiGoN en Junio 13, 2014, 08:42:37 AM
Hola!
Estoy haciendo un juego de parejas, pero no se como adjuntar a cada carta un identificador aleatorio en cada partida.

La idea es tener una lista con las parejas de cartas

carta1
carta1
carta2
carta2
carta3
carta3

Usar el aleatorio para mezclar esta lista y asignarle este valor a cada instancia de carta que tenga en el room

¿Como puedo hacer esto? Había pensado en el sprite, pero como la carta tiene que estar tapada (sprite de carta al reves) no me sirve...

A las malas podría montar una lista con los aleatorios guardados y consultarla con cada click en una carta, pero no me termina de convencer...

Un saludo!
Título: Re:Duda sobre id aleatorio en el objeto
Publicado por: penumbra en Junio 13, 2014, 08:48:32 AM
No entiendo por qué quieres asignarle un identificador aleatorio a cada carta. Significa que por ejemplo, si hay una carta perro, ¿una vez su identificador puede ser 100 y otra vez puede ser 80? Creo que lo mejor sería que cada carta tuviera su identificador único, pero constante...
Título: Re:Duda sobre id aleatorio en el objeto
Publicado por: DaiGoN en Junio 13, 2014, 10:31:00 AM
No sería aletorio (disculpa si no me expliqué bien)

El tema es que desde una sola room, quiero crear partidas diferentes cada vez que entre el jugador, es decir, que la foto del cerdo no esté siempre en la carta 1, sino que pueda estar en cualquiera de ellas.

Cada carta tendrá su identificador único que será  el nombre de la instancia, pero dentro de cada instancia quiero guardar el valor "foto del cerdo", "foto de la cabra", etc.
Título: Re:Duda sobre id aleatorio en el objeto
Publicado por: empardopo en Junio 13, 2014, 11:43:53 AM
Yo creo que las mismas cartas tendrían que tener el mismo identificador y lo que tendrías que hacer es una función para barajarlas y así cada vez aparecerán en distinto orden o posición.

Cartas = [1,1,2,2,3,3]

Tendrías un total de 3 parejas siendo 6 cartas en total. Tu función lo que haría es devolverte otro Array con los mismo elementos pero cambiados de orden, por ejemplo:
barajados = [1,3,2,1,2,3] (por poner un ejemplo).

No me hagas demasiado caso, es por donde yo empezaría y lo mismo estoy equivocado.

Saludos

Nota: Por cierto, buscando he encontrado este link (http://www.comunidadgm.org/preguntas-y-respuestas/manipular-sprites-en-arrays/) que lo mismo puede darte una idea para hacer lo que te he comentado antes.
Título: Re:Duda sobre id aleatorio en el objeto
Publicado por: DaiGoN en Junio 14, 2014, 09:03:34 PM
Hola!
Gracias por la info, pero sigo un poco perdido...

He hecho un aleatorio con las 2 listas, el problema es que me he quedado pillado a la hora de probarlo porque no encuentro como invocar a la instancia en la que hago click para que ella sola se de la vuelta.
Igualmente, no tengo claro que el aleatorio funcione...

Os pongo el codigo por si veis algo mal:

La lista de cartas tiene... carta1, carta2, carta3, etc
La lista de sprites tiene... imagen1, imagen1, imagen2, imagen2, etc

listaCartas = global.listaCartas;
listaSprites = global.listaSprites;
cartasRestantes = 0;
spritesRestantes = 0;
idSpriteElegido = 0;
spriteElegido = "";

//Montamos la nueva lista con los sprites mezclados
for (i=0; i < ds_list_size(listaCartas); i+=1){
    //Actualizamos las cartas y sprites restantes
    cartasRestantes = ds_list_size(listaCartas);
    spritesRestantes = ds_list_size(listaSprites);
   
    //Seleccionamos un sprite para la siguiente carta   
    idSpriteElegido = irandom(spritesRestantes);
   
    //Asignamos el sprite elegido
    spriteElegido = ds_list_find_value(listaSprites, spriteElegido);
    ds_list_add(listaSpritesBarajados,spriteElegido);   
   
    //Eliminamos el sprite y la carta para que no vuelvan a asignarse
    ds_list_delete(listaSprites,spriteElegido);
    ds_list_delete(listaCartas,i);
}


En cualquier caso, si he llamado a mis instancias del objeto objCarta: carta1, carta2, carta3.... como hago referencia al pulsado??

Un saludo!
Título: Re:Duda sobre id aleatorio en el objeto
Publicado por: penumbra en Junio 14, 2014, 09:18:50 PM
¿A qué te refieres con llamar a las instancias del objeto objCarta? ¿Llamarlas de dónde o para qué?
¿Qué quiere decir "hacer referencia al pulsado"?


instance_position(mouse_x, mouse_y, obj_carta) en un evento mouse left button Devolvería el ID de la instancia carta, y eso serviría para seleccionarla, voltearla, etc.

El código de las ds_lists me parece que está bien
Título: Re:Duda sobre id aleatorio en el objeto
Publicado por: DaiGoN en Junio 14, 2014, 10:16:08 PM
Queria llamarlas desde codigo gml al pulsar click, pero al final creo que me convence más lo de crear objetos independientes porque he leido que el id se pierde al recargar la pantalla o algo así (lo siento pero no me acabo de enterar bien de como funcionan las instancias en el game maker)

Al hacer objetos, puedo meterles un script a ejecutar en el leftButton  que me cambia la carta por la imágen de la lista
Parece que funciona, espero poder pulirlo