Noticias

¡Ayuda a la Comunidad GM, haz una donación!

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: Convertir arreglos unidimensionales a bidimensionales (y viceversa)  (Leído 2503 veces)

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

Desconectado NiuWeb

  • Sangheili Zealot.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2807
  • Mensajes: 1.683
  • Agradecido: 133 veces
  • Sexo: Masculino
  • Díselo al Covenant dijo el Jeilo verde.
    • Ver Perfil
Bueno, segundo script que resubiré al foro.
Autor: NiuWeb.
Versión de GM utilizada: Studio 1.4.
Descripción: Scripts que permiten convertir un arreglo unidimensional a uno bidimensional con el número de columnas dado, o convertir un arreglo bidimensional a uno unidimensional.
Código
///array_1d_to_2d(array, width);
var array  = argument0;
var width  = argument1;
var length = array_length_1d(array);

var array2d;
var xn, yn;
for(var i = 0; i < length; i++)
{
    yn = floor(i/width);
    xn = i - yn*width;
    array2d[yn, xn] = array[i];
}
return array2d;
Argumentos:
array: El arreglo unidimensional original a convertir.
width: El número de columnas que tendrá el nuevo arreglo.

///array_2d_to_1d(array2d);
var array2d = argument0;
var height  = array_height_2d(array2d);
var array1d, a = 0;

for(var i = 0; i < height; i++)
{
    for(var j = 0; j < array_length_2d(array2d, i); j++)
    {
        array1d[a++] = array2d[i, j];
    }
}
return array1d;
Argumentos:
array: El arreglo bidimensional original a convertir.

Como siempre; dudas, inquietudes, quejas, reclamos, insultos o amenazas son bienvenidos, y si encuentran algún fallo en los códigos por favor hacérmelo saber.

-Sólo había una nave.
-¿Una? ¿Estás seguro?.
-Sí, la llamaban The Pillar Of Autumn.

BA:STFW&RTFM
 
Los siguientes usuarios dieron las gracias a este tema: dixon2010


No Tienes Permisos Para Dar Puntos
point 25 Puntos

Usuarios que puntuaron el tema » Johann (10 Pts) » dixon2010 (5 Pts) » Soujiro (10 Pts) 


Desconectado Johann

  • Las cosas como son!
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 666
  • Mensajes: 797
  • Agradecido: 101 veces
  • Sexo: Masculino
  • First Class Soldier... 10 años en CGM, 5 como mod
    • Ver Perfil
Respuesta #1 en: Noviembre 26, 2018, 09:55:00 pm
Si el arreglo unidimensional no tiene la cantidad de elementos exacta para crear un arreglo bidimensional completo, es decir, que la ultima fila no quede completa, ¿Como haría para recorrerlos con doble ciclo for y que al final no muera pq no hay mas elementos?

Ej: Supongamos que entra un array de 32 elementos y lo quiero como una matriz de 6*6.

Cita de: Fenris78
Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: Calio
Somos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.
 
Los siguientes usuarios dieron las gracias a este tema: NiuWeb


Desconectado NiuWeb

  • Sangheili Zealot.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2807
  • Mensajes: 1.683
  • Agradecido: 133 veces
  • Sexo: Masculino
  • Díselo al Covenant dijo el Jeilo verde.
    • Ver Perfil
Respuesta #2 en: Noviembre 27, 2018, 01:50:27 am
Si el arreglo unidimensional no tiene la cantidad de elementos exacta para crear un arreglo bidimensional completo, es decir, que la ultima fila no quede completa, ¿Como haría para recorrerlos con doble ciclo for y que al final no muera pq no hay mas elementos?

Ej: Supongamos que entra un array de 32 elementos y lo quiero como una matriz de 6*6.
Si quieres convertir un arreglo unidimensional a uno bidimensional usarías el primer script, y realmente no tendrías ningún problema en el caso que mencionas, puesto que el ciclo solo recorre los elementos del 1d y les asigna coordenadas 2d, así que si quedan faltando espacios simplemente se omiten, quedan "vacíos".

-Sólo había una nave.
-¿Una? ¿Estás seguro?.
-Sí, la llamaban The Pillar Of Autumn.

BA:STFW&RTFM
 
Los siguientes usuarios dieron las gracias a este tema: dixon2010