Tomando Decisiones: Ejemplo del manejo de eventos y toma de decisiones Codigo AS3
Este va a ser un ejemplo completo de un juego pequeño, simple pero que contiene una estructura básica, donde se aprende sobre la modularización con los que se puede establecer la lógica básica para juegos más complejos , el juego que voy a construir es un simple juego de buscar un número, la interfaz preguntara un numero entre 0 y 99; el usuario debe de deducir de que numero se trata, se da también al jugador detalles de estado del juego (si gana o pierde), un método que de manera aleatoria escoge un número.
Este es el código explicado y dividido en módulos que presenta una interfaz básica y sencilla pero es una base para la construcción de desarrollos más complicados.
package { import flash.display.Sprite; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.ui.Keyboard; import flash.text.*; [SWF(width="550", height="400", backgroundColor="#FFFFFF", frameRate="60")] public class Juego1AdivinaNumero extends Sprite { // crea los objetos de texto public var formato:TextFormat = new TextFormat(); public var entrada:TextField = new TextField(); public var salida:TextField = new TextField(); //variables del juego public var mensajeInicial:String; public var numMisterioso:uint; public var numAdivino:uint; //----------------------------------------------- public var intentosRestantes:uint; public var intentosHechos:uint; public var estadoJuego:String; public var ganador:Boolean; public function Juego1AdivinaNumero() { confCampoTexto(); comienzaJuego(); } public function confCampoTexto():void { // configura el formato de texto formato.font = "Helvetica"; formato.size = 24; formato.color = 0xFF0000; formato.align = TextFormatAlign.LEFT; // configura el texto de salida salida.defaultTextFormat = formato; salida.width = 400; salida.height = 70; salida.border = true; salida.wordWrap = true; salida.text = "Este es el campo de texto de salida"; // configura la posicion del display de salida stage.addChild(salida); salida.x = 70; salida.y = 65; // configura el campo de texto de entrada formato.size = 40; entrada.defaultTextFormat = formato; entrada.width = 80; entrada.height = 60; entrada.border = true; entrada.type = "input"; entrada.maxChars = 2; //entrada.restrict = "A - Z"; entrada.background = true; entrada.backgroundColor = 0xcccccc; entrada.text = ""; // configura la posicion de el texto de salida stage.addChild(entrada); entrada.x = 70; entrada.y = 150; stage.focus = entrada; } public function jugando():void { //las variables de estado se actualizan intentosRestantes--; // el numero de intentos restantes disminuye intentosHechos++; // los intentos jugados incrementan // se cambia el estado del juego estadoJuego = "Int. hechos: " + intentosHechos + " Int. restantes: " + intentosRestantes; numAdivino = uint(entrada.text); // captura la entrad de usuario en una variable de tipo entero positivo numAdivino = uint(entrada.text); if (numAdivino > numMisterioso) { salida.text = "tu numero es muy alto!!!..." + "\n" + estadoJuego; // verifica el estado del juego chekeaJuego(); } else if(numAdivino < numMisterioso){ salida.text = "tu numero es muy bajo!!!..." + "\n" + estadoJuego; // verifica el estado del juego chekeaJuego(); } else { salida.text = "exacto ese es el numero!!!"; // si se ha conseguido adivinar el numero se le asigna el varo de verdadero ganador = true; // funcion q finaliza el juego finalizaJuego(); } } public function chekeaJuego():void { entrada.text = ""; if (intentosRestantes < 1) { // si el numero de intentos restantes es menor que 1 // el juego finaliza finalizaJuego(); } } public function finalizaJuego():void { // verifica si el jugador a ganado if (ganador == true) { salida.text = "Este es el numero que pensaba!" + "\n" + "lo descubriste en " + intentosHechos + " intentos"; }else { salida.text = "Ya no tienes mas intentos" + "\n" + "el numero misterioso es " + numMisterioso; } //elimina el captador de entradas de usuario stage.removeEventListener(KeyboardEvent.KEY_DOWN, teclaPresionada); // una vez encontrado el numero misterioso se desabilita la entrada de datos entrada.type = "dynamic"; entrada.alpha = 0.5; } public function comienzaJuego():void { trace("el juego esta comenzando"); // inicializando las variables mensajeInicial = "Estoy pensando en un numero entre 0 y 99"; // configurar el numero misterioso //numMisterioso = 50; numMisterioso = Math.ceil(Math.random() * 100); trace("Numero que pienso es : " + numMisterioso); // incializa los campos de texto salida.text = mensajeInicial; entrada.text = ""; //---------------------------------------------- intentosRestantes = 10;// numero de intentos que se le da al jugador intentosHechos = 0; // numero de intentos que realiza el juegador, incialmente son 0 intentos estadoJuego = ""; // recien incia el juego por eso no tiene un estado de ganador o perdedor ganador = false;// esta variable determian si es jugador es ganador o perdedor, de inicio es perdedor // adiciona los eventos oyentes para el teclado stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPresionada); } private function teclaPresionada(event:KeyboardEvent):void { //captura entrada de teclado if (event.keyCode == Keyboard.ENTER) { jugando(); } } } }
La clase principal es una extensión de un Sprite, dentro del método principal existe dos métodos claves que es la configuración del campo de texto y el método que comienza el juego. El método confCampoTexto es el que le da un formato al texto presentado en pantalla, posición de los objetos, color, tipo de letra, etc.
La función comienzaJuego crea un numero aleatorio al que se le llama numero misterioso, he inicializa la cantidad de intentos restantes, hechos y un estado de juego, también se establece un capturado de eventos, en este caso se captura si la tecla es presionada. Si la tecla ENTER es presionada entonces se evalúa los datos que hemos introducido por teclado en la función jugando.
La función jugando actualiza variables; dentro de este método se encuentra una estructura de decisión con sentencias “if-else” que actúa dependiendo si se a adivinado el numero misterioso, dentro de esta estructura se llama a una función que chequea el estado del juego y verifica la cantidad de intentos que se tiene.
Por ultimo si se ha conseguido adivinar el numero; entonces se llama a la función que finaliza el juego esta función también verifica si se gana, después remueve el evento del teclado y deshabilita las capturas de entradas.
Estos conceptos son importantes por las siguientes razones.
• La primera razón es que se presenta la estructura de un juego completo, que contiene todo lo necesario para trabajar en proyectos más grandes y complejos, es un modelo programático desde el punto de vista del programador dejando de lado cuestiones de diseño.
• Nos hace comprender lo que son las entradas, salidas, variables, métodos y eventos de teclado y también un poco de la modularización del programa y que son los conceptos de fondo de la programación y la lógica de la programación de juegos.
• Establecemos una lógica interna de la estructura del juego sin embargo todo juego está enfocado al desarrollo visual que se le va a dar y ese tipo de conceptos aplicados también deben de ser estudiados para que tengan un aspecto visual propio y creativo.