elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Alguien con experiencia en juegos puede echarme un cable?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Alguien con experiencia en juegos puede echarme un cable?  (Leído 2,646 veces)
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
¿Alguien con experiencia en juegos puede echarme un cable?
« en: 9 Abril 2012, 00:13 am »

¡Buenas a todos!

Estoy intentando crear una aventura conversacional (luego la pasare a grafica, pero esto es lo basico), y estoy atascado con distintos planteamientos. Quiero crear una estructura lo mas general posible para poder hacer aventuras posteriormente cambiando tan solo los datos de los objetos y escenarios que intervienen en ella.

De momento, la estructura que relaciona los escenarios la tengo clara. Voy a utilizar un ADT grafo que ya tengo construido, asi cada vertice sera un escenario y las aristas los caminos que llevan de un escenario a otro. La informacion la cargaria desde un fichero, asi distintos ficheros tendran distintos escenarios para distintas aventuras.

Los objetos tendran una ID, un nombre y una descripcion, tambien los cargare desde un fichero, asi que tambien es bastante general. Solo tendre que crear ficheros de datos para las distintas aventuras.

Cada escenario tendra una descripcion y una lista de objetos con los que se pueda interactuar, y el inventario del protagonista tambien sera una lista de objetos, por lo que tampoco pierdo generalidad.

El problema lo tengo a la hora de decidir como llevar a cabo las acciones (sera una cantidad pequeña de comandos, del estilo del Day Of Tentacle) sobre los distintos objetos.

Se me ocurren distintas opciones pero no se por cual decidirme ni que sera mejor o peor, aqui es donde me hace falta vuestra experiencia o sentido comun.

Tengo claro (o creo que lo tengo, si veis que voy dando palos de ciego avisad) que la estructura de la funcion que lleve a cabo la accion sobre el/los objetos tiene que ser la siguiente:

nombre_funcion(referencia a tipo_escenario, referencia a personaje, referencia a objeto1, referencia a objeto2, lista_de_objetos).

Asi podre modificar la lista de objetos del escenario y del protagonista, y decidir si el resultado es otro objeto distinto a los dos dados de entre todos los objetos que haya en el juego y realizar las modificaciones en consecuencia.

Por ejemplo:

Usar sombrero con perchero. Busco sombrero, busco perchero, compruebo que puedo realizar la accion, elimino el sombrero del inventario, elimino perchero del escenario y sustituyo perchero por perchero con sombrero que se encontrara en la lista de los objetos.

Las opciones que barajo son las siguientes:

- Crear una funcion, que dependiendo del comando introducido, discrimine con if-elses los objetos sobre los que se lleva a cabo, por ejemplo.
Código:
ejecutar_accion(accion, escenario, prota, objeto1, objeto2, lista_objetos)
{
    if(accion == UNA_ACCION)
    {
        if(objeto1 == UN_OBJETO)
        {
            if(objeto2 == OTRO_OBJETO)
            {
                una_accion(escenario, prota, objeto1, objeto2, lista_objetos);
            }
            else if(objeto2 == MAS_OBJETOS)
            {
                ...
            }
            ...
        }
    }
}
una_accion(escenario, prota, objeto1, objeto2, lista_objetos)
{
    Lo mismo de arriba, con if elses compruebo con que par de objetos estoy tratando y actuo en consecuencia.
}

Con este tipo de codigo me puedo volver loco discriminando todos los posibles casos y para cada aventura tendria que modificar todas las relaciones en el codigo fuente...

- La segunda opcion que estoy pensando es crear ficheros dependientes de cada accion con matrices NxN, donde N es la cantidad de objetos, con la siguiente estructura:

Código:
     ID1  ID2 ... IDN

ID1  R11  R12 ... R1N

ID2  R21  R22 ... R2N

.     .    .  .    .
.     .    .   .   .
.     .    .    .  .

IDN  RN1  RN2 ... RNN

Rij es el nombre de una funcion que realiza acciones sobre el protagonista y el escenario correspondiente dependiendo de la accion.

Rij, en el ejecutable, sera unsigned long funcion(escenario *, protagonista *, objeto1*, objeto2 *, listaobjetos*)

Rij con i < j sera una funcion binaria (relacionara dos objetos)
Rij con i >= j sera una funcion unaria (la accion recaera sobre un solo objeto, segundo = NULL)
Rij = NULL si los objetos no se relacionan por la accion indicada.

La forma de relacionar el nombre de la funcion con la funcion que cree en el codigo, seria utilizando una lista de pares (nombre funcion, puntero a funcion), asi al leer el nombre de la funcion en el fichero podria traducirlo a la direccion de dicha funcion para asignarlo en la matriz del ejecutable.

Lo malo de este metodo es, que aunque gano en generalidad, si por ejemplo tengo 30 objetos, tendria que rellenar 900 datos de una matriz por cada accion.

¿Cual es la mejor forma para trabajar este problema?

Si conoceis o se os ocurre otro metodo me gustaria saberlo. Si quereis que os aclare algo mas sobre lo que tengo pensado, preguntad. Solo quiero tener las ideas claras antes de empezar a teclear codigo.

Muchas gracias por vuestra atencion.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: ¿Alguien con experiencia en juegos puede echarme un cable?
« Respuesta #1 en: 9 Abril 2012, 16:27 pm »

¿Que te parece si cada objeto puede tener acceso a una lista de objetos con los cuales éste y sólo éste se relaciona?
Así, al realizar determinada acción (usar objeto1 con objeto2) tendrás que recorrer la lista de uno de los objetos, si éste se encuentra, adelante, realiza la acción.

Además, cuando vos estás utilizando ésto:

Código
  1. nombre_funcion(referencia a tipo_escenario, referencia a personaje, referencia a objeto1, referencia a objeto2, lista_de_objetos).

Estás alegando que estás utilizando si y solo si un objeto del inventario y otro del escenario (puede que me esté equivocando acá, y malinterpretandote, así que perdón de antemano si es así). Pero también (Me di cuenta que abarcas todo igual :)) tendrías que abarcar que en cualquier escenario, el personaje pueda utilizar dos objetos de su inventario entre sí, formando otro particular. Y de ahí viene mi idea. Si tenés una referencia al escenario, llegás a cada objeto del escenario, si éstos tienen una lista de objetos con los que relacionarse, llegás a recorrer la lista para ver si realiza la acción. Si en cambio son dos objetos del inventario, ya tenés (gracias a la referencia al personaje) la referencia al inventario y a cada uno de los objetos, y por ende, tenés la referencia a cada objeto con los que se relaciona cada objeto del inventario.
Lo demás es manejo de listas.


« Última modificación: 9 Abril 2012, 17:38 pm por Ferno » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: ¿Alguien con experiencia en juegos puede echarme un cable?
« Respuesta #2 en: 9 Abril 2012, 17:55 pm »

¡Buenas!

XD, pues tienes razon, ya que tengo codificado el grafo puedo utilizarlo para representar la relacion entre los objetos. Se me acaba de ocurrir que los nodos de este grafo podrian ser de esta forma:
Código:
par(objeto, funcion)

nodo
{
    Objeto;

    par lista_accion_1;
    par lista_accion_2;
    ...
    par lista_accion_n;
};

Cada una de las listas, tendria como rimer elemento la accion llevada a cabo sobre el mismo objeto del nodo, y el resto serian interacciones con los otros objetos. Si se encuentra en la lista correspondiente a la accion el segundo objeto, sabre a que funcion tengo que llamar.

Ademas puedo generar ficheros conteniendo los datos, por lo que la mayor parte de las modificaciones recaeria sobre los ficheros en lugar de sobre el codigo.

¡Muchas gracias!

Si teneis mas ides, bienvenidas seran.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alguien con experiencia en analisis de los log de hijackthis me lo puede mirar? « 1 2 »
Seguridad
scr21 10 5,998 Último mensaje 25 Septiembre 2011, 03:36 am
por Dany3j
Alguien con experiencia armando quioskos digitales y diseñando app para ellos
Dudas Generales
Graphixx 0 1,515 Último mensaje 27 Diciembre 2012, 03:36 am
por Graphixx
Alguien con experiencia armando quioskos digitales y diseñando app para ellos
PHP
Graphixx 2 2,314 Último mensaje 6 Enero 2013, 05:23 am
por Graphixx
alguien podria echarme una cable?
Seguridad
astaroth_15 0 1,718 Último mensaje 29 Abril 2014, 08:10 am
por astaroth_15
Controlador DMX a servo, echarme un cable! :) « 1 2 3 »
Electrónica
DAVOTAKE 20 10,862 Último mensaje 8 Marzo 2021, 23:50 pm
por DAVOTAKE
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines