Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[Ichi] Comunicación entre bombas

Iniciado por warwolf, 10 de Noviembre de 2006, 05:03:57 PM

« anterior - próximo »

warwolf

Buenas apañeros,
Me he quedado encallado un poco con un tema que no se del todo bien por donde pillarlo.
Nuestras bombas ya hacen explotar los ladrillos y bloquean el paso, pero el problema es cuando la explosión toca a otra bomba y entonces esta otra debería explotar.
Pues bien, el tema es que tengo una clase jugador, que tiene un array de bombas (de tipo "bomb" que es otra clase). Y claro, cuando la bomba genera la explosión va mirando por las bombas del jugador padre para ver si toca alguna.
Hasta aquí todo bien, el problema viene cuando el fuego alcanza la bomba de otro jugador, es aquí cuando no se como montarlo, ya que ahora mismo solo "se ven" las bombas de un mismo jugador. ¿Cómo lo tendría que hacer para que se vieran todas las bombas? ¿Creando un array de bombas de manera general, es decir, una global? ¿O hacer el array de jugadores global y ir accediendo por cada jugador a las bombas que posee?

Jur, he acabado haciendome un lio :?

PD. Otra cosa que tengo es que voy modificando la estructura del mapa para indicar que hay una bomba en una cierta posición, pero no guardo de quien es.... Sería mejor seguir por esta línea y especificar en la estructura del mapa el propietario de la bomba para enviarle a dicho jugador que la haga explotar?

bnl

Yo lo que haria seria meter dentro de la clase bomba una propiedad que indicara cual es el propietario.

Las variables globales no me gustan. Yo haria que las bombas pertenecieran a alguna clase "superior" al jugador, como la clase partida, juego o similar.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

zupervaca

Hola, creo que tienes mal la estrucutra, es decir, realmente una bomba cuando explota le importa bien poco de quien sea ya que deberia de matar a cualquier jugador que este cerca, con lo que creo que deberias de tener una lista con todas las bombas, no obstante puedes hacer que la bomba memorice quien la ha puesto.
Despues de esto puedes tener ciertas optimizaciones tipo bbox, es decir, cuando la bomba se coloca (me imagino que las bombas se quedan quietas) miras si esta dentro de un bbox de un grupo de bombas, si no esta, creas un nuevo bbox para esta nueva bomba, si esta la agregas a ese bbox y le aumentas de tamaño solo teniendo en cuenta esta nueva bomba, despues cuando explote sabes que todas esas bombas deben de estallar y ese bbox desaparecera. En conclusion en vez de una lista de bombas tendrias una lista de bbox que en su interior estarian todas las bombas que estallan, ademas tiene otras ventajas hacer esto, sabes que la primera bomba va a ser la primera en explotar con lo que no hace falta contar el tiempo de todas. Tambien gracias a esto optimizas la busqueda de colisiones con disparos del jugador ya que compruebas objetos mas globales en vez de todas las bombas existentes y una vez encontrado el bbox que colisiona con el disparo del jugador solo comprobarias las bombas de ese bbox, tiene muchas mas ventajas, pero ya depende de lo que quieras hacer.

Espero haberme explicado bien ;)

TheAzazel

pero tiene que saber de quien es la bomba para saber a quien dar los puntos....

te voy a pasar mi codigo del titanbomber y miras a ver como lo hice porque ahora mismo ni me acuerdo :S

EDIT: acabo de ver tu mail, vale, pues para que no cojas los mismos vicios que yo, de momento me paro :P.
Del code::blocks ni idea, nunca lo he usado pero creo recordar que en el gnu gcc se le pasa el parametro -g y listo.
Y como lo hago yo? pues cada player se ocupa de sus bombas y los players y las bombas y demas objetos se colocan en el campo de juego, cuando una bomba explota, marca el mapa con la explosion indicando de quien es la bomba.. y luego en la ejecucion de cada bomba, comprueba a su vez que su casilla no este..."explotando"(por otra boma) en cuyo caso, explota inmediatamente. Recuerdo que el problema que tenia era que cuando habia bombas juntas de jugadores distintos... los campos de explosion se podrian confundir..en ese caso y cuando siga con ello, creo que dividire los puntos entre ambos propietarios de las bombas, o deberia hacerlo de otro modo?? jeje ya lo vere...

Saludos

zupervaca

¿el pero es por lo que yo he dicho? por que para ello es solo agregar en la bomba una referencia al jugador. Ojala todos los problemas en programacion fueran ese :D

TheAzazel

Cita de: "zupervaca"¿el pero es por lo que yo he dicho? por que para ello es solo agregar en la bomba una referencia al jugador. Ojala todos los problemas en programacion fueran ese :D

Sin querer caer en definiciones lingüisticas...

para cuando un quake 5??   :twisted:

zupervaca

Cita de: "TheAzazel"
Cita de: "zupervaca"¿el pero es por lo que yo he dicho? por que para ello es solo agregar en la bomba una referencia al jugador. Ojala todos los problemas en programacion fueran ese :D

Sin querer caer en definiciones lingüisticas...

para cuando un quake 5??   :twisted:
La verdad es que no entiendo a que viene esto, ¿acaso esta mal lo que he puesto? si es asi di lo que esta mal para corregirlo, por que el sistema que he puesto es el que usa la mayoria de los juegos.

warwolf

Bueno, gracias a todos, ahora lo tengo un poco más claro.

De momento haré que las bombas pertenezcan a la clase mapa ya que son elementos del mapa (y es una clase que esta al mismo nivel que la de jugador pero centraliza la información del mapa).

Sobre lo de bbox no he entendido muy bien esto (si es una estructura o patrón de diseño), pero no me es del todo válido dado que quiero dar cierta libertad (en un futuro puede que las bombas se muevan, ya sea por ejemplo porque los jugadores ganen la habilidad de "chutar" bombas) y también hay que tener en cuenta que las bombas pueden tener un rango de explosión diferente unas de otras y que algunas no tienen temporizador sino "control remoto". Vamos, que la idea del bbox esta bien pero me interesa mayor flexibilidad ;)

Gracias por todos los comentarios, espero que el próximo lunes ya se puedan jugar 2 jugadores y mostrar alguna demo :)

zupervaca

El sistema de los bbox para bombas es parecido a un sistema de jerarquias de objetos, piensa que aunque se muevan las bombas siempre puedes reconstruir todo o parte del bbox y si las bombas tienen un control a distancia seria poner el contador del bbox a 0 para que estalle esa bomba y todas sus proximas (por logica de juego no te atasques que siempre hay solucion). Sobre la distancia entre las bombas tampoco le veo problema ya que cuando encuentras en bbox al que pertenecera la bomba nueva que se ha colocado debes mirar si esta dentro del rango de las demas, esta tecnica es para evitar una comprobacion lineal contra todas las bombas, es decir, si en el mapa tienes 1000 bombas, este sistema hara que compruebes las minimas cuando la bomba se ha colocado. No obstante me parece bien que pruebes otros sistemas mas faciles de implementar ya que este en principio puede ser algo complicado de llegar a realizar.

warwolf

Gracias zupervaca

De momento he creado otra clase para gestionar las bombas "bomb_manager", en donde tengo un vector con todas las bombas y a partir de ahí voy haciendo.
Así que por ahora todo funciona, pero soy consciente que no de la forma más óptima/elegante posible.

Dicho esto, he decidido por el momento dejarlo así para seguir avanzando con el desarrollo del juego, pero mi intención es al final realizar una jerarquía como me indicas, que lógicamente es más óptimo.

Así que queda apuntado en el TODO tú sugerencia ;)

shephiroth

Buenas.

Se que llego un poco tarde (veo por arriba que hay un beta por ahi que en cuanto termine este post ire a ver :)) pero a ver si puedo ayudar.

La idea del bbox la veo un poco difusa. Tenemos que tener en cuenta que las bombas tienen 2 coordenadas, por lo q a cada bomba en vez de un bbox, no le corresponderían 2?

Mi pregunta es, pq no lo tratais como un elemento del mapa?? Me explico, en vez de hacer un array de las bombas que teneis, podeis tener en el mapa un array de punteros a las bombas, correspondiendo a las casillas. Esto necesitaria entonces que la bomba tuviera internamente o bien puntero al titular o alguna relacion para los puntos y demas. De esta manera te ahorrarias muchas comprobaciones de bombas pues solo compruebas si las posiciones del mapa donde estalla una bomba contienen o no bomba. Tambien te libra de que una bomba explote el resto de bombas, a este sistema le da igual si una bomba es de menganito o de pepito.

SUERTE ^^

warwolf

Bueno, como he comentado, ahora tengo una clase bomb_manager, que simplemente gestiona las bombas (clase bomb) y interactua con el mapa (clase map). De esta forma esta clase es la encargada de ir "marcando" en el mapa donde hay bombas o explosiones ;)

No sé... todo esto puede ser un poco lioso de imaginar.... si creeis necesario podría subir el código fuente de la demo para que lo mireis y podais opinar con algo tangible ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.