Ayuda con diseño de niveles.

Started by Fede, October 14, 2011, 04:32:46 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fede

 Hola compis.

Estoy buscando documentación sobre la implementación de niveles de dificultad.

Quiero retomar un juego que empecé hace más de un año y que no continúo porque no consigo implementar correctamente los niveles de dificultad.

Ahora mismo hay 3 fases y las tres me parecen muy difíciles y de dificultad muy parecida.

El juego está inspirado en 'plantas contra zombies', y la dinámica es muy parecida, salvo que en este caso son animales de granja contra el resto.

Coges un animal con unas características, lo pones en una posición del tablero y este la defiende del ataque del resto de animales que avanzan desde la derecha.


Cada animal tiene sus características de ataque y resistencia.

Si sabéis de  alguna documentación sobre la creación de niveles de dificultad, a ser posible en español, se agradecerá.




PD.

Si Free, es el mismo que te pasé. A ver si le meto mano otra vez. :D
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

SplinterGU

no entiendo lo que preguntas... a que te refieres?

no creo exista documentacion al respecto de eso... la dificultad la pones tu en base a que haya mas enemigos o que avancen mas rapido...

quizas no entiendo lo que preguntas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Outlaw

Hola Fede, yo lo que haría es tener tres juegos de sets de variables por cada nivel de dificultad, es decir una para facil, una para normal y y otra para dificil... ahora que son esos sets de variables a los que me refiero? bueno, yo lo pense asi: serian unas structs que guardan las variables que afectan a los enemigos, por ejemplo: vida, velocidad, municion, etc. y hacemos que haya tres juegos de variables pre definidos, siendo por defecto el nivel normal, y que el jugador elija otro sino. En el nivel facil se podrian disminuir un 50 porciento todas las inicializaciones de las variables, en el dificil aumentar un 50 porciento, algo asi... No se si se entiende:
[/code]



struct nivel_facil
  struct enemigo1
    int vida=50
    int velocidad=8
    int municion=20
  end
  struct enemigo2
    int vida=
    int velocidad=
    int municion=
  end





struct nivel_normal
  struct enemigo1
    int vida=100
    int velocidad=16
    int municion=40
  end
  struct enemigo2
    int vida=
    int velocidad=
    int municion=
  end
end





Algo asi lo veo yo a grandes rasgos eso si, nunca lo implemente!  ;)

"Life is cheap when the bounty is high"

Fede

Splinter me refiero a eso que has nombrado más o menos:

¿Qué características deben de tener?
¿A que velocidad deben de ir?
¿Por grupos?¿Solos?

Porque me parece que soy muy penco en la materia y consigo programar correctamente las hordas de enemigos.

etc.


Outlaw.

Gracias, eso es más o menos lo que implementé.

El problema es que al ajustarlo siempre obtengo más o menos el mismo resultado:

-Los enemigos tardan más, pero al final del nivel voy a toda ostia para que no me maten.


Por eso no se que estoy haciendo mal, y lo único que se me ocurre es que el problema esté en el algoritmo de salida de los enemigos.

Se supone que deben de ir saliendo poco a poco y luego en tromba. Pero el resultado parece logarítmico, no lineal.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

SplinterGU

Depende del tipo de juego...

yo creo que deberias empezar por la cantida de enemigos que aparecen y la velocidad con que se mueven, tambien puedes agregar tiempo para completar el nivel.

todo depende del juego y el objetivo.

la cosa es que los primeros niveles deben ser muy faciles, a medida que vas pasando deben ser mas dificiles.

no hay una receta para esto, depende de lo que vos le quieras dar y como vos lo hayas pensado... ahora si queres copiar entonces te recomiendo que juegos mucho al planta vs. zombie... pero entiendo que no es la idea.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Fede

Gracias. Si esa es la idea: primero fácil y al final difícil.

Y de copiar nada. Como mucho inspirarme. :D
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Futu-block

vamos a pensar despacito; Outlaw lleva razon, primero en pseudo codigo tratemos de averiguar como funciona...

Por un lado está la aparición de enemigos, tendrá un numero ¿no? cada X tiempo aparece un enemigo ¿no?
Seguimos con la velocidad de ese enemigo, otro numero x = x + Tal; Tal = numero de nivel
Posicion, cada X tiempo sube o baja de la horizontal donde comenzó
Devolver el ataque, cada X tiempo el enemigo te lanza un ataque...

y asi, cada numero de esos cambia segun el nivel, una cosa como la que ha dicho outlaw

intenta que no haya mucha diferencia entre un nivel y otro...

si quieres te paso la inteligencia artificial que le puse al ''panta vs dragon'' para que lo veas

Outlaw

Ahi entendi un poco mas... fede queria que al pasar los niveles (o fases) se vaya incrementando la dificultad, no solo la seleccion de dificultad! Creo que en ese tipo de juegos lo unico que queda es poner u incremento constante de nivel a nivel, siendo incluso posible usar el numero de nivel como indicador, es decir, velocidad_enemigo en nivel 1, le multiplicamos 1, en nivel dos multiplicamos 1/2 y asi. Digo yo...  :P
"Life is cheap when the bounty is high"

Futu-block

o si no poner que el nivel 10 sea la primera pantalla, asi tenemos mas margen de dificultad progresiva; la segunda pantalla seria 11 y la variacion es minima

la quinta o sexta pantalla ya puede ser el nivel 20 y la dificultad es el doble

Fede

Muchas gracias por los consejos.

Voy a ver si le meto mano otra vez al juego. :)
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Drumpi

Fede, acabas de llegar a uno de los puntos importantes, y más difíciles de equilibrar, en la creación de un videojuego.

En los antiguos juegos bastaba con cambiar un valor para darle más energía a los enemigos, más velocidad en el juego o añadir más obstáculos. Claro que entonces eran juegos de una pantalla, repetitivos, y su objetivo era superar una puntuación.

Según el juego, modificar la dificultad es más complicado: puede definirlo el propio nivel (juegos de plataformas), la dureza de los enemigos (juegos de disparos), la cantidad de los que aparecen (juegos de peleas callejeras), o modificando la IA (juegos de lucha).

En este último ejemplo, la dificultad puede definirse por el aumento de probabilidades de que el enemigo ataque (o sea, ataque más veces), reducir el tiempo de espera entre acción y acción y aumentar su capacidad de esquivar y defenderse de tus golpes. Como ves esto no es fácil.

En tu caso, no te comas la cabeza: cada nivel de dificultad se define por los tipos de enemigos que aparecen, su cantidad y el tiempo entre uno y otro, así que lo que tienes que hacer es que en función de la dificultad, aparezcan enemigos más o menos fuertes, haya más o menos cantidad y que se reduzca o aumente el tiempo entre uno y el siguiente.
Pero si lo quieres hacer a lo fácil, debes crear para cada nivel una lista de enemigos que van a salir, indicando qué enemigo va a salir, por dónde va a salir y cuanto va a tardar en aparecer el siguiente. Cuanto más larga sea la lista, más enemigos saldrán (hay que aguantar más tiempo), cuanto menos tiempo des entre enemigo y enemigo, más atacarán a la vez, y según los enemigos que pongas, se necesitarán más o menos disparos para vencerlos.

Si recuerdas, yo hice algo similar en SBTime, en la fase de las naves: hay una función que llama a distintos tipos de hordas, y modifico el tipo de enemigos que contiene cada una y algún parámetro más que puedo modificar. Los tipos de enemigos ya tienen una energía definida.

Conseguir una lista bien equilibrada, y ordenar estas listas por dificultad, es un trabajo muy complejo, que requiere de muchas pruebas y mucha experiencia, pero se puede hacer con paciencia. En esta parte es donde se hace tan necesaria los betatesters, y que te digan "este nivel es demasiado difícil", "cambia el 2 por el 3, que el 3 es más fácil" o "esta horda tiene un momento hacia la mitad que atacan demasiados a la vez" (y por eso os insistía tanto a Futu y a ti que probaseis las betas).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

Me alegra que por fin enseñes al publico tu obra maestra, es un pedazo de juego que ya tarda en salir.

La dificultad segun los niveles la puedes de tratar de muchas formas, mirando tu juego, se me ocurre por ejemplo:

- rapidez y randoms de ataque mas estrechos a medida que pasan los niveles.
- enemigos nuevos y mas dificiles.
- tiempo, energia, etc.
- suelos con distinta inercia en niveles superiores, por ejemplo fase con hielo, donde los enemigos 'deslizen' mas deprisa.

Yawin

Yo creo, Fede, que no existe ningún truco magistral sobre eso. Generalmente, el nivel facil es el nivel en el que te lo puedes pasar sin morirte apenas. El nivel medio es en el que te mueres más a menudo que en el anterior. Y el nivel dificil es el imposible.


Pero vamos, depende mucho de cada programador.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Hokutoy

Como dice Drumpi es una de las partes mas dificiles a la hora de crear un juego.
Cuando hice el Shock Troopers Base Defense (juego en fenix tipo Tower Defense ) lo pase muy mal a la hora de equilibrar las ordas de enemigos, coste de las torres, upgrades, daño por tipo de arma en cada enemigo, velocidad, etc... es algo muy complicado y le tienes que dedicar tiempo para hacer algo equilibrado (de hecho tengo un update por el disco duro con todas las fases del juego pendiente de publicar por lo mismo... me falta equilibrar las fases y no encuentro tiempo/ganas).

Saludos!

Drumpi

Hay que añadir que, además de ser una de las partes más difíciles de hacer, es de las más importantes para la jugabilidad: un desequilibrio en cualquiera de las partes del juego puede provocar una pérdida de calidad, comentarios negativos y el rechazo por parte del jugador. Es por eso que hacer un RPG es tan difícil: la parte del movimiento, animaciones, diseño de las batallas, motor de scroll, etc son sencillas, pero equilibrar los combates, los ataques, los enemigos y, sobre todo, la dificultad de los mismos respecto al nivel del jugador es una tarea que requiere tiempo o mucha suerte.

Es fácil encontrar casos reales de juegos con este problema, no hay más que recordar algún juego en el que nos hemos atascado, y acto seguido hemos avanzado mucho sin problemas: hemos encontrado una parte demasiado complicada antes de tiempo (yo recuerdo en el Perfect Dark, el tercer nivel, donde debes ir escoltando al Dr. Carrol, en nivel difícil es casi imposible porque siempre lo matan, y el siguiente casi me lo paso yendo a saco, salvo por aquel tío que me atacó por la espalda).

Pero no hay que desanimarse, por lo general basta con incrementar muy despacio el número de enemigos o su energía, probar varias veces, y dejar de hacer niveles más difíciles cuando veamos que a nosotros nos cuesta pasárnoslo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)