SoloCodigo

Programación Específica => Programación de Videojuegos => Mensaje iniciado por: Renatus en Jueves 24 de Febrero de 2005, 16:08

Título: Duda Sobre Programación
Publicado por: Renatus en Jueves 24 de Febrero de 2005, 16:08
Hola a todos  :lol:  !!!

Soy Novato en allegro y me gustaría comentarles una duda
que tengo con respecto a la metodología de trabajo en
allegro/c++ con el fin de pedir algo de ayuda.

Mi duda es la siguiente; en todos los ejemplos que
veo sobre estructuras básicas del código de los juegos
en allegro, existe siempre un bucle principal que es el
que domina prácticamente todo el juego y es aquí dentro
donde se ubican explícitamente, entre otras cosas, los
comandos que pintan y actualizan procesos determinados
como el personaje principal, la barra de energía,
el fondo, etc.

Pero... que pasa con los procesos de los cuales no se
sabe qué numero determinado de ellos va a crearse (los
disparos, los enemigos, etc)?
Me refiero a, cómo hago referencia a cada uno de ellos
para, por ejemplo, pintarlos en pantalla, dentro del
bucle principal? O es que no se hace así?.

Se me había ocurrido que quizás se pueda crear un bucle
interno propio para cada uno de estos procesos dentro
de la clase que los va a crear y hacer que cada uno de
estos objetos se encargen de pintarse y actualizarse
solos, pero al intentarlo, tuve problemas para sincronizar
el temporizador con cada uno de estos bucles particulares.

Además estoy seguro de que existe una metodología más eficiente
que la que mencioné y seguramente será la que utilizan
generalmente los programadores de juegos.
Desearía saber si podrían ayudarme con esta duda, por favor.

Se que lo que pregunto es quizás una tontería  :( , pero
es de verdad que necesito un consejo.

Adjunto a este mensaje, 12 sprites en 256 colores que he
realizado para un proyecto de juego de naves y me gustaría
compartirlos con ustedes, siéntanse libres para utilizarlos
donde quieran si es que les gustan.
Los sprites no son gran cosa pero...

Muchas Gracias  :D !!!
Título: Re: Duda Sobre Programación
Publicado por: Enko en Jueves 24 de Febrero de 2005, 18:39
Citar
Pero... que pasa con los procesos de los cuales no se
sabe qué numero determinado de ellos va a crearse (los
disparos, los enemigos, etc)?
Pues lo ideal seria crear un motor de sprites.  Desconozco como hacerlo en C.
La idea seria que cada disparo que creas, tenga  su propia rutina de movimiento y el motor se encarga de que esa rutina se cumpla. Por eso si tines una X cantidad de disparos , el motor se tiene que encargar de mover esa X cantidad de disparos.

Es asi como lo haria yo,  pero ,  estoy seguro que deben habe maneras mas sencillas y rapidas.

Citar
Se me había ocurrido que quizás se pueda crear un bucle
interno propio para cada uno de estos proceso
Si haces eso asi nomas, cuando el personaje dispare el juego se detendra.
Título: Re: Duda Sobre Programación
Publicado por: Renatus en Viernes 25 de Febrero de 2005, 03:54
Muchas Gracias EugenioEnko, agradezco mucho tu respuesta  :lol: .
Es un tema que me tiene un poco confundido pues, allegro y c++ son
algo nuevo para mi y esto me resulta intrigante..  :D
Muchas gracias de nuevo y nos vemos  :D  !!!
Título: Re: Duda Sobre Programación
Publicado por: JuanK en Viernes 25 de Febrero de 2005, 14:47
no se si estas en c o en c++...

en c++ deberias tener por ejemplo:

una clase nave
una clase disparo

la clase nave instancia objetos de la clase disparo.


asi cuando

nave.disparar()

se haria dentro del codigo algo asi como

disparo1.activo=true


eso por un lado, mientras el bucle ppal tendria:
Código: Text
  1.  
  2. while(true)
  3. {
  4.    nave.procesarCuadro();
  5.    nave.dibujarCuadro();
  6. }
  7.  
  8.  

y la clase nave

Código: Text
  1.  
  2. procesarCuadro()
  3. {
  4.    if disparo1.activo
  5.   {
  6.       disparo1.procesarCuadro();
  7.        ...
  8.        ...
  9.       if disparo1.impacto=true;
  10.       {
  11.           disparo1.inactivarDisparo();
  12.       }    
  13.   }
  14. ...
  15. ...
  16. ...
  17. }
  18.  
  19. dibujarCuadro()
  20. {
  21.   if disparo1.activo
  22.   {
  23.       disparo1.dibujarCuadro();
  24.   }
  25. }
  26.  
  27.  

en fin esta es una idea muy general, que aplica para juegos pequeños, para juegos mas grandes tambien aplica, pero debes aumentar la complejidad, y mas cuando se manejan mucjos mas personajes.... tendrias que usar listas enlazadas etc...
Título: Re: Duda Sobre Programación
Publicado por: Renatus en Sábado 26 de Febrero de 2005, 05:34
Muchas Gracias JuanK Te agradezco el hecho de que me hallas respondido.
De veras me ha servido de mucho. Gracias  ;) .
Título: Re: Duda Sobre Programación
Publicado por: Renatus en Sábado 26 de Febrero de 2005, 05:48
Hola de nuevo  :lol: !!!

JuanK te quería hacer una pequeña consulta con respecto a lo que me has
respondido.
Me ha ayudado mucho, gracias  :D !!!
De todas maneras aprovecho para preguntarte como instanciar los objetos con un nombre de variable específico para la clase disparo cuando no sé cuantos
disparos puedan llegar a solicitarse en el juego?
Muchas gracias por todo y nos vemos  :lol: !!!

Lamento hacer preguntas tan simples  :( ... Es que recién estoy empezando.
Gracias.
Título: Re: Duda Sobre Programación
Publicado por: JuanK en Sábado 26 de Febrero de 2005, 06:09
a eso me referia con cosas mas avanzadas...
debes manejar un array... para no ir ta  lejos no hblemos de casting ni de esas cosas asi que imagina solo una lista enlazada y sus metodos:

Código: Text
  1.  
  2. listaDisparo *ldisp;
  3. ...
  4. ...
  5. ...
  6.  
  7. agregarDisparo(*ldisp)
  8. {
  9.   ldisp->disparo = new disparo();
  10.   ldisp->sig=NULL;
  11. ...
  12. ...
  13. }
  14.  
  15. verificarDisparos
  16. {
  17.    //recorrer cada uno de los objetos de la lista en busca de disoaros que deban ser borrados , etc..
  18. }
  19. ..
  20. ...
  21. ...
  22. classs nave
  23. {...
  24. ...
  25. NuevoDisparo();
  26. ...
  27. ...
  28.  
  29. NuevoDisparo()
  30. {
  31.    verificardisparos();
  32.     agregarDisparo();
  33. ...
  34. }
  35. }
  36.  
  37.  

Es fin es un ejemplo muy general, pero esa es la idea..
basicamente crear , para tu caso, un administrador de disparos, el cual tendria una lista enlazada que apunta a los disparos que se encuentren instanciados actualmente,
y tendria metodos, para agregar y remover disparos de la lista, y metodos como por ejemplo:
Código: Text
  1.  
  2. PorcesarListaDisparos()
  3. {
  4.    listadisp=primerDisparo;
  5.    while(listadisp !=NULL)  
  6.    {
  7.        ((disparo)*listadisp).procesarCuadro();
  8.        listadisp=listadisp->sig;
  9.    }
  10. }
  11.  
  12.  

esa es la idea.. esta en unncodigo intermedion entre C# y c++.... ahi perdonaras el desorden.
Título: Re: Duda Sobre Programación
Publicado por: Renatus en Domingo 27 de Febrero de 2005, 09:20
Hola JuanK  :lol: !!!

Te agradezco mucho la gentileza de haberme respondido, muchas gracias  :)  !
Me ha ayudado mucho tu respuesta y ahora estoy un poco mas encaminado como para practicar un poco más sobre el tema.
Gracias por todo y nos vemos luego!!!  :hola: