Duda novato variables array y estructura - visualización de información de forma consistente

Estoy probando a hacer un juego en el que tienes que limpiar los archivos “peligrosos” de un ordenador que cuya información está siendo automáticamente salvaguardada en la nube.

Las instancias del objeto ICONO se generan en la parte superior y van cayendo a la zona de “backup”. El jugador debe clicar el objeto ICONO y leer a la derecha la información del mismo (nombre, tipo, tamaño de archivo) y decidir si son archivos salvables o debe eliminarlos.

Mi problema es que soy demasiado novato con las variables y no sé cómo hacer que cuando se genere una instancia del objeto ICONO este guarde la información correcta y única. Ahora mismo, cuando se genera otra instancia del objeto, la información del ICONO que estoy clicando se modifica, y quiero que cada instancia mantenga su identidad hasta que sea salvada o eliminada.

Os dejo capturas de pantalla mientras sigo investigando, porque mis conocimientos sobre variables complejas como las de estructura y array son para mí todavía demasiado liosas. Agradezco ayuda al respecto… No hagáis mucho caso a la codificación, está muy incompleto el loop de juego porque me topé con este problema…

bueno , he visto el código proporcionado en la captura y aparte de incoherencias y errores menores veo que el problema principal está en cómo estableces las variables de ICON , el error principal esta en esta linea principalmente : Eliminar el hijo RandomID de la variable de estructura global, * PERO , POR QUE? Cada vez que generas un ICON, eliges un RandomID y copias sus datos.

  • Pero inmediatamente después borras ese hijo del array global.
  • Resultado: el siguiente ICON ya no puede acceder a ese mismo índice, y además el array se va desajustando.
  • Peor aún: si otro ICON ya creado intenta mostrar sus datos, puede que el índice que tenía ya no exista o apunte a otra cosa.
  • Eso explica por qué al hacer clic en un ICON los datos cambian o se corrompen. SOLUCIÓN :

quita “Eliminar el hijo RandomID de la variable de estructura @Filelnventory

,

quita “Cambiar la variable R IDenPantalla: establecer a ICON.VariableString(FileName)”

, y para establecer el valor de algo basado en la variable de un objeto usa : ( por ejemplo )

cambiar el texto de SIZE establecer a ICON.FileSize

( te dara años extra de salud mental a ti y cualquiera que lea tu código) :slight_smile:

Jajaja, menudo repaso, y bien merecido que me lo tengo XDD. La verdad es que ese código fue hecho a correr y cada vez que probaba cosas nuevas creo que lo fui ensuciando aún más…

La idea inical era generar una “bolsa” de archivos distintos y quería que esa “bolsa” se fuera vaciando cada vez que uno de los archivos aparecía en pantalla. En mi mente sonaba sencillo…

Pero lo dicho, soy aún demasiado inexperto para este nivel de complejidad de código en variables (a mí me lo parece, al menos, jeje). Probaré las soluciones que me proporcionas e intentaré aprender del proceso, porque no te haces una idea de lo que me cuesta entender la lógica a veces (que sí, que soy muy novato, ^^!).

Y muchísimas muchísimas gracias :slight_smile:

lo que quieres es básicamente sacar uno a uno los hijos de una variable (arreglo o array o “bolsa”) en un orden aleatorio hasta que no quede nada que no hayas escogido ( vaciar la bolsa) y repetir el proceso ( posiblemente en otro nivel , con mas rango ( mas elementos) para seleccionar o algo así)?

Sí, correcto. La idea es de un juego relativamente pequeño, ni siquiera que tenga niveles, sino uno de dificultad incremental hasta fallo e intentar conseguir máxima puntuación. La mecánica es ir sacando hijos del array en orden aleatorio hasta que que no quede ninguno y ahí reiniciar el proceso (rellenar “la bolsa”). O producirse el cambio de nivel en caso de que al final me anime a hacer distintos niveles (que tampoco es imprescindible; con este tipo de juegos intento aprender la lógica de las variables y el código, que es la parte que más me cuesta -y por eso escogí GDevelop como motor, jeje-).



Esto es más o menos se asemeja a lo que buscas , lo que hace es basicamente:

1 seleccionar un índice random (en el rango 0 a total disponibles que es = al total de índices de la variable ( cantidad de hijos) menos 1 ( porque esta 0 indexado ( comienza a contar desde 0 por eso el ultimo hijo es n-1 si n es el total de hijos)))

2 pasar esa indice random a una copia ( para no perderlo)

3 eliminar el hijo ya escogido

opcionalmente puedes copiar de vuelta los hijos si se acaban , para saber si ya se vacio usa la condicion : el numero de hijos de la variable ( nombre de la variable que usas) > 0 .

SI TE PARECE DEMACIADO COMPLICADO:

alternativamente puedes guardar el contenido de cada elemento de la bolsa dentro de un sprite invisible , asi seleccionas uno random que no sea seleccionado ( por ejemplo si ya escogiste uno lo eliminas o lo ocultas , cambias una variable dentro del para que no sea seleccionado ), por ejemplo:
( como condición)
la variable del sprite archivos : sacado = falso
escoger instancia random del sprite archivos;
(como acción)
cambiar el valor de la variable sacado del sprite archivos a verdadero;( si lo eliminas recuerda hacerlo una vez termines de usarlo )
copiar valores de la variable datos del sprite archivos a la variable global datos ;
luego copia desde la variable datos ( global) a su texto correspondiente. si tienes dudas dejamelo saber :slight_smile: