Saludos Makeros, estaba modificando un antiguo proyecto Maze, y me preguntaba como podia crear un objeto en una posicion libre

Mi personaje y los enemigos se mueven verficando una posicion libre de 32×32 en la grilla, se gestionar los movimientos en la grilla y crear objetos aleatorios pero lo que nose es como crear aleatoriamente algo en la grilla

Necesito que mi objeto verifique todos los espacios de 32×32 en la grilla y ver si esta libre de otro objeto solido o si tampoco hay un personaje inteligente en ella (incluyendo a mi personaje), y que de paso la cree en cualquier grilla

Casi nunca he trabajado con grillas, a veces solo las uso para movimientos y lo demas me encargo manualmente  :-[

Lo que pensé al instante es que cuando se cree el objeto aleatoriamente en la pantalla siempre tenga un codigo step que verifique si tiene espacio libre, evitando que se genere en zonas solidas.

Puedes elegir un numero aleatorio en cada eje (x,y)  entre 1 y 32. Si la casilla resulta ocupada vuelve a repetir hasta que encuentre una casilla libre (puedes usar un ciclo while).
Crea 2 variables que guarden esos numeros y usalas para crear la instancia.

Lo tipico es usar
[gml]
while(!place_empty(x, y))
{
  x = irandom(room_width);
  y = irandom(room_height);
}
[/gml]
Pero eso solo me dara una posicion en cualquier lugar libre y lo que yo necesito es una posicion de 32×32 pixeles, cuando dijiste que lo hiciera buscando un espacio entre 1 y 32, como sugeririas que lo hiciera y de que forma deberia usar esos valores almacenados  ???

La verdad tenia la idea de crear objetos de grilla y almacenar sus puntos de anclajes en una lista pero eso tardaria, en especial la parte de añadir los objetos en cada parte de las rooms

Problema resuelto, acabo de encontrar una buena forma de usar posiciones aleatorias
[gml]
/// Event Create
var px, py;
px = 0;
py = 0;
// Almacenar posiciones x
repeat(room_width/32) //Se repetira segun las casillas horizontales del room
{
  xpos[px] = px*32;
  if (px != room_width/32) px += 1;
}
// Almacenar posiciones y
repeat(room_height/32) //Se repetira segun las casillas verticales del room
{
  ypos[py] = py*32;
  if (py != room_height/32) py += 1;
}
[/gml]
Y para cuando vaya a crear una instancia aleatoria, lo hago con una alarma
[gml]
/// Alarma 0
var rx, ry;
rx = irandom(room_width/32);
ry = irandom(room_height/32);
bonus = instance_create(xpos[rx], ypos[ry], obj_bonus)

// Ajustar bonus a una posicion libre
with(bonus) {
  while(!place_empty(x, y))
  {
    x = other.xpos[irandom(room_width/32)]
    y = other.ypos[irandom(room_height/32)]
  }
}
[/gml]

Una forma más fácil sería solo hacer esto:
[gml]
/// Evento alarm
bonus = instance_create(0, 0, obj_bonus)
with(bonus) {
    while(!place_empty(x, y))
        x = irandom(room_width /32)*32;
        y = irandom(room_height/32)*32;
    }
}
[/gml]
Así te ahorras el uso de esos arreglos xpos y ypos.
alaberga regué el café.

BA:STFW&RTFM

La verdad que si lo habia considerado y tambien hay que poner eso en el instance_create para hacerlo aleatorio, igual gracias por la sugerencia