• Lunes 23 de Diciembre de 2024, 03:14

Autor Tema:  Duda Sobre Programación  (Leído 3203 veces)

Renatus

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Duda Sobre Programación
« en: Jueves 24 de Febrero de 2005, 16:08 »
0
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 !!!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Es cosa mía o el modo 320x240x256 conserva todavía algo de magia?

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Duda Sobre Programación
« Respuesta #1 en: Jueves 24 de Febrero de 2005, 18:39 »
0
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.

Renatus

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Duda Sobre Programación
« Respuesta #2 en: Viernes 25 de Febrero de 2005, 03:54 »
0
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  !!!
Es cosa mía o el modo 320x240x256 conserva todavía algo de magia?

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Duda Sobre Programación
« Respuesta #3 en: Viernes 25 de Febrero de 2005, 14:47 »
0
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...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Renatus

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Duda Sobre Programación
« Respuesta #4 en: Sábado 26 de Febrero de 2005, 05:34 »
0
Muchas Gracias JuanK Te agradezco el hecho de que me hallas respondido.
De veras me ha servido de mucho. Gracias  ;) .
Es cosa mía o el modo 320x240x256 conserva todavía algo de magia?

Renatus

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Duda Sobre Programación
« Respuesta #5 en: Sábado 26 de Febrero de 2005, 05:48 »
0
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.
Es cosa mía o el modo 320x240x256 conserva todavía algo de magia?

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Duda Sobre Programación
« Respuesta #6 en: Sábado 26 de Febrero de 2005, 06:09 »
0
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.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Renatus

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Duda Sobre Programación
« Respuesta #7 en: Domingo 27 de Febrero de 2005, 09:20 »
0
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:
Es cosa mía o el modo 320x240x256 conserva todavía algo de magia?