Anuncios Google

Proyecto de un novato

Empiezo.

Estoy trabajando en un test hecho con PAlib y por
ahora voy bien. Ahora mismo sólo tengo una duda. ¿Cómo hago para hacer
preguntas aleatorias? Es que no quiero que uno se aprenda el orden.
El código es:

// Includes
#include <PA9.h>       // Include for PA_Lib
 
// Function: main()
int main(int argc, char ** argv)
{
	PA_Init();    // Initializes PA_Lib
	PA_InitVBL(); // Initializes a standard VBL
	PA_InitText(1,0);
	PA_InitText(0,0);
	float bien,mal;
 
	PA_OutputSimpleText(1,11,11,"Bienvenido al\n Test De ...");//Cambiar ... por de lo que va el test
	PA_OutputSimpleText(0,0,11,"Toca la pantalla  para continuar");
	PA_WaitFor(Stylus.Released)
 
	//Comienzo pregunta
	while(1)
	{
	   PA_ClearBg(1,0);
	   PA_ClearBg(0,0);
	   PA_OutputSimpleText(1,0,0,"Pregunta 1:Que es la Bios?");//Introducir pregunta
	   PA_OutputSimpleText(0,0,0,"A: Un sistema de transferencia de datos\nB: Una forma de vida\nX: Un chip que dice donde encontrar el SO\nY: Una memoria temporal");//Introducir respuestas
	   if((Pad.Released.A)||(Pad.Released.B)||(Pad.Released.Y))//Quitar el que va a ser el correcto
	   {
	      PA_ClearBg(1,0);
	      PA_ClearBg(0,0);
	      PA_OutputSimpleText(1,14,11,"Mal!");
	      PA_OutputSimpleText(0,0,11,"Toca la pantalla  para continuar");
	      mal++;
	      PA_WaitFor(Stylus.Released)
		}
		else if (Pad.Released.X)//Cambiar /*bla*/ por el botón correcto
		{
		   break;
		}
		PA_WaitForVBL();
	}
	PA_ClearBg(1,0);
	PA_ClearBg(0,0);					   
	PA_OutputSimpleText(1,12,11,"Bien!!!!");
	PA_OutputSimpleText(0,0,11,"Toca la pantalla  para continuar");
	bien++;
	PA_WaitFor(Stylus.Released)
	//Fin pregunta
 
	//Comienzo pregunta2
	while(1)
	{
	   PA_ClearBg(1,0);
	   PA_ClearBg(0,0);
	   PA_OutputSimpleText(1,0,0,"Pregunta 2:Que es RAM?");//Introducir pregunta
	   PA_OutputSimpleText(0,0,0,"A: Un sistema de transferencia de datos\nB: Una forma de vida\nX: Un chip que dice donde encontrar el SO\nY: Una memoria temporal");//Introducir respuestas
	   if((Pad.Released.A)||(Pad.Released.B)||(Pad.Released.X))//Quitar el que va a ser el correcto
	   {
	      PA_ClearBg(1,0);
	      PA_ClearBg(0,0);
	      PA_OutputSimpleText(1,14,11,"Mal!");
	      PA_OutputSimpleText(0,0,11,"Toca la pantalla  para continuar");
	      mal++;
	      PA_WaitFor(Stylus.Released)
		}
		else if (Pad.Released.Y)//Cambiar /*bla*/ por el botón correcto
		{
		   break;
		}
		PA_WaitForVBL();
	}
	PA_ClearBg(1,0);
	PA_ClearBg(0,0);					   
	PA_OutputSimpleText(1,12,11,"Bien!!!!");
	PA_OutputSimpleText(0,0,11,"Toca la pantalla  para continuar");
	bien++;
	PA_WaitFor(Stylus.Released)
	//Fin pregunta2
while(1)
{
   PA_ClearBg(1,0);
   PA_ClearBg(0,0);
	PA_OutputText(1,8,11,"Bien:%f0 Mal:%f0",bien,mal);
	if(mal<=bien)
	{
	   PA_OutputSimpleText(0,12,11,"Aprobado");
	}
	else if(bien<mal)PA_OutputText(0,12,11,"%c1Suspenso");   
	PA_WaitForVBL();
}		   
 
	return(0);
} // End of main()

Gracias y gracias a amchacon por subir los tutos a EspalNDS y por responderme en la comparación de cadenas.


 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Temporalin

Gracias

Gracias, creo que usaré la solución de amchacon, aunque ahora estoy comenzando otro proyecto (es que no dejo de pensar, me aburro en clase de mates).

Bien, si conocéis el programa Password de Cuatro, sabréis de que va. Si no, meteos en youtube y mirad un poco.

Me da un error y es que cuando le das a Enter para continuar, es como si le dieses 4 ó 5 veces.

el código es este y vais a necesitar mucho tiempo para leerlo entero: Gracias de antemano

// Includes
#include <PA9.h>       // Include for PA_Lib
char respuesta[20],letter=0;
s32 posicionletranueva;
int aleat,cualeshechas[9],cuentafallos=0;
// Function: main()
int main(int argc, char ** argv)
{
	PA_Init();    // Initializes PA_Lib
	PA_InitVBL(); // Initializes a standard VBL
	PA_InitText(1,0);PA_InitText(0,0);
	PA_InitRand();
	PA_InitKeyboard(2);
	PA_KeyboardIn(20,95);
	PA_OutputText(1,10,9,"Bienvenido a");
	PA_OutputSimpleText(1,12,11,"PASSWORD");
	PA_OutputSimpleText(0,11,0,"Pulsa Enter");
 
	//Esperar a pulsar enter
	while(1)
	{	
	letter=PA_CheckKeyboard();
	if(letter=='\n')
	{
	   break;
	}
   PA_WaitForVBL();
	}
	//Ya has pulsado enter
 
 
	PA_ClearBg(1,0);
	PA_OutputSimpleText(1,11,12,"Comenzamos");
 
	//Esperar a pulsar enter
	while(1)
	{	
	letter=PA_CheckKeyboard();
	if(letter=='\n')
	{
	   break;
	}
   PA_WaitForVBL();
	}
	//Ya has pulsado enter
 
	//Hasta aquí la preparación
 
 
 
 
 
 
 
	while(cualeshechas!="111111111")
	{
	   aleat=PA_RandMinMax(1,9);
	   switch(aleat)
	   {
	      case 1:
	      case 2:
	      case 3:
	      case 4:
	      case 5:
	      case 6:
	      case 7:
	      case 8:
	      case 9:
 
 
				//Comienzo pregunta 1
				while(1)
	         {
	            PA_ClearBg(1,0);PA_ClearBg(0,0);
	            if(cuentafallos >= 0)
	            {
	               PA_OutputSimpleText(1,0,0,"Pista1");
	            }
					if(cuentafallos>=1)
					{
					   PA_OutputSimpleText(1,0,1,"Pista2");
					}
					if(cuentafallos==2)
					{
					   PA_OutputSimpleText(1,0,2,"Pista3");
					}
					if(cuentafallos==3)
					{
					   break;
					}
 
					//Comienza escritura
					while(1)
					{
					   letter = PA_CheckKeyboard();
						PA_OutputText(0,8,0,"%s",respuesta);
						if (letter > 31) 
						{ // there is a new letter
						respuesta[posicionletranueva] = letter;
						posicionletranueva++;
						}
						else if(letter == PA_TAB)
						{// TAB Pressed...
						u8 i;
							for (i = 0; i < 4; i++)
							{ // put 4 spaces...
							respuesta[posicionletranueva] = ' ';
							posicionletranueva++;
							}
						}
						else if ((letter == PA_BACKSPACE)&&posicionletranueva)
						{ // Backspace pressed
						posicionletranueva--;
						respuesta[posicionletranueva] = ' '; // Erase the last letter
						}
						else if (letter == '\n')
						{ // Enter pressed
						break;
						}
					}//Termina escritura	
 
					//Esperar a pulsar enter
	while(1)
	{	
	letter=PA_CheckKeyboard();
	if(letter=='\n')
	{
	   break;
	}
   PA_WaitForVBL();
	}
					//Ya has pulsado enter
 
					//Comienza comprobacion
					if(strcmp(respuesta,"correcta")==0)
					{
					   break;
					}
					else if(strcmp(respuesta,"correcta")!=0)
					{
					   PA_ClearBg(1,0);
						PA_OutputText(1,14,11,"%c1MAL!");
						cuentafallos++;
						PA_OutputSimpleText(0,11,0,"Pulsa Enter");
						//Esperar a pulsar enter
						while(1)
						{	
						letter=PA_CheckKeyboard();
						if(letter=='\n')
						{
						   break;
						}
 						 PA_WaitForVBL();
						}
						//Ya has pulsado enter
						PA_WaitForVBL();
					}//Termina comprobacion
				if(cuentafallos<=2)
				{
				   PA_ClearBg(1,0);
					PA_OutputSimpleText(1,14,11,"Bien");
				}
				else if(cuentafallos==3)
				{
				   PA_ClearBg(1,0);
					PA_OutputSimpleText(1,14-3-1-3-2-2,11,"Has perdido");
					while(1)
					{
					   PA_WaitForVBL();
					}
				}//Termina pregunta
				cualeshechas[1]=1;
				break;//Termina el caso
// Infinite loop to keep the program running
	while (1)
	{
		PA_WaitForVBL();
	}
 
	return (0);
}
}
}
} // End of main()

 


 

Imagen de Aguilera_87

hola amigo

hey, resulta ke yo llevo ya algunas semanas trabajando en un password, mira: http://khlavkalash.wordpress.com/2009/11/01/proximamente-password/

no digo ke porke yo lo este haciendo no puedas hacerlo tu, ni mucho menos, solo era por informarte, ok?

saludos!!


while(1) { letter=PA_Check

while(1)
	{	
	letter=PA_CheckKeyboard();
	if(letter=='\n')
	{
	   break;
	}
   PA_WaitForVBL();
	}


El break hace que el codigo salga del if, pero no del while...
Imagen de Temporalin

Me extraña mucho puesto que

Me extraña mucho puesto que en el código del test que estoy haciendo en un else if sí sale del while...

De todas formas creo que ese proyecto lo dejaré para Navidad y me quedaré con el test.

Por cierto, en las preguntas aleatorias, ¿cómo hago para que no repita la misma pregunta? (Ya sé que estoy complicandolo mucho)


 

Imagen de Temporalin

Pues...

Jeje, ya había mirado el wiki, el problema es que no sé cómo asignarle eso a una pregunta. Probé con:

int pregunta(1)
{
(Proceso de preguntar)
}
int pregunta(2)
{
(Proceso de preguntar)
}
 

Pero no funcionó.

 

Y gracias a carlo999 por los ánimos.(Aunque yo no creo que sea "Grandioso"):P

Pronto subiré una versión sobre Historia. (es que lo uso para repasar)


 

// Declaramos esta

// Declaramos esta variable
u8 pregunta;
 
// En el while:
pregunta = PA_RandMinMax(1,numero de preguntas);
 
if (pregunta == 1){
// Primera pregunta
}
 
if (pregunta == 2){
// Segunda pregunta)
}
 
if (pregunta == 3){
// Tercera preguna
}
 
// Etcetera

Ni lo sabia...   Por estas

Ni lo sabia...

 

Por estas razones siempre uso la NDS para las pruebas. Nunca te puedes fiar de los emuladores ^^.

Imagen de carlo999

Es genial...

Grandioso ya lo puedes subir que merece la pena....

Aqui tienes

 

http://www.palib.info/wiki/doku.php?id=day6es#numeros_aleatorios

 

Ahi te explican como obtener numeros aleatorios. Si a cada pregunta le asignas un numero, ya tienes preguntas aleatorias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.