Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

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: Generador de Mapas (Plataforma)  (Leído 7095 veces)

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

Desconectado Twister

  • Okupa
  • *
  • Puntos: 91
  • Mensajes: 995
  • Sexo: Masculino
  • Solo Tchaykowski conoce la respuesta.
    • Ver Perfil
    • Wild Twisted Studios
en: Febrero 26, 2010, 05:23:16 pm
* Nombre del creador: Twister
* Breve descripción de su función: Para su función, ejecuta el script con los correspondientes argumentos (explicados dentro del script) en un room vacío. El script se deberá ejecutar en el evento Create de un objeto.
* Versión GM utilizada:  :GM8: GM8 PRO, no se si funcionará en otras versiones.
* Código del Script:
////////////////////////////VARIABLES PARA EL GENERADOR//////////////////////////////////
//-------------------------------------------------------------------------------------//
// PASO 1: Reconocer Ancho y Alto de pantalla, llenar los bordes con Solidos.          //
// PASO 2: Crear algunos obstáculos.                                                   //
// PASO 3: Crear algunas plataformas.                                                  //
// PASO 4: Crear Agujeros                                                              //
// PASO 5: Crear Jugadores                                                             //
// Creado por ~Twister (Gameart) :: twister_cgm@hotmail.es                             //
//-------------------------------------------------------------------------------------//
/////////////////////////////////////////////////////////////////////////////////////////

//ARGUMENTOS
//ARGUMENT0 == Plataforma Solida
//ARGUMENT1 == Plataforma No-Solida
//ARGUMENT2 == Parent de Solidos
//ARGUMENT3 == ID Objeto que ejecuta este script
//ARGUMENT4 == J1
//ARGUMENT5 == J2

//EJEMPLO :: GenerarLVL(SOLIDO,PLATAFORMA,solidos,Algoritmo,J1,J2)

//:: INICIO DE VARIABLES :://
var RoomX, RoomY, NumeroDeObstaculos, HayObstaculo, Obstaculo, Altura, Lineas, NumeroDePlataformas, Plataforma;
var Agujeros, Agujero, Distancia;

RoomX=room_width
RoomY=room_height
x=0;
y=0;

//:: PASO 1 ::// Bordes
for (i=0; i<RoomX; i+=32)     {instance_create(i,RoomY-32,argument0)}     //BORDE INFERIOR
for (i=0; i<RoomX; i+=32)     {instance_create(i,0,argument0)}            //BORDE SUPERIOR
for (i=32; i<RoomY-32; i+=32) {instance_create(0,i,argument0)}            //BORDE IZQUIERDO
for (i=32; i<RoomY-32; i+=32) {instance_create(RoomX-32,i,argument0)}     //BORDE DERECHO

//:: PASO 2 ::// Obstaculos
NumeroDeObstaculos=abs(random(RoomX/32)-4)
HayObstaculo=0;
Altura=0;

for (i=32; i<RoomX-32; i+=32)
{
Obstaculo=choose(0,32,64)
HayObstaculo=choose(0,1,2,3,4)
if HayObstaculo=1 && NumeroDeObstaculos>0
{
Altura=choose(0,1,2,3,4)
for (ii=0; ii<Altura; ii+=1)
{
instance_create(i,RoomY-64-(32*ii),argument0)
}
NumeroDeObstaculos-=1
}
}

//:: PASO 3 ::// Plataformas
Altura=0;
Lineas=round(RoomY/160)-1
NumeroDePlataformas=abs(random(RoomX/32)-4)

for (ii=1; ii<Lineas; ii+=1)
{
for (i=32; i<RoomX-32; i+=32)
{
Altura=choose(32,64)
Plataforma=choose(0,1,2,3,4)
if Plataforma=1 && NumeroDePlataformas>0
{
if !place_meeting(i,   RoomY-32-(160*ii)-Altura,argument2){instance_create(i,   RoomY-32-(160*ii)-Altura,argument1)}
if !place_meeting(i+32,RoomY-32-(160*ii)-Altura,argument2){instance_create(i+32,RoomY-32-(160*ii)-Altura,argument1)}

NumeroDePlataformas-=1
}
}
}

//:: PASO 4 ::// Agujeros
Agujeros=round(RoomX/160)
Agujero=0
AgujeroX=0
for (j=0; j<RoomX; j+=32)
{
AgujeroX=j
Agujero=choose(0,0,0,0,0,0,0,0,0,0,1)
if Agujero=1 && place_free(j,RoomY-32) && place_free(j,RoomY-64) && Agujeros>0
{
Agujeros-=1
with(argument0)
{
if x=argument3.AgujeroX && y=room_height-32
{
instance_destroy()
}
}
}
}

//:: PASO 5 ::// Jugadores
Distancia=-1
ID=instance_create(RoomX,RoomY,argument4)
with(ID)
{
if ((!place_free(x,y) || place_free(x,y+32)) || distance_to_object(argument5)<(room_width/2)) && !place_meeting(x,y+32,argument3)
{
do
{
x=random(room_width) y=random(room_height)
move_snap(32,32)
}
until
place_free(x,y) && !place_free(x,y+32)
}
}
ID.visible=1
ID2=instance_create(RoomX,RoomY,argument5)
with(ID2)
{
if ((!place_free(x,y) || place_free(x,y+2)) || distance_to_object(argument4)<(room_width/2)) && !place_meeting(x,y+32,argument3)
{
do
{
x=random(room_width) y=random(room_height)
move_snap(32,32)
Distancia+=1
}
until
place_free(x,y) && !place_free(x,y+2) && distance_to_object(argument4)>(room_width/2)-Distancia
}
}
ID2.visible=1

//ELIMINAR CONFLICTOS
with(argument5){if !place_free(x,y){instance_destroy()}}
//ESCENARIO CREADO
instance_destroy()
object_delete(argument3)


PD: Es bastante mejorable el script, y se podría optimizar mucho más pero no me he parado a hacerlo por falta de tiempo :-[
PD2: Como de costumbre, se agradecen créditos pero no son necesarios. :)
« última modificación: Octubre 20, 2018, 07:37:09 pm por Johann »

 


No Tienes Permisos Para Dar Puntos
point 7 Puntos

Usuarios que puntuaron el tema » venus (7 Pts) 


Desconectado soccer2008

  • Okupa
  • *
  • Puntos: 0
  • Mensajes: 518
  • WWW.fileceru.foroactivo.com
    • Ver Perfil
Respuesta #1 en: Marzo 22, 2010, 05:39:56 am
 Muy buena en verdad, te felicito sigue así ;) ;)...una pregunta Twister, puedo aplicarlo a un juego de plataformas en 3D?

Un foro donde hay de todo: http://fileceru.foroactivo.net (se necesitan moderadores para el foro)
 


Desconectado deathmetal

  • Okupa
  • *
  • Puntos: 45
  • Mensajes: 1.213
  • Sexo: Masculino
  • Tengo una necesidad ... xD!
    • Ver Perfil
Respuesta #2 en: Marzo 22, 2010, 09:37:16 pm
lo probe para gm 6 y no se ejecutaba el juego xD enfin le heche un vistaso al script y esta muy bueno lastima que no pude verlo en accion porq no tengo gm8

 


Desconectado Twister

  • Okupa
  • *
  • Puntos: 91
  • Mensajes: 995
  • Sexo: Masculino
  • Solo Tchaykowski conoce la respuesta.
    • Ver Perfil
    • Wild Twisted Studios
Respuesta #3 en: Marzo 24, 2010, 12:03:21 pm
Buenas!

Soccer2008, podrías adaptarlo para usarlo en un juego 3D sin problemas en principio. Ya me contarás :)

Y Deathmetal, no sé si funcionará en otras versiones el script, está hecho en GM8 Pro :(

Gracias por los comentarios!

 


Desconectado deathmetal

  • Okupa
  • *
  • Puntos: 45
  • Mensajes: 1.213
  • Sexo: Masculino
  • Tengo una necesidad ... xD!
    • Ver Perfil
Respuesta #4 en: Marzo 24, 2010, 05:18:24 pm
si, presisamente lo probe en gm6 registrado para ver si funcionaba y avisarte

pero o mi maquina no lo soporta (porque no me sale ningun error) o no se :) simplemente el juego no se ejecuta como si entrara en un bucle al principio del juego

 


Desconectado Ruisu~

  • Asiduo
  • *
  • Puntos: 0
  • Mensajes: 170
  • Sexo: Masculino
    • Ver Perfil
Respuesta #5 en: Marzo 29, 2010, 08:01:34 pm
Me pasa igual que a death metal... debe ser que hago algo mal no se D: pon un ejemplo

 


Desconectado Wadk

  • In order to see...
  • Legendario
  • *
  • Puntos: 274
  • Mensajes: 2.355
  • Sexo: Masculino
  • ... you must close your eyes.
    • Ver Perfil
Respuesta #6 en: Marzo 29, 2010, 11:45:05 pm
Yo recuerdo haberlo probado y funcionó. Pero no me acuerdo qué versión de GM usé (creo que la 8 ).

 


Desconectado Ruisu~

  • Asiduo
  • *
  • Puntos: 0
  • Mensajes: 170
  • Sexo: Masculino
    • Ver Perfil
Respuesta #7 en: Marzo 30, 2010, 05:39:05 am
yo tambien lo probé en la version 8 D: y nada, debe ser que no es la version ._.

 


Desconectado Wadk

  • In order to see...
  • Legendario
  • *
  • Puntos: 274
  • Mensajes: 2.355
  • Sexo: Masculino
  • ... you must close your eyes.
    • Ver Perfil
Respuesta #8 en: Marzo 30, 2010, 06:43:29 am
Como ví que hay problemas en hacer funcionar el script, intenté hacerlo funcionar otra vez pero no pude... :/ juraría que antes pude hacerlo :( no sé que estaré haciendo mal esta vez.

 


Desconectado Twister

  • Okupa
  • *
  • Puntos: 91
  • Mensajes: 995
  • Sexo: Masculino
  • Solo Tchaykowski conoce la respuesta.
    • Ver Perfil
    • Wild Twisted Studios
Respuesta #9 en: Marzo 30, 2010, 08:29:05 am
Me resulta muy extraño que no os funcione, de hecho, lo acabo de probar en un nuevo proyecto en GM8 y me funciona sin problemas. Os adjunto mi prueba para que comprobéis si lo estabais usando correctamente :P

 


Desconectado Ruisu~

  • Asiduo
  • *
  • Puntos: 0
  • Mensajes: 170
  • Sexo: Masculino
    • Ver Perfil
Respuesta #10 en: Marzo 30, 2010, 09:15:26 am
el error tiene como origen la diferencia entre la longitud del sprite del bloque -w- ese deberia ser otro argumento xD porque yo utilizo bloques de 16 y capaz los de los demas problemas tambien

EDIT:
este debería funcionar en todos, a no ser que los player tambien deben ser iguales a los bloques D: o no se, es algo en el sprite X_X tube que cambiarle el mask al otro player (que en realidad es la instancia que utilizo para terminar el nivel) para que sea como seria por default, o sea, como viene.

Código: [Seleccionar]
////////////////////////////VARIABLES PARA EL GENERADOR//////////////////////////////////
//-------------------------------------------------------------------------------------//
// PASO 1: Reconocer Ancho y Alto de pantalla, llenar los bordes con Solidos.          //
// PASO 2: Crear algunos obstáculos.                                                   //
// PASO 3: Crear algunas plataformas.                                                  //
// PASO 4: Crear Agujeros                                                              //
// PASO 5: Crear Jugadores                                                             //
// Creado por ~Twister (Gameart) :: twister_cgm@hotmail.es                             //
//-------------------------------------------------------------------------------------//
/////////////////////////////////////////////////////////////////////////////////////////

//ARGUMENTOS
//ARGUMENT0 == Plataforma Solida
//ARGUMENT1 == Plataforma No-Solida
//ARGUMENT2 == Parent de Solidos
//ARGUMENT3 == ID Objeto que ejecuta este script
//ARGUMENT4 == J1
//ARGUMENT5 == J2
//ARGUMENT6 == alto y/o ancho de los bloques

//EJEMPLO :: GenerarLVL(SOLIDO,PLATAFORMA,solidos,Algoritmo,J1,J2)

//:: INICIO DE VARIABLES :://
var RoomX, RoomY, NumeroDeObstaculos, HayObstaculo, Obstaculo, Altura, Lineas, NumeroDePlataformas, Plataforma;
var Agujeros, Agujero, Distancia;

RoomX=room_width
RoomY=room_height
x=0;
y=0;

//:: PASO 1 ::// Bordes
for (i=0; i<RoomX; i+=argument6)     {instance_create(i,RoomY-argument6,argument0)}     //BORDE INFERIOR
for (i=0; i<RoomX; i+=argument6)     {instance_create(i,0,argument0)}            //BORDE SUPERIOR
for (i=argument6; i<RoomY-argument6; i+=argument6) {instance_create(0,i,argument0)}            //BORDE IZQUIERDO
for (i=argument6; i<RoomY-argument6; i+=argument6) {instance_create(RoomX-argument6,i,argument0)}     //BORDE DERECHO

//:: PASO 2 ::// Obstaculos
NumeroDeObstaculos=abs(random(RoomX/argument6)-4)
HayObstaculo=0;
Altura=0;

for (i=argument6; i<RoomX-argument6; i+=argument6)
{
Obstaculo=choose(0,argument6,argument6*2)
HayObstaculo=choose(0,1,2,3,4)
if HayObstaculo=1 && NumeroDeObstaculos>0
{
Altura=choose(0,1,2,3,4)
for (ii=0; ii<Altura; ii+=1)
{
instance_create(i,RoomY-argument6*2-(argument6*ii),argument0)
}
NumeroDeObstaculos-=1
}
}

//:: PASO 3 ::// Plataformas
Altura=0;
Lineas=round(RoomY/argument6*5)-1
NumeroDePlataformas=abs(random(RoomX/argument6)-4)

for (ii=1; ii<Lineas; ii+=1)
{
for (i=argument6; i<RoomX-argument6; i+=argument6)
{
Altura=choose(argument6,argument6*2)
Plataforma=choose(0,1,2,3,4)
if Plataforma=1 && NumeroDePlataformas>0
{
if !place_meeting(i,   RoomY-argument6-(argument6*5*ii)-Altura,argument2){instance_create(i,   RoomY-argument6-(argument6*5*ii)-Altura,argument1)}
if !place_meeting(i+argument6,RoomY-argument6-(argument6*5*ii)-Altura,argument2){instance_create(i+argument6,RoomY-argument6-(argument6*5*ii)-Altura,argument1)}

NumeroDePlataformas-=1
}
}
}

//:: PASO 4 ::// Agujeros
Agujeros=round(RoomX/argument6*5)
Agujero=0
AgujeroX=0
for (j=0; j<RoomX; j+=argument6)
{
AgujeroX=j
Agujero=choose(0,0,0,0,0,0,0,0,0,0,1)
if Agujero=1 && place_free(j,RoomY-argument6) && place_free(j,RoomY-argument6*2) && Agujeros>0
{
Agujeros-=1
with(argument0)
{
if x=argument3.AgujeroX && y=room_height-argument6
{
instance_destroy()
}
}
}
}

//:: PASO 5 ::// Jugadores
Distancia=-1
ID=instance_create(RoomX,RoomY,argument4)
with(ID)
{
if ((!place_free(x,y) || place_free(x,y+argument6)) || distance_to_object(argument5)<(room_width/2)) && !place_meeting(x,y+argument6,argument3)
{
do
{
x=random(room_width) y=random(room_height)
move_snap(argument6,argument6)
}
until
place_free(x,y) && !place_free(x,y+argument6)
}
}
ID.visible=1
ID2=instance_create(RoomX,RoomY,argument5)
with(ID2)
{
if ((!place_free(x,y) || place_free(x,y+2)) || distance_to_object(argument4)<(room_width/2)) && !place_meeting(x,y+ID2.sprite_height,argument3)
{
do
{
x=random(room_width) y=random(room_height)
move_snap(argument6,argument6)
Distancia+=1
}
until
place_free(x,y) && !place_free(x,y+2) && distance_to_object(argument4)>(room_width/2)-Distancia
}
}
ID2.visible=1

//ELIMINAR CONFLICTOS
with(argument5){if !place_free(x,y){instance_destroy()}}
//ESCENARIO CREADO
instance_destroy()
object_delete(argument3)

y hay bastantes cosas que se pueden simplificar xD
« última modificación: Marzo 30, 2010, 09:56:13 am por Ruisu~ »

 


Desconectado Twister

  • Okupa
  • *
  • Puntos: 91
  • Mensajes: 995
  • Sexo: Masculino
  • Solo Tchaykowski conoce la respuesta.
    • Ver Perfil
    • Wild Twisted Studios
Respuesta #11 en: Marzo 30, 2010, 09:33:47 am
Esperaré a ver si lo prueba alguien más y modificaré el script para eso que dices.

Gracias :)

 


Desconectado soccer2008

  • Okupa
  • *
  • Puntos: 0
  • Mensajes: 518
  • WWW.fileceru.foroactivo.com
    • Ver Perfil
Respuesta #12 en: Marzo 30, 2010, 05:05:02 pm
Voy a probarlo en gm8 y edito, gracias x compartir el script XD XD XD

Un foro donde hay de todo: http://fileceru.foroactivo.net (se necesitan moderadores para el foro)
 


Desconectado Wadk

  • In order to see...
  • Legendario
  • *
  • Puntos: 274
  • Mensajes: 2.355
  • Sexo: Masculino
  • ... you must close your eyes.
    • Ver Perfil
Respuesta #13 en: Marzo 31, 2010, 02:30:07 am
Logré que funcionara, parece que se tranca si los dos objetos dados como sólidos no están marcados como tales.
Por cierto, ¿el ancho y alto de los bloques no podría ser obtenido automáticamente?

 


Desconectado Ruisu~

  • Asiduo
  • *
  • Puntos: 0
  • Mensajes: 170
  • Sexo: Masculino
    • Ver Perfil
Respuesta #14 en: Marzo 31, 2010, 05:21:36 am
eso mismo pensé xD pero luego me dió flojera hacer todo eso asi que lo hice en una variable -w- (que vago xD) y lo de los solidos tambien lo noté D: