[C]Duda novato. Volver a hacer algo...

Pues estoy creando un juego (el típico que salen huevos por arriba y una gallina abajo que los tiene que cojer >_<). Os pongo el código (muy básico por ahora) y os aclaro lo que hacen los comandos de PALib de nintendo ds para quien no las conozca.
// Includes
#include <PA9.h>       // Include for PA_Lib
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h" //los gráficos

u8 x = 0;
u8 y = 0;

// Function: main()
int main(int argc, char ** argv)
{
   PA_Init();    // Initializes PA_Lib
   PA_InitVBL(); // Initializes a standard VBL
   PA_CreateSprite(0, 0, (void*)caja_Sprite, OBJ_SIZE_32X32, 1, 0, 0, 0); //sprite de la "gallina"
   PA_LoadSpritePal(0, 0, (void*)sprite0_Pal); //para poder cargar sprites
   PA_CreateSprite(0, 1, (void*)bola_Sprite, OBJ_SIZE_16X16, 1, 0, -16, 0); //sprite del "huevo"
   PA_InitText(1, 0); //para poder poner texto

   while (1){
   
      x = PA_RandMax(224); //genera un número aleatorio de máximo 224
   
   break;
}   
   
   while (1)
   {
      if ((y >= 160) && (Stylus.X - 16 <= x + 16) && (Stylus.X >= x -16)) //Stylus.X dice la posición del stylus en la pantalla en el eje X
PA_OutputSimpleText(1, 0, 0, "GANASTE!"); //**aquí quiero que vuelva a realizar todo otra vez**
      
      PA_SetSpriteXY(0, 0, Stylus.X - 16, 160); //pone el sprite en la posicion Stylus.X - 16, 160 (caja para recojer las bolas)

      
      PA_SetSpriteXY(0, 1, x, y); // cambia la posición de la bola que cae
      
      y++;
      
      PA_WaitForVBL();
      
   } 
   
   
   return 0;
} // End of main()


Pues donde están los asteriscos quiero que vuelva hasta arriba de main, para ejecutar otra vez el número automático y que caiga una nueva bola, pero no tengo ni idea de como hacerlo, recomendadme porfavor :) (si también pensáis que es mejor hacer lo que llevo de otra forma, pues mejor :P).

Gracias!
Tengo una recomendación. Esta parte del código:

while (1){
   
      x = PA_RandMax(224); //genera un número aleatorio de máximo 224
   
   break;
}


es innecesaria, y además no veo la lógica de escribirla. Por lo que si lo único que quieres es que la mecánica del juego (o lógica del juego, aunque no estoy seguro de si es correcto decirlo de esta manera, pero creo que le va como anillo al dedo) sea la siguiente:

SI el huevo NO ha caido al final ENTONCES
    Si la posición del STYLUS es IGUAL a la posición del huevo ENTONCES
         Has ganado
         Restaurar a estado inicial de la partida
    SINO
         Actualiza la posición del huevo
    fSI
SINO
    Has perdido
fSI


Esto lógicamente es en pseudo-código pero creo que es bastante explícito en la manera de programar el juego. En principio, todo este fragmento se debería repetir siempre y se requerirá alguna que otra función como las que ves de "Has ganado" o "Restaurar a estado inicial".

No puedes volver a una de las líneas de código al estilo GOTO de BASIC (hay ciertas maneras, pero en este tipo de programación, creo que lo más sano es NUNCA recurrir a código que te envie a otras partes del código de forma abrupta), por lo que lo más conveniente es crear las funciones como he mencionado antes, y aún así, sería innecesario, porque podrías ajustar todas las variables necesarias, dado que no hay problema alguno de ámbito.

Seguramente se me estará escapando algo, pero en todo caso, ahí tienes lo primordial para poder hacer el programa.
Lo primero que me has dicho (lo del random) es para que el huevo salga en una posición aleatoria, no siempre la misma.
Creo que no pedí muy bien lo que quería:
Al caer el huevo (si lo cojes) subirá la puntuación (que se me olvidó ponerlo en el código, habría quedado más claro) y vuelve a caer otro huevo, etc. Luego, si no se coje sería decir que pierdes.
La única manera que se me ocurre sería poner, una vez lo has cojido que vuelva a hacer el número aleatorio y que vuelva a poner el sprite del huevo en esa posición, pero es una burrada, habría que ponerlo uno tras otro infinitas veces para que el juego no tuviera fin xD

Muchas gracias :)


EDIT: Dije que era duda de novato x_D ya lo he podido solucionar, pero justo después me encuentro con otro problema más xD Pongo primero como lo "arreglé":
if ((y >= 160) && (Stylus.X - 16 <= x + 16) && (Stylus.X >= x -16)){
         x = PA_RandMax(224);
         y = 0;
}

Y ya funciona bien >_<

Pero ahora quiero que la velocidad aumente cada vez que cojes una bola. He probado con 2*y++, y = 2*y... pero no se me ocurre que puede ser lo que hay que poner para que suba el doble de rápido el número (o 1 pixel más rápido cada vez).
polo_polo escribió:La única manera que se me ocurre sería poner, una vez lo has cojido que vuelva a hacer el número aleatorio y que vuelva a poner el sprite del huevo en esa posición, pero es una burrada, habría que ponerlo uno tras otro infinitas veces para que el juego no tuviera fin xD


Esto no es ninguna burrada, y no entiendo por qué lo ves así. De hecho, se supone que ha de suceder eso, pero tú has de controlar que no sean infinitas veces, sino cuantas tu quieras y después controlar el estado del juego.

En cuanto al problema de la velocidad, lo único que vería sería que tuvieses una variable que indicase la velocidad y vas incrementándola.
3 respuestas