Busco ideas para resolver un problema (juego web, tipo aventura grafica)

valdrar

Buenas, estoy desarrollando una pequeña aventura gráfica en JavaScript, en mis ratos libres, es un proyecto personal, no pretendo publicarlo ni nada, es a modo de práctica. Lo que pasa es que nunca hice ninguno y me apetecía probar. El caso es que tiene tintes rpg, pues te creas el pj y tiene atributos y demás, aunque es todo en modo texto. Es como aquellos Muds que te conectabas por ssh pero singleplayer y en web, y con imagen. El caso es que creé un parser básico, que descompone las frases en verbo, sujeto.. descarta los artículos y guarda cada parte en un objeto.
Ejemplo:
Coger llave -> v:coger o1:llave o2:null
Coger la llave -> v:coger o1:llave o2:null
Usar la llave con la cerradura -> v:usar, o1:llave, o2: cerradura

luego ese objeto lo proceso y realizo las acciones si son posibles y demás...

Al principio tuve un problema con los nombre compuestos. Ejemplo: llave de plata, porque me metía plata como otro objeto. Esto lo solucione afinando un poco la forma de trocear la frase y luego buscando palabras completas, y si encuentra 1 coincidencia lo doy por valido (valido significa que lo entiendo, luego otra cosa es que el objeto este en la sala, sea visible, accesible, etc...), si encuentra mas de una le pido al usuario que sea mas preciso.

Hasta aquí todo bien. Mi problema viene cuando tengo varios objetos en la misma ubicación, que se llaman igual. Por ejemplo, dos espadas de hierro, dos pociones de vida, etc...
He pensado en agruparlos cuando se llaman igual y mostrar (n) al final del nombre. Esto esta bien para las pociones, porque bebes una, resto cantidad y fiesta, ahora solo queda una en el suelo, inventario, etc.. esto podría valer para el verbo equipar, dejar, coger.. seria restar una o mover una al inventario o al equipo, y dejar la otra donde está.. El problema está en que tengo un sistema de loot, y tengo objetos que se llaman igual, con distintos atributos.
Ej.

Brazalete de cuero - +1 fue
Brazalete de cuero - +1 des

Si quiero coger, o equipar uno concreto (imaginemos que están en el suelo). Aquí es donde no se como gestionarlo. No quiero código, solo ideas. He pensado en numerarlos #1 #2 pero tengo que modificar el parser para que reconozca esto. Además la rutina de agrupar, lo toma como un objeto y le pone (2) detras. Sin embargo en este caso no aplica... No se si me estoy complicando mucho para mi primer juego pero cuanto mas tiempo le dedico, mas mecánicas se me ocurren y a mas mecánicas mas complicaciones xD como que quiero hacer que pase el tiempo, contando comandos como si fueran ticks. y hacer día y noche, mover a los enemigos por el mapa cada tick.. hacer dungeons aleatorios, el tema del loot también me trae de cabeza, objetos de calidades distintas?, algo mas simple?, lista de objetos fijos?, atributos aleatorios?.... tengo un montón de ideas... bueno lo dicho, si podéis darme alguna idea para implementarlo, me ayudáis a pasar este bache. Gracias!

B

Creo que te estás complicando la vida con el tema de las pociones y los objetos en salas o inventario.

Tienes 2 pociones iguales, no?
Va depender como guardes los objetos, si en colecciones, en un array o lista.

Si el usuario busca usar una poción de vida, salvo que sea haya diferentes (S - M - L) donde ya tendrá que explicar más detalladamante. Restas una en la lista y muestra el conteo de las que les quedan.

Que recoge las del suelo que son iguales? Pues resta una de la colección, se la sumas a la del usuario y listo.

Creo que Javascript trabaja más con Maps en vez de collections así qeu podías tirar por ahí.

1 respuesta
valdrar

#2 Ya, eso ya lo tenia visto, el problema es con objetos del mismo nombre pero atributos distintos. Si me quiero equipar el brazal de cuero que da +1 de fuerza... o llamo a todos los objetos distinto (brazal de fuerza, brazal de destreza) o si todos se llaman brazal, o brazal de cuero... como me refiero a uno concreto? o me estoy complicando la vida?

1 respuesta
KoRMuZ

Por qué no metes un ID en cada objeto, en base a la posición que tenga en el inventario, y así da igual el nombre que tenga?

El usuario pasará por cada hueco del inventario, y leerá "Brazal de cuero" pero el que sea id 48 tendrá unas propiedades, mientras que el 93 tendrá otras.

1 respuesta
B

#3 Aquí puedes optar por las otras vertientes, en añadir nombres extras.

Brazal de la Destreza de Mono: + 4 a destreza
Brazal de la Destreza de Pantera: + 6 a destreza
Brazal de la Destreza de Guepardo: +12 a Destreza

valdrar

#4 Si pueden tener un ID, el problema es como se refiere a ellos el usuario desde la consola de texto. Por eso pensé en ponerles #1,#2, etc pero es un lio.. al final voy a tener que nombrarlos a todos diferente. Quizás un generador de nombres, para que sea espada de fruljur, brazaletes de jurlak, etc.. xddd
Con los objetos de la aventura, y los consumibles no tengo problema. El tema es el loteo, que pienso hacerlo aleatorio por matar un enemigo, y también esconderlos en cofres o sitios ocultos. Además voy a poner algún mercader para poder venderlos.
Otra opción es crear una lista de 15 o 20 objetos distintos y que si sale uno ya no salga mas. Y todos sean únicos.
Mi idea inicial era tener una plantilla de varios objetos y crear "versiones" aleatorias de ellos..

1 respuesta
KoRMuZ

#6 y siendo desde una consola, por qué no le pones los stats entre paréntesis al lado? Así ya se diferenciaría.

Con distintos nombres el funcionamiento va a ser igual de "malo" en mi opinión, porque como se yo que el de Jurlak es de fuerza y el de Merloyo es resistencia? Si son aleatorios, cada partida el nombre significará algo distinto

Akiramaster

¿Y usar un inventario al estilo roguelike donde se asocia cada espacio a una letra o número?

Usuarios habituales