[ Dudas sobre el curso de programación de juegos ]

Crando un juego en lenguaje C, trabajo en builder

14-Aug-2010 06:04
carlos prato
4 Respuestas

Tengo un pequeño problema, estoy tratando de hacer un juego, pero no puedo hacer mover 2 cosas a la vez.

por ejemplo quiero mover una variable con las teclas mientras que hay otra variable que se va moviendo con un while.

estube pensando y se mo ocurrio que si hago un while que entre cada sierto tiempo creo q lo podria lograr, enotnces mi preugnta es:
¿¿como ago para que un while o una condicion entre cada sierto tiempo??


14-Aug-2010 17:24
Marc Krs.

Me imagino que tratas de hacer ésto:

1-mover un personaje u objeto con las teclas (personaje X)
2-mover otro personaje u objeto independientemenete de las teclas cambiandole su posicion con un bucle, en este caso un while. (personaje Y).

Yo creo que lo te pasa es que al estar moviendo el "personaje Y" con un while, mientras se esta ejecutando ese bucle que usas para moverlo, todo lo demás no responde o se ejecuta hasta que no sale de éste mismo.

supongo que tendrás algo así:

while (i<100){
  draw_sprite(screen, personajeY, posX, posY);
  i++;
  posX++;
}

para conseguirlo no user whiles ni for por esa misma razon, usa un if por ejemplo dentro de un do while que vaya aumentando la posicion cada vez que se vaya repitiendo el bucle.

algo así mas o menos:

//una funcion para dibujar los elementos

void dibujar(){
  draw_sprite(screen,tuPersonaje,xPersonaje,Ypersonaje);
  draw_sprite(screen,Enemigo,xEnemigo,yEnemigo);
}

//una funcion para incrementar la pos del enemigo

void funcionMoverTuEnemigo(){
  if(xEnemigo<100){
      xEnemigo += 1;
  }
}

//en el main se le pasas las funciones con un do while

int main(){
  do{
     dibujar();
     funcionMoverTuPersonaje();
     funcionMoverTuEnemigo();
  }while(partidaTerminada == false);
}

En éste apratado hay un buen ejemplo de como programar un juego paso a paso, en el que sale lo que buscas:

http://www.aprendeaprogramar.com/mod/resource/view.php?id=437

Espero que te haya servido de ayuda, de todas formas a ver que dice el maestre... ;-)



15-Aug-2010 09:20
carlos prato

Bueno tratando ya pude hacer mover el personaje, mientras se mueven los enemigos.
lo hize metiendo una funcion llamada mover dentro de el for que mueve a los enemigos lo bueno de esta funcion mover es q funciona con un kbhit(); q entra si toco una tecla asi q si no muevo al personaje se sige moviendo al enemigo. se mevino esa idea cuando estaba leyendo tu respuesta gracias.

voy mas omenos por la mitad del juego aun me faltan arreglar muchas cosas pero por si caso lo uqieres ver aki esta lo que llevo echo para que te des una idea. talvez no utilize muchas herramientas por q apenas voy en primer semestre de electronica.


16-Aug-2010 02:05
Nacho Cabanes (+31)

Tu forma de plantearlo se parece a la que te comentaba Marc, pero es menos refinada. Eso de que lo "importante" sea "mover los enemigos", y desde ahí se llame a la función de mover el personaje puede tener problemas como:

- Que los enemigos se muevan más rápido que el personaje (o, en el mejor de los casos, exactamente a la misma velocidad), lo que no suele ocurrir en la mayoría de juegos simples, sino que el personaje suele ser algo más rápido, para poder escapar. No es difícil de solucionar, basta con que los incrementos de X e Y (la velocidad) no sean iguales. Pero en tu caso, que es un juego en modo consola, no puedes afinar tanto.

- ¿Cómo controlas situaciones como que muera un enemigo o que muera el personaje, y qué haces en ese caso?

De cualquier modo, es un primer paso en una buena dirección.

Eso sí, cuando vayas avanzando, tendrás que ir acercándote más a algo un poco más estructurado y más fácil de ampliar. Un "bucle de juego" clásico suele tener la pinta siguiente:

void buclePrincipal() {
 partidaTerminada = FALSE;
 do {
   comprobarTeclas();
   moverElementos();
   comprobarColisiones();
   dibujarElementos();
   pausaFotograma();
 } while (partidaTerminada != TRUE);
}

donde la función "comprobarTeclas" es la que responde a tus solicitudes de movimiento del personaje (pero también a las de ayuda, salir de la partida, etc.) y la función "moverElementos" es la que anima a los elementos del juego que se mueven solos, como los enemigos, los disparos, los adornos del fondo, o quizá tu propio personaje (cuando saltas, o cuando se desplaza al final con sólo pulsar una tecla, como en el PacMan)

Tienes más detalles aquí:

http://www.nachocabanes.com/videojuegos/ipj/ipj24.php


20-Aug-2010 05:20
carlos prato

Ok. voy a tratar de hacerlo mas ordenadamente como tu dices, asi es mucho mejor si continuo como lo llevo va a qdar muy feo xD.
por ahora no tengo mucho tiempo, ando en intensivo =/. despues lo ago. si lo termino te aviso xD. Gracias por todo...






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)