Buenas compis,

estoy googleando y buscando por el foro pero no he encontrado solución a lo que busco.

Lo que intento hacer sería lo siguiente:
Tengo un array llamado inicial por ejemplo de 10 posiciones con 10 números (imaginemos del 1 al 10)
por ejemplo, inicial = [1,2,3,4,5,6,7,8,9,10]
y quiero que esos diez números de forma aleatoria pasen a un array llamado final y se mezclen los números de forma aleatoria
por ejemplo final= [10,7,6,8,1,9,4,2,1,3,5] por decir algo...

¿Os suena que haya ya algo hecho que haga esto? Sería para Game Maker Studio  :GMS:

Muchas gracias por anticipado

Hola empardopo

Puedes pasar el array a una ds_list y usar ds_list_shuffle.

O si quieres mantener el uso de arrays, puedes intercambiar las posiciones aleatoriamente de la siguiente forma:
var i,rand,aux;
for (i=0; i<array_length_1d(inicial); i+=1) { //elige cada dato del array uno por uno
rand = irandom(array_length_1d(inicial)-1) //por cada dato del array, elige una nueva posición al azar.
aux = inicial[i] //Guarda el valor original
inicial[i] = inicial[rand] //Estas dos líneas intercambian las posiciones entre la leida y la aleatoria
inicial[rand] = aux
}


Si quieres crear un nuevo array llamado "final", te recomiendo utilizar un for loop para copiar el array inicial a uno llamado final y luego cambiar aleatoriamente las posiciones del array final.

Saludos

Compi, muchas gracias...

He trasteado (no conocía bien el tema de las ds_list y he aprendido algo, jeje) con ambas y en principio me ha funcionado...
Muchísimas gracias.

Tengo una duda... En algunos lenguajes creo recordar que podía hacer un array de elementos "compuestos" es decir que tenían varios datos, algo así como:
inicial[1].x = 200;
inicial[1].y = 200;
inicial[1].dato = 5;


Por ejemplo, me serviría para asignar las coordenadas 200,200 al valor 5 (es sólo un ejemplo).

No sé si se entiende lo que querría hacer o no me explico bien. Es posible hacer esto en gamemaker?

Muchas gracias


Hola empardopo

A mi entender no se puede hacer así, pero no significa que no puedas conseguir el mismo efecto. Lo que puedes hacer es crear un array de 2 dimensiones (piensalo como una cuadricula Excel)
inicial[0,0]=200
inicial[0,1]=200
inicial[0,2]=5


Saludos

Cita de: BssString en Agosto 20, 2018, 06:01:04 PM
Hola empardopo

A mi entender no se puede hacer así, pero no significa que no puedas conseguir el mismo efecto. Lo que puedes hacer es crear un array de 2 dimensiones (piensalo como una cuadricula Excel)
inicial[0,0]=200
inicial[0,1]=200
inicial[0,2]=5


Saludos

Ya me temía que no había forma, jeje.
Muchas gracias.