Aleatoriedad en nuestros juegos

También te podría gustar...

34 Respuestas

  1. Nacho dice:

    No sabes si hay valores aleatorios “Perlin noise” o “noise”? es lo mas util que puedes usar en aleatorio en muchas cosas jaja

    • David dice:

      Buenas Nacho!
      La gran mayoría de lenguajes utlizan el método de Knuth para generar números pseudoaleatorios. Pongo aquí enlaces de .NET y Android como curiosidad.
      Random en .NET
      Random Android
      Por lo que tengo entendido, corrígeme si me equivoco, el método Knuth se utiliza normalmente para usar valores aleatorios, porque se suelen usar un valor detrás de otro, y en Perlin Noise se usa más en efectos gráficos, para simular humo, fuego, etc…
      Lo importante del post es saber utilizar las funciones de random() y resolver las dudas de para que sirve randomize(), que pasa cuando los números siempre salen los mismos, etc…

  2. Clark dice:

    ¿Cómo hago que salga un Room aleatorio? No entiendo bien esto…

  3. Grace dice:

    preciso ayuda para mi juego de rpg. Mi player esta sentado en una silla, pero cuando se baja lo hace siempre en una misma posición (x.y) y trae inconvenientes cuando hay un objeto posado en dicha coordenada. No doy con el codigo correcto. (Una coordenada aleatoria libre de colision, a 32 pixeles de la silla.)

    • Grace dice:

      if keyboard_check_pressed(vk_anykey) and global.sit_down=1

      {

      if !place_free(x,y)

      {
      x=other.x+20;
      y=other.y+20;
      }

      • David dice:

        Quizás en vez de usar if !place_free(x,y), deberías de hacer un bucle para comprobarlo. por ejemplo
        xx = other.x;
        yy = other.y;
        while !place_free(xx,yy) {
        xx += 20;
        yy += 20;
        }
        x = xx;
        y = yy;
        Todo esto sin saber tu código!!! Es una sugerencia.

  4. Isaac dice:

    Hola qué tal uso game maker estudio 1.4 y estoy haciendo un ciclo día noche y todo bien, pero ahora quiero poner un obj rain y quiero que salga al azar cómo se vería el código puesto y dónde tendría que poner el objetivo.rain? Muy buen aporte un saludo!

    • David dice:

      Para efectos comunes como el de lluvia, yo usaría los efectos que ya tiene por defecto Game Maker. Si lo que quieres es que salga aleatoriamente, yo escribiría esto:

      if irandom_range(1, 5) == 1 { //una vez de cada 5, cambia este valor si quieres más o menos
         effect_create_above(ef_rain, 0, 0, 1, c_gray);
      }

      Y para eliminar todos los efectos (por ejemplo al salir de la room o cuando quieras:

      effect_clear();
  5. Juan dice:

    Ante todo, muchas gracias por enseñarnos. Yo estoy empezando y para probar estoy haciendo el típico juego de marcianitos vertical. La pregunta es ¿Si tengo, por ejemplo, 20 naves enemigas, creadas del mismo objeto, como puedo hacer que disparen aleatoriamente, es decir, que varias de arriba y varias de abajo disparen. Muchas gracias.

    • David dice:

      Lo que haría yo…
      Imaginemos que disparan cada 5 segundos, y entiendo que tienes una alarma configurada que

      • Dispara la bala
      • Vuelve a activar la alarma (seguramente has puesto alarm[0] = 150; o alarm[0] = 5 * room_speed;)

      En el evento Create pondria este codigo:
      alarm[0] = choose(30, 60, 90, 120);
      Así empezaría a disparar en el primer segundo, o en el segundo, o en el tercero o en el cuarto. Así cada marciano tendría un número inicial diferente (algunos repetirían).
      Si quieres que el tiempo entre disparos también sea aleatorio, puedes cambiar el dentro de la alarma.

  6. Christian dice:

    y para que no se repitan los números?

  7. stranger dice:

    y si en dado caso de quiera que genere letras en vez de numeros,como podria programarse?

    • David dice:

      Una opción sería utilizar chhose() de la siguiente manera:
      choose(‘a’,’b’,’c’,’d’,’e’);//y así con todas las letras que te interese.

  8. Luis dice:

    como le otorgo un valor aleatorio a una posicion determinada de un grid

  9. Lucas Gutiérrez Durán dice:

    Buenas, soy muy novato, y lo que quiero intentar hacer es que en una room se generen enemigos de forma aleatoria y constantemente, ¿como lo podría escribir en código y donde?

    • David dice:

      Deberías de usar una alarma, y en el evento de la alarma ya puedes hacer un instance_create(), dónde la posición x, y si que debe ser aleatoria. Un ejemplo sería:

      instance_create(irandom_range(0, room_width), irandom_range(0, room_height), obj_enemigo);

      Luego está si te interesa que el objeto dónde se coloque esté en una posición libre.

  10. Irving Exiquio Salazar Muñoz dice:

    Hola, soy novato en game maker, esto me servira por ejemplo, mi juego sera de sumas, y en ella aparecera una leyenda que mostrara 10, entonces tengo que tocar a los objetos uno que valga 5 y otro 5 para que avance al siguiente nivel, esto me servira en game maker 2 studio?

  11. KimMc dice:

    Hola yo quiero hacer un fan madera de fnaf y quiero que mi animatronico se mueva por unas cámaras limitadas, como hago para que el animatronico se mueva?

    • David dice:

      Hola,
      ¿a qué te refieres a que se mueva por unas cámaras limitadas? ¿Te refieres a qué siga una camino?

      • KimMc dice:

        Que se mueva por ciertas cámaras aleatoriamente por ejemplo
        Que se mueva por las cámaras 1,2,3 y 4 pero que no siga un orden predeterminado para pasar por ellas.

        • David dice:

          Si a cámaras te refieres a rooms (aunque también te servirá para cualquier recurso, números, etc.) lo mejor es usar la función choose(). Por ejemplo:
          camara_elegida = choose(cam1, cam2, cam3, cam4);
          Y luego tienes la variable que ya puedes usar con la opción que haya elegido el programa.

  12. senior_tommey dice:

    Hola, quisiera saber si me podrias ayudar:
    1. Una manera de generar mazmorras (para actionRPG) de forma aleatoria.
    2. Generar enemigos en cualquier lugar de la mazmorra, siempre y cuando el lugar este libre (osea que no salga encima de otro enemigo, de un bloque o un muro, etc).

    Gracias de antemano.

    • David dice:

      Para el primer punto, no existe una solución o un código específico para hacerlo, depende mucho de como será tu juego final. Te recomiendo un vídeo que vi hace poco que hablaba del tema:

      Y sobre el segundo, la respuesta es casi la misma :(.
      Depende de si tu juego usa cuadrícula o no, si hay objetos que pueden superponerse, como elementos del fondo, etc.
      En esta entrada creaba yo objetos en posiciones aleatorias sin que se solapasen entre ellos, quizás te puedo servir:
      Crear instancias aleatorias

  13. Johan dice:

    Ey bro, no se si seguirás activo o no pero bue, aquí va mi pregunta:

    Estoy creando un juego tipo pong, y lo que quiero es que la Ball vaya aleatoriamente al iniciar el juego (Una dirección aleatoria). Lo que he hecho es crear una variable Movimiento y usar la función “random (170)” y que la ball tome la dirección de Movimiento. El problema es que, por alguna razón, SIEMPRE empieza hacia el mismo sitio. Intente usar “Randomize” pero entonces no me toma la condicion “170” y se me dispara a donde se le da la gana,

    • David dice:

      Has dicho dos cosas contrarias, que siempre empieza hacia el mismo sitio y que se dispara donde le da la gana 🙂
      Con que se ejecute una vez Randomize() al principio del juego es suficiente para que la semilla del azar lo haga como queremos.

  14. Johny dice:

    Hola, muy buenas noches desde México, no se si estás activo, pero aquí va mi pregunta…
    Estoy haciendo un proyecto escolar sobre ecuaciones, el caso es que en la pantalla donde corre el personaje en la parte inferior aparece una ecuación ( 2×2 o 3×3) aleatoria y cuando se encuentre a los 3 enemigos aleatorios delante suyo en la parte de abajo aparesca la solución correcta de un solo enemigo, pero que sea aleatorio.

    • ¿Cúal sería el código correcto?
    • ¿Se puede?

    Gracias de antemano… espero su respuesta

    • David dice:

      Poder se puede, pero es complicado explicarlo en un comentario.
      Podrías meter todas las ecuaciones en una lista (o leerlo de un fichero), mezclas la lista y eliges el primero. Luego dependiendo de lo que elijas ya muestras el enemigo o las soluciones que quieras.

  15. anónimo dice:

    Por favor se que esto es de hace unos años pero nesesito de tu ayuda, no se sí yo no lo haya notado pero en el texto no dice lo de las probabilidades 🙁
    no hay una función tipo:

    (variable.x (25%), variable.x (25%), variable.x (50%))

    ?????? me refiero a una función que use chances

    • David dice:

      yo haria algo parecido a esto
      switch (irandom_range(1,4))
      {
      case 1:
      variable.x;
      break;
      case 2:
      variable.x;
      break;
      case 3:
      case 4:
      variable.x;
      break;
      }

      Se conseguiría lo mismo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *