locked
Duda con forma de programación RRS feed

  • Pregunta

  • Buenas!

    Estoy empezando a desarrollar con XNA, y me he propuesto hacer una aventura gráfica muy básica para ir desarrollando a la vez que voy aprendiendo el lenguaje. Con muy básico me refiero a un par de pantallas en los que moverse, un par de objetos con los que interactuar... En fin, para que una vez tenga la destreza suficiente con XNA poder ampliar ese proyecto e ir abarcando cada vez más.

    Con esto, se me ha planteado una duda. He usado ya GameStates, para menus y juego normal, pero hay algo que no me queda claro. 

    En el caso de que tuviera 100 niveles por los que el usuario debiera moverse, ¿debería tener 100 GameStates, uno por cada nivel? ¿se debe hacer así o hay alguna otra forma?

    Igual que esto, si quisiera que un personaje me hablara 100 líneas de texto, debería llevar un control en plan...

    switch(control){

    case 0:

    poner frase 1

    break;

    case 1:

    poner frase 2

    break;

    }

    control++

    Mi pregunta es, ¿se deben hacer así las cosas o hay alguna forma más simple y mejor de hacerlas? Es que ahora mismo es de la unica manera que se me ocurre hacerlo.

    Muchas gracias! Saludos!!

    miércoles, 4 de abril de 2012 0:08

Respuestas

  • Buenas...

    1. Sí, al final tendrás 100 gamestates pero varía mucho la forma de atacar el problema, podrías hacerlo con swithc como pones ahí, pero eso es infumable...

    sería más práctico tener una Clase Entorno, donde almacenar las variables comunes, y una Clase Habitacion, con la funcionalidad base de las habitaciones, de la que derives para ir creando todas las habitaciones... al final tendrás 100 clases... pero será más manejable.... 

    2. Echale un vistazo a la clase Dictionary<> que pienso que te dará ideas... :)


    Tambien conocido como Blau www.youtube.com/malditis www.charcostudios.com

    • Marcado como respuesta Pepe Romero jueves, 5 de abril de 2012 10:56
    miércoles, 4 de abril de 2012 7:36

Todas las respuestas

  • Buenas...

    1. Sí, al final tendrás 100 gamestates pero varía mucho la forma de atacar el problema, podrías hacerlo con swithc como pones ahí, pero eso es infumable...

    sería más práctico tener una Clase Entorno, donde almacenar las variables comunes, y una Clase Habitacion, con la funcionalidad base de las habitaciones, de la que derives para ir creando todas las habitaciones... al final tendrás 100 clases... pero será más manejable.... 

    2. Echale un vistazo a la clase Dictionary<> que pienso que te dará ideas... :)


    Tambien conocido como Blau www.youtube.com/malditis www.charcostudios.com

    • Marcado como respuesta Pepe Romero jueves, 5 de abril de 2012 10:56
    miércoles, 4 de abril de 2012 7:36
  • Llevo un tiempo programando una pequeña aventura gráfica y he utilizado el método del switch, quizás un método menos optimizado para la mayoría de juegos pero que para este género lo veo más recomendable.

    En mi caso he creado una clase Escenario y a partir de ahí creo tantos escenarios como necesite. Cuando necesito cambiar de escenario llamo a un método que contiene un switch y cambia el escenario actual (y algunas cosas más como la posición del personaje) por el que se le pide. Puede parecer un poco aparatoso pero desde un archivo .xml se crean los escenarios en un plis.

    Inconvenientes:

    -Los escenarios tienen diferentes texturas, mapa de colisiones, etc pero en general son todos iguales por lo que estas bastante limitado. Si quieres hacer algo original, es mejor crear 100 clases distintas que deriven de una que contenga las variables comunes.

    Ventajas:

    - Simplicidad, facilidad para crear escenarios.

    Sobre el sistema de diálogo, como ha dicho CharcoStudios, mirate la clase Dictionary<>.



    jueves, 5 de abril de 2012 10:31
  • Perfecto, ya he mirado un poco por esa dirección y creo que más o menos tengo una idea de como hacer las cosas ;)

    Muchas gracias a los dos!! Saludos!

    jueves, 5 de abril de 2012 10:56
  • Cuando estas usando POO no hay casi ningun caso donde necesites usar un switch. En el caso de los dialogos, deberia estar totalmente definido en un fichero externo, y asi puedes cambiar las opciones sin tener que recompilar. Si pones los dialogos en un fichero, pero la logica de la conversacion en el codigo, ya esta separado en dos sitios y a la larga es mucho mas pesado.

    Lo ideal para los dialogos es que te crearas un arbol de conversaciones (que es lo mismo que el switch, pero mucho mas orientado a objetos). Algo como:

    public class DialogNode
    {
        public string Dialog { get; set; }
    
        public List<DialogNode> Options { get; set; }
    }

    Basicamente cada nodo tiene un texto (el dialogo que muestras), y la lista de opciones a las que puedes ir. Cuando vas a una opcion, muestras su texto, y las siguientes opciones, y asi hasta que llegues a un DialogNode donde sus Opciones son null o una lista vacia, que significa que has terminado.

    A ver si ayuda, un saludo!


    Vicente Cartas Espinel - MVP XNA/DirectX

    Twitter - VicenteCartas

    Blog about C# and XNA Development

    Blog about Role Playing Games

    jueves, 5 de abril de 2012 16:20
    Moderador