¿Quieres registrarte?

Ejemplo de juego tipo "Adivina el Número" con Actionscript 3

Por: Carloz
25 de Diciembre del 2007
2536 de clabLevel
Otros artículos de Carloz
12,104 visitas

En este Tip crearemos un programa en el cual deberás averiguar un número que es generado aleatoriamente.

Para hacerlo, se te darán dos simples pistas: si el numero que tu escribes es mayor o menor al pensado por el código.

Primeramente crearemos nuestra interface, yo he creado una así:



Donde al primer campo de texto de arriba hacia abajo le daremos el nombre de advisor, este campo se encargará de avisar si el número introducido por el usuario es mayor o menor así como de dar a conocer si se ha ganado o perdido.
Al segundo campo lo llamaremos triesField, que se encargara de contar los intentos que hemos utilizado.

El tercer campo es un campo de entrada al que le daremos el nombre de inputFIeld.

Por último creamos un botón y lo nombramos checkButton.

Ahora vamos con el código, el cual he colocado en un archivo .as:

Código :

/* Creamos variables de inicio */

var generatedNumber:int = generateNumber(); //El número generado por la función
var tries:int = 10; //Los intentos al iniciar
var game:Boolean = true; //Indica que el juego está ejecutandose

inputField.restrict = "0-9"; //Restringimos el campo de entrada a sólo números

checkButton.addEventListener(MouseEvent.CLICK, compareNumbers); //Le asignamos al botón la función para comparar los números

/* Esta es la función que generará un número entre el 0 y 100 */

function generateNumber():int
{
   return Math.floor(Math.random() * 101);
}

/*Esta función compara los numeros para probar si son mayores menores o iguales*/

function compareNumbers(event:MouseEvent):void
{
   /* Primero checamos que se haya escrito en el campo de entrada y que el número escrito no sea mayor a 100 */
   
   if(inputField.text == "" || new int(inputField.text) > 100)
   {
      advisor.text = "Introduce un número desde 0 hasta 100.";
      
      return;
   }
   
   /* Guardamos el número introducido por el usuario */
   
   var userInput:int = new int(inputField.text);
   
   /* Checamos el número introducido con el generado */
   
   if(userInput < generatedNumber)
   {
      advisor.text = "El número introducido es menor.";
      
      tries--;
      
      checkTries();
   }
   
   else if(userInput > generatedNumber)
   {
      advisor.text = "El número introducido es mayor.";
      
      tries--;
      
      checkTries();
   }
   
   else if(userInput == generatedNumber)
   {
      gameOver();
      
      tries--;
      
      checkTries();
      
      advisor.text = "Ganaste! el número es " + generatedNumber + " pulsa Espacio para jugar.";
      triesField.text = "Utilizaste " + (10 - tries) + " oportunidades.";
   }
}

/* Esta función se encarga de manejar las oportunidades */

function checkTries():void
{
   triesField.text = "Tienes " + tries + " oportunidades.";
   
   if(tries == 1)
   {
      triesField.text = "Tienes " + tries + " oportunidad.";
   }
   
   else if(tries == 0)
   {
      advisor.text = "Perdiste! el número era " + generatedNumber + " pulsa Espacio para jugar.";
      
      gameOver();
   }
}
/* Retiramos el evento al botón cuando se ha perdido y establecemos que el juego ha terminado */
function gameOver():void
{
   game = false;
   
   checkButton.removeEventListener(MouseEvent.CLICK, compareNumbers);
}

/* Si se presiona Espacio y el juego ha terminado ( ya sea por ganar o perder ) se inicializan las variables y se borran los campos dinamicos */
function restart(event:KeyboardEvent):void
{
   if(event.keyCode == Keyboard.SPACE && !game)
   {
      tries = 10;
      generatedNumber = generateNumber();
      
      checkTries();
      
      advisor.text = "";
      inputField.text = "";
      
      checkButton.addEventListener(MouseEvent.CLICK, compareNumbers);
      
      game = true;
   }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, restart);



Este es el programa funcionando:

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript_3

Comentarios | Enviar un comentario
JaJa... Muy bueno y Entretenido...
Felicidades Carlos.Yanez !!!...
Por: M@U
Buen ejemplo Carloz (y)
Por: Zguillez
¿Soy el único al que le funciona mal? Una vez introduzco un número y me dice si es mayor o menor, no vuelve a cambiar el mensaje.
Por: Rafa_blog

Rafa_blog :

¿Soy el único al que le funciona mal? Una vez introduzco un número y me dice si es mayor o menor, no vuelve a cambiar el mensaje.

El juego trata de adivinar el numero que a "elegido" la máquina aleatoriamente...
Has de ir cambiando el número introducido en función de que te diga si es mayor o menor, hasta acertar con el correcto.
Por: Zguillez

Rafa_blog :

¿Soy el único al que le funciona mal? Una vez introduzco un número y me dice si es mayor o menor, no vuelve a cambiar el mensaje.


Pues quizá tenga algún bug, porque yo he puesto un 100 y me dice que tiene que ser mayor :)
Por: llops

llops :

[Pues quizá tenga algún bug, porque yo he puesto un 100 y me dice que tiene que ser mayor :)

Creo que te confundes... El mensaje que sale hace referencia al número introducido, es decir si pones 100 te dice que 100 es mayor al número correcto con lo que has de poner un número menor...
Por: Zguillez
Ok, ya entiendo, sorry :P Hoy estaba ofuscado, aun así la mente me sigue obligando a verlo al revés...
Por: Rafa_blog_blog
JaJa... Le he adivinado al primer intento !!!...
Genial...
Por: M@U
esta muy bueno Carlos, felicidades (Y)
Por: eldervaz
No me resultó... cualquier ayuda en bienvenida

Gracias
Por: Nominal_blog
10 intentos es demasiado.
Como maximo se necesitan 7 intentos siguiendo una simple estrategia(8 si se trata del 0)
Por: cards_blog
en 5 gané XD
Por: master_of_puppetz
que pailas esa maquina es pura mentira
Por: adriana_blog

adriana_blog :

que pailas esa maquina es pura mentira

cual maquina? :?
Por: master_of_puppetz
Hace un par de días hice un tip que incluía un binary search (¿dejar el link sería spam?). Es interesante como se pueden halllar rápidamente valores numéricos en una lista ordenada.

Por cierto, eligiendo los números inteligentemente se puede lograr en 7 (es más, a menos que adivinemos, ese es el número exacto de preguntas que necesitamos).

Además, aunque parezca mentira, con las 10 oportunidades que tenemos podemos adivinar un número aleatorio entre 0 y 1024.
Por: HernanRivas
Totalmente cierto HernanRivas, lo he comprobado.

Háganlo ustedes mismos:


Espero sus comentarios.
Por: Carloz
Hey gane varias veces. Totalmente para dundos jajaja Muy bueno.
Por: Luis Orellana-blog
Hola, me interesaa mucho este juego. Pero no sé montar el código en el FLA.

ALguien me puede mandar el archivo *.fla por favor?

Gracias de anremano

carlos_sanz77@hotmail.com
Por: carlos843275
Excelente. M diverti mucho adivinando. muy bueno.
Por: dolly-blog
Buen ejemplo Carloz Yuñes.
ahora que jugaba se me ocurre que para darle un mejor manejo se puede añadir la entrada de la tecla intro para verificar el numero. para hacer un aporte al codigo, agregue algunas lineas de programacion para añadir el evento que llamara la tecla intro.

Código :

/* Creamos variables de inicio */
var generatedNumber:int = generateNumber();
//El número generado por la función//
var tries:int = 10;
//Los intentos al iniciar//
var game:Boolean = true;
//Indica que el juego está ejecutandose//
inputField.restrict = "0-9";
//Restringimos el campo de entrada a sólo numeros//

checkButton.addEventListener(MouseEvent.CLICK, compareNumbers);//Le asignamos al botón la función para comparar los números/*
//Esta es la función que generará un número entre el 0 y 100 */
function generateNumber():int {
   return Math.floor(Math.random() * 101);
}
/*Esta función compara los numeros para probar si son mayores menores o iguales*/
function compareNumbers(event:Event):void {
   
   stage.focus = inputField;
    inputField.setSelection(0,2); 
   
   /* Primero checamos que se haya escrito en el campo de entrada y que el número escrito no sea mayor a 100 */
   if (inputField.text == "" || new int(inputField.text) > 100) {
      advisor.text = "Introduce un número desde 0 hasta 100.";
      return;
   }
   /* Guardamos el número introducido por el usuario */
   var userInput:int = new int(inputField.text);
   /* Checamos el número introducido con el generado */
   if (userInput < generatedNumber) {
      advisor.text = "El número introducido es menor.";
      tries--;
      checkTries();

   } else if (userInput > generatedNumber) {
      advisor.text = "El número introducido es mayor.";
      tries--;
      checkTries();
   } else if (userInput == generatedNumber) {
      gameOver();
      tries--;
      checkTries();
      advisor.text = "Ganaste! el número es " + generatedNumber + " pulsa Espacio para jugar.";
      triesField.text = "Utilizaste " + (10 - tries) + " oportunidades.";
      
      inputField.setSelection(0,0); 
      inputField.selectable = false;
   }
}

/* Esta función se encarga de manejar las oportunidades */
function checkTries():void {
   triesField.text = "Tienes " + tries + " oportunidades.";
   if (tries == 1) {
      triesField.text = "Tienes " + tries + " oportunidad.";
   } else if (tries == 0) {
      advisor.text = "Perdiste! el número era " + generatedNumber + " pulsa Espacio para jugar.";
      gameOver();
      inputField.setSelection(0,0); 
      inputField.selectable = false;

   }
}

function keyPressed(evt:KeyboardEvent) {
   if (evt.keyCode == Keyboard.ENTER) {
      compareNumbers(evt);
   }
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed);

/* Retiramos el evento al botón cuando se ha perdido y establecemos que el juego ha terminado */
function gameOver():void {
   game = false;
   checkButton.removeEventListener(MouseEvent.CLICK, compareNumbers);
   
   stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyPressed);
}

/* Si se presiona Espacio y el juego ha terminado ( ya sea por ganar o perder ) se inicializan las variables y se borran los campos dinamicos */
function restart(event:KeyboardEvent):void {
   if (event.keyCode == Keyboard.SPACE && !game) {
      tries = 10;
      generatedNumber = generateNumber();
      checkTries();
      advisor.text = "";
      inputField.text = "";
      checkButton.addEventListener(MouseEvent.CLICK, compareNumbers);
      stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed);
      game = true;
      inputField.selectable = true;
   }
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, restart);

Por: fredybg

fredybg :

Buen ejemplo Carloz Yuñes


:shock: ohhh Yuñes no comprendo de donde saque eso!

disculpa Carlos. Yanez ! :lol:
Por: fredybg
Esta mal hecho como va a ver un numero menor que 0 si es entre 0 y 1024
Por: Julio-blog
bueno espero que les gustes este simplificacion de toda la programacion siempre diciendo que el fue el original y le quedo muy bueno pero esto es un aporte lo unico que me falto fue que recargara con el espacio disculpen espero disfruten este aporte con arreglos
elnum._visible=false;
intentos.text = 10;
_global.numerogen = Math.floor(Math.random()*(100-0+1))+0;
trace(numerogen);
function chequeo() {
if ((numero.text>100) or (numero.text<0)) {
aviso.text = "El número tiene que estar entre 0 y 100";
} else if (numero.text>numerogen) {
aviso.text = "El número que has escrito es mayor";
if (intentos.text>0) {
intentos.text = intentos.text-1;
}
} else if (numero.text<numerogen) {
aviso.text = "El número que has escrito es menor";
if (intentos.text>0) {
intentos.text = intentos.text-1;
}
} else if (numero.text == numerogen) {
aviso.text = "Has adivinado. ¡Felicidades!";
}
}

boton.onRelease = function() {
if (intentos.text>0) {
chequeo();
} else {
aviso.text = "Ya no te quedan intentos";
num.text = numerogen;
elnum._visible=true;
}
};
Por: peter-blog
Pues no es por presumir pero yo le atiné a la primera
:lol: :lol: :lol: :lol:



je seguiré comprando boletos de lotería :lol: :lol: :lol:

*NOTA: no hice ningún tipo de trampa solo fue pura suerte o coincidencia
Por: DJ Konflëis
esta padre
Por: chacha-blog
vale verga este juego
Por: Raldcsffgbv-blog
muy bueno feelicidades
Por: trini-blog
como lo hago en dfd
Por: kate-blog
muy dibertido pero juge mas de 100 beses pero solo gane 1 ves
Por: evelin-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.