Noticias

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

* Sponsor

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: Como poner una puerta en una mazmorra aleatoria  (Leído 789 veces)

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

Desconectado OmarMakero

en: Enero 17, 2021, 07:33:42 pm
Muy buenas Comunidad GM  :), espero que esteis muy bien.

Ayer comencé con un proyecto llamado mazora, el cual trata de conseguir tesoros en mazmorras aleatorias. Ya llegue a desarrollar los scripts que hacen que se generen aleatoriamente. Pero luego pensé en agregar una puerta en la habitación final donde estará tambien la escalera para pasar al siguiente nivel. Y entonces llega mi pregunta. ¿Como hago que se genere un objeto (en este caso la puerta), en una habitación aleatoria solo una vez? les dejaré el proyecto por si necesitais ver a fondo el codigo (es muy largo). Espero que me podais ayudar  :-[


OmarMakero
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado OmarMakero

Respuesta #1 en: Enero 20, 2021, 02:31:56 pm
Por favor ayudadme, lo necesito

OmarMakero
 


Desconectado Void

Respuesta #2 en: Enero 21, 2021, 06:19:30 am
Ok, empezar por decir que esta no es la unica manera de hacerlo, y no es necesariamente la manera más eficiente de hacerlo, es simplemente la manera en que se me ocurrio para hacerlo sin hacer muchos cambios al código ya existente.

Primero, declara una variable en el objeto obj_bloque, la llamaremos Remplazable y la iniciaremos en 0.

Segundo, en el script de creacion de salas agregamos código que cambie el valor de Remplazable a 1 en los obj_bloques que forma parte de una sala

var Inst = instance_create(xcenter*32 + i*32, ycenter*32 + j*32, obj_bloque);
Inst.Remplazable = 1;
   
Tercero, creamos un nuevo script, llamado colocar_puerta, que correra justo despues de generar_laberinto, el script buscara al azar obj_bloques que tengan la variable Remplazable en 1, es decir que sean parte de una sala, y que tengan dos bloques a los costados linealmente, es decir que no sean una esquina. Cuando encuentre un bloque que cumpla ambas condiciones lo remplazara con un objeto obj_puerta.

do {
    var n = irandom(instance_number(obj_bloque));
    var Obj_id = instance_find(obj_bloque,n);
   
    with (Obj_id) {
        if Remplazable == 1 {
            var De,iz,Ar,Ab;
            De = position_meeting(x+32,y,obj_bloque);
            Iz = position_meeting(x-32,y,obj_bloque);
            Ar = position_meeting(x,y-32,obj_bloque);
            Ab = position_meeting(x,y+32,obj_bloque);
            if (De == 1 && Iz == 1 && Ar == 0 && Ab == 0) ||
               (De == 0 && Iz == 0 && Ar == 1 && Ab == 1){
               instance_create(x,y,obj_puerta);
               instance_destroy();
            }
            else {
                Remplazable = 0;
            }
        }
    }
}until instance_exists(obj_puerta);

 


Desconectado OmarMakero

Respuesta #3 en: Enero 21, 2021, 02:57:37 pm
Saludos Void, gracias por tu respuesta, pero cuando fui a probar el ejemplo, vi que las puertas se remplazan por paredes que llevan fuera de la mazmorra. Existe alguna manera de que se genere en medio de los pasillos? Aqui te dejo la foto para que veas donde está la puerta y donde me gustaría ponerla.

OmarMakero
 


Desconectado Void

Respuesta #4 en: Enero 21, 2021, 10:03:44 pm
Ah, ahora entiendo lo que quieres, en ese caso lo mas simple es hacer que el script crear_sala cree una puerta en la entrada de cada sala, y despues de que generar_laberinto haya corrido eliminar todas las puertas menos la última creada, de manera que solo la última sala tenga puerta.

 
Los siguientes usuarios dieron las gracias a este tema: OmarMakero


Desconectado OmarMakero

Respuesta #5 en: Enero 22, 2021, 12:22:28 am
Muchisimas gracias Void. Me has solucionado el mayor problema que se me presentó en ese juego.

Te reitero las gracias y nos vemos en el proximo post  8) 8)

OmarMakero