Ayuda - Búsqueda - Miembros - Calendario
Versión Completa: Comparar Números Aleatorios (solucionado)
Swishmax en español. Foro de consulta. > SwishMax > SwishMax
moritz
Hola a tod@s:
Estoy haciendo un programita para los alumnos de mi clase donde han de escribir con letra el número que se les muestra en un recuadro.
Este número es aleatorio. Para hacerlo de cero a cien no me ha resultado muy difícil aunque dado los pocos conocimientos que tengo de Swishmax, he hecho un script algo largo.
Para el número aleatorio he puesto

n= Math.RandomInt(101);
_root.dato.text = n;

donde "dato" es el número que se le muestra al alumno.

Luego he puesto la forma correcta de escribir el número:


if (n==0) {zz="cero";}
if (n==1) {zz="uno";}
if (n==2) {zz="dos";}
if (n==3) {zz="tres";}
if (n==4) {zz="cuatro";}
if (n==5) {zz="cinco";}
if (n==6) {zz="seis";}
if (n==7) {zz="siete";}
if (n==8) {zz="ocho";}
if (n==9) {zz="nueve";}
if (n==10) {zz="diez";}
if (n==11) {zz="once";}
if (n==12) {zz="doce";}
etc....

Y para comparar si está bien he puesto el script que "Cancrexo" me ayudó ayer a resolver:



createTextField("respA", this.getNextHighestDepth(), 130,300,540,50);
respA.html = true;
respA.htmlText ='<font size="28"><font face="Arial"><b>';
respA.textcolor = "0xffffff";
//respA.restrict = "0-9";
respA.restrict = "a-z á é í ó ú";
respA.border = true;
respA.borderColor = 0xFFFFFF;
respA.background = true;
respA.maxChars = 32;
respA.backgroundcolor = 0x0000ff;
respA.type = "input";
Selection.setFocus("respA");
stop();
}
onSelfEvent (keyPress("<Enter>")) {
if (respA.text == zz ) {
_root.ptos = _root.ptos + 1;
_root.acertar.text = _root.ptos;
gotoSceneAndPlay("Escena_siguiente",1);
}
else{
_root.fall = _root.fall + 1;
_root.fallar.text = _root.fall;
gotoSceneAndPlay("Escena_siguiente",1);
}
stop();
}


Pero el problema me surge al querer ampliar el programa a números mayores por ejemplo hasta 100.000
Me es muy lioso hacerlo de esta forma ya que tendría que escribir los cien mil números. ¿Existe alguna forma de agilizar el proceso?

Si quieren pongo el archivo .swi que tengo hasta el momento.
Un saludo
Moritz.
Emilio1908
No se como se haría para tantos, pero creo que podrías simplificar el script si no te he entendido mal.

n= Math.RandomInt(101);

_root.texto=""; // Es un texto de entrada donde escriben los alumnos, mejor que lo declares mediante
// un onload() y sea _root.texto para que te sirva durante toda la aplicación

_root.acierto=0; //para cambiarlo si se acierta por 1 o cambiar si se falla por -1

if (n==0) {

if(_root.texto=="cero"){ _root.aciertos=1; }else {root.acierto=-1;}

} else if (n==1) {

if(_root.texto=="uno"){ _root.aciertos=1; }else {root.acierto=-1;}

}

Y así sucesivamente....


No te he solucionado lo de tener que escribir hasta mil pero te lo he puesto más corto con lo que sería más fácil modificalo, tan sólo tendrías que cambiar el "1" y el "uno" y creo que te será más fácil, espero que te sirva.
moritz


Se me ocurre algo pero no sé como pasarlo a script:

Supongamos un número de 5 cifras: 65.749
Se podría hacer un número aleatorio para cada dígito:

a= Math.RandomInt(10); para este caso el valor de "a" habrá sido el 6

b= Math.RandomInt(10); para este caso el valor de "b" habrá sido el 5

c= Math.RandomInt(10); para este caso el valor de "c" habrá sido el 7

d= Math.RandomInt(10); para este caso el valor de "d" habrá sido el 4

e= Math.RandomInt(10); para este caso el valor de "e" habrá sido el 9

por otro lado habrá otra parte del script donde se adjudica la palabra al número dado, en este caso sería:

if (a==6 and b<> 0) (a1="sesenta y ")
.....
.....
if (b==5) (b1="cinco mil ")
....
if (c==7) (c1="setecientos ")
....
if (d==4) (d1="cuarenta ")
...
if (e==9) (e1="y nueve")

Pero ahora me viene el problema.
¿Cómo puedo unir las variables a1,b1, c1, d1, e1 para que den el texto completo: " sesenta y cinco mil setecientos cuarenta y nueve", y poderlo comparar con el que escribe el alumno en el apartado input del script?


Un saludo
Moritz.
cancrexo
Hola. Creo que lo mejor sería que utilizases arrays para asociar el numero y su representación cardinal. Por ejemplo:
CÓDIGO
var numeros:Array = new Array();
numeros[0]="cero";
numeros[1]="uno";

o bien:
CÓDIGO
var numeros:Array = new Array();
numeros["cero"]=0;
numeros["uno"]= 1;
numeros["dos"]= 2;


Lamentablemente, a no ser que encuentres por la red algún archivo de texto o similar con todos los numeros que quieres tendrás que picarlos a mano, si no todos, si bastantes.
Otra opción sería codificar un script que generase el array con dichos valores pero, claro está, siempre siguiendo los consejos de la sabia RAE: Cardinales

Salu2
Emilio1908
Moritz tu idea no la veo tan descabellada, puedes hacer eso pero creo en vez de un solo texto input, 5 textos donde tenga que poner en cada uno. No se puedes controlar dependiendo del numero que salga y añadiendo algunas excepciones:

Pongo un ejemplo para explicarme mejor:

Imaginate que sale 2.745 ; pues tendria que haber tres campos de texto "dos mil", "setecientos", "cuarenta y cinco"
Mientras que si sales 10, solo habría un campo para que escribas "diez"

los campos lo puedes controlar con if, Ej:

n= al numero aleatorio; //no te lo pongo con la sintaxis, solo te lo explico lo que quiero decir

if n<=100 ===> un solo campo para escribir
if n > 100 && n <= 999 ====> dos campos "noveciento" "ochenta y tres"


No se sigue pensando, estudia tambien lo que te ha dicho cancrexo

Saludos
cancrexo
Hola.
He preparado un ejemplo que espero te sirva aunque en Swishmax 3. Puedes verlo en el foro Ejemplos Swishmax 3, en este enlace: http://www.swishmax.es/foros/index.php?showtopic=9744

Salu2
moritz

rolleyes.gif

Si, es precisamente lo que estaba buscando.
Muchísimas gracias por el tiempo gastado, por las molestias y por la pronta respuesta.
Voy a adaptarlo y cuando lo termine pongo el programita resultante.
Un saludo
Moritz
cancrexo
Ok. Pués damos el tema por cerrado.
cuando acabes, podrías subir tus archivo al apartado Ejemplos Swishmax mismamente.

Salu2
Esta es una versión "reducida (lo-fi)" de nuestro contenido. Para ver la versión completa con mas información, formato e imágenes, por favor haz click aquí.
Invision Power Board © 2001-2010 Invision Power Services, Inc.