Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” IV

Windows Técnico

Sindicación

Proximos HOLs

Loading...

clip_image002

En estos días ya son muchos los usuarios que han enviado comentarios a través del canal codeplex sobre la aplicación de ejemplo “Simon Dice Renewed”, con diferentes dudas y sugerencias para ampliaciones en este divertido juego desarrollado con fines didácticos, lo cual indica que este trabajo ha despertado la curiosidad tanto entre nuevos desarrolladores ,que ven esta aplicación una buena forma de introducirse en el mundo de la programación para este tipo de dispositivos, como entre los desarrolladores no tan nuevos, que han encontrado en este proyecto una nostálgica puerta abierta a sus recuerdos de infancia o niñez.

clip_image004

Para continuar con la serie en esta ocasión se mostrarán las funciones que se encargarán del desarrollo en general del proyecto.

 

clip_image006

Funciones contenidas dentro de MainWindow

·            MainWindow

Esta función es el constructor de la clase que como puede observarse inicializa los componentes de los formularios que constituyen la aplicación.

 public MainWindow()

         {

            InitializeComponent();

                 

         }

 

·         slider_ValueChanged

Como se comentaba previamente, esta función se desencadenara cuando se haga un cambio en el “slider” para variar el valor del volumen. Se variara de forma conjunta tanto el slider como el “progressBar”, pero como el rango de valores del “progressBar” es diez veces más grande, pues se multiplicará por 10 el valor que tenga el slider en cada momento.

Para modificar el volumen en tiempo de ejecución se ira a la configuración (“Settings”) del objeto “player”, y allí se modifica el valor del volumen.

 

private void slider1_ValueChanged(object sender,

RoutedPropertyChangedEventArgs<double> e)

        {

            this.progressBar1.Value = slider1.Value * 10;

            Player.settings.volume = (int)(this.progressBar1.Value);

 

        }

 

·         Windows_Loaded

Esta función se desencadena al inicio de la ejecución del programa e inicializa las variables con las cuales se va a trabajar en el desarrollo del juego.Se comentará paso a paso para ver la finalidad de cada línea de código.

    // Se inicializa el objeto de “WindowsMediaPlayer”, y se establece el valor del volumen
    // e
n 50 de intensidad.

    Player = new WindowsMediaPlayer();

            Player.settings.volume = 50;

 

    // para manipular el volumen de la emisión de sonidos del reproductor, se ha puesto un

    // slider de forma conjunta con un progressbar para que se visualice en todo momento el

    // valor del volumen. Se establecen ambos en la mitad de sus posibles valores.

            progressBar1.Value = 50;

            slider1.Value = 5;

           

         // Se cambia la imagen de fondo, de la forma en la que se ha procedido en

    // anteriores publicaciones.

            ImageBrush imgBrush = new ImageBrush();

            imgBrush.ImageSource = new BitmapImage(new

Uri(@"pack://application:,,,/SimonDice;component/Img/pez.jpg"));

            canvas1.Background = imgBrush;

       

    // se inicializa la cadena sonido con los 6 posibles sonidos que podrán

    // ser utilizados por parte de los botones del juego.

            sonido = new String[6];

            sonido[0] = @"/Sonidos/risahomero.mp3";

            sonido[1] = @"/Sonidos/rock.mp3";

            sonido[2] = @"/Sonidos/willSmith.mp3";

            sonido[3] = @"/Sonidos/tiburon.mp3";

            sonido[4] = @"/Sonidos/tambores.mp3";

            sonido[5] = @"/Sonidos/secreto.mp3";

            sonidobtn = new String[6];

    lista = new List<int>();

 

    // Se inicializa el objeto Random para posteriormente generar números aleatorios, en

    // este caso se utilizara como semilla el milisegundo actual

            r = new Random(DateTime.Now.Millisecond);

       

    // Se inicializan los sonidos(véase en la descripción de la siguiente función)

            InicializarSonidos();

 

            txtRonda.Text = String.Format("{0}", nivel); //Se coloca el nivel actual.           

                  

    // Se deshabilitan los botones, hasta que se pulse sobre el botón play

            deshabilitarBotones();

 

·         InicializarSonidos

Esta función se encarga de cargar los valores las canciones que irán en cada botón, de forma que no se repita el mismo sonido en dos botones diferentes. La idea principal es introducir cada número en una lista y comprobar si existe, en caso afirmativo se vuelve a generar otro número, en caso contrario se añade el número a la lista y se asigna el sonido a la lista “sonidoBtn” en la posición determinada.

private void InicializarSonidos()

        {

            for (int i = 0; i < sonidobtn.Length; i++)

            {

                Boolean entrar = true;

                while (entrar)

                {

                    int a = (int)(r.Next(0, 6));

                    if (!numero.Contains(a))

                    {

                        sonidobtn[i] = sonido[a];

                        numero.Add(a);

                        entrar = false;

                    }

                }

            }

        }

 

·         habilitarBotones y deshabilitarBotones

Parece bastante intuitivo lo que hace esta función por el nombre con el cual ha sido declarado y evidentemente realiza las acciones descritas sobre botos los botones excepto el “btnJugar” y el “btnSalir”.

 

private void habilitarBotones()

       {

            btn1.IsEnabled = true;

            btn2.IsEnabled = true;

            btn3.IsEnabled = true;

            btn4.IsEnabled = true;

            btn5.IsEnabled = true;

            btn6.IsEnabled = true;

       }

private void deshabilitarBotones()

       {

            btn1.IsEnabled = false;

            btn2.IsEnabled = false;

            btn3.IsEnabled = false;

            btn4.IsEnabled = false;

            btn5.IsEnabled = false;

            btn6.IsEnabled = false;

       }

·         btnEntrar_MouseLeftButtonDown y btnEntrar_touchDown

 

Estas dos funciones representan la acción de ingresar en el área de juego después de hacer clic izquierdo o pulsar sobre el “btnJugar” respectivamente.

private void btnEntrar_MouseLeftButtonDown(object sender,

MouseButtonEventArgs e)

        {

            //

            Inicio.Visibility = Visibility.Hidden;

            juego.Visibility = Visibility.Visible;

           

            nivel = 1;

            txtRonda.Text = String.Format("{0}", nivel);

            btnJugar.Source = new BitmapImage(new

Uri(@"pack://application:,,,

/SimonDice;component/Img/" +

"btnJugar.png"));

            btnJugar.IsEnabled = true;

        }

 

 

·         BajarNivel y SubirNivel

Como su propio nombre indica, las siguientes funciones modifican el valor de la variable “nivel”, para subir o bajar la dificultad del juego.

private void bajarNivel()

        {

            nivel--;

           

        }

private void subirNivel()

        {

            Nivel++;

           

        }

 

 

·         JugarLista

Esta función se podría considerar como la ejecución de un jugador implícito, ya que sigue un patrón y asegura que en cada nivel se realizan unas “pulsaciones virtuales” sobre los botones de juego,para que después “el jugador real” intente reproducir la secuencia de correctamente. Se explicará el código por medio de comentarios.

private void jugarLista()

        {

            // Dentro de la variable “lista” están las pulsaciones que se han generado

    // aleatoriamente, por lo tanto, para cada elemento de la lista se generara una

    // pulsación “virtual”

            for (int i = 0; i < lista.Count; i++)

            {

               

                thisbtn = lista[i];

 

// Se cambia la apariencia del botón para que parezca pulsado

 

                imagenpulsada(thisbtn);

                deshabilitarBotones();         //Se deshabilitan los botones.

               

// Se establece el sonido a reproducir, más adelante se verá la forma en la que

// se asigna un sonido a la variable son.

                establecerSonido(thisbtn);

         

                Player.controls.stop();        //Se detiene el reproductor   

 

// Se establece el sonido que se va a reproducir

                Player.URL = System.IO.Directory.GetCurrentDirectory() + son;

 

//Se reproduce el sonido

                Player.controls.play();

 

// Aquí se puede observar un método diferente para detener la ejecución de la

// función “JugarLista”.

 

//Se recoge la fecha exacta en la que pasa por este punto.

                DateTime a = DateTime.Now;

                int j = 0;

 

// Se vuelve a ejecutar el bucle mientras la diferencia entre la fecha guardada

// anteriormente y la actual sea menor a 2 segundos.

                while (j < 2)

                {

                    DateTime b = DateTime.Now;

                    j = (int)((b - a).TotalSeconds);

         // Con DoEvent se busca si hay alguna acción en pendiente de ejecución, y si la hay,

         // se ejecuta dicha acción.En este caso se ejecuta el reproductor se sonido ya que

         // no podía reproducirse hasta que termine la ejecución de la función.

                    System.Windows.Forms.Application.DoEvents();

                }

 

                //Se vuelve a restablecer a su apariencia habitual a la imagen pulsada

                imagenNormal(thisbtn);

            }

 

   // Después de pulsarse virtualmente todos los botones contenidos en la “lista”, se

   // habilitarían los botones para empezar a reproducir la secuencia.

            habilitarBotones();

        }

En la siguiente entrada se finalizará la descripción y análisis de esta divertida aplicación terminando con las funciones restantes que aun no han sido descritas, así como una visión general del funcionamiento de la aplicación una vez conocidos todos sus componentes.

Para acabar, recuerda que si quieres aprender mucho más sobre los secretos de los sistemas Microsoft Windows, te recomendamos leer el libro de Sergio de los Santos "Máxima Seguridad en Windows: Secretos Técnicos" , o siempre puedes suscribirte al Canal RSS de Windows Técnico para estar al día de las novedades e información técnica de interés.

image

  

---------------------------------------------------------------------------------------------------------------------------

Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” I

Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” II

Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” III

Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” IV

Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” V

Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed”. Anexo

----------------------------------------------------------------------------------------------------------------------------

 


Enviado sep 06 2011, 11:31 por Jhonattan Fiestas

Comentarios

Windows Técnico escrito Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” V
en 09-13-2011 18:24

En principio ésta sería la última entrada de la serie correspondiente al análisis del código que se encuentra

Windows Técnico escrito Desarrollo de aplicación de ejemplo Windows 7 Multitouch: “Simón Dice Renewed” .Anexo
en 09-15-2011 21:07

       La presente entrada corresponde con el anexo anunciado en el post previo

Añadir un comentario

(requerido)  
(opcional)
(requerido)  
Recordarme
If you can't read this number refresh your screen
Enter the numbers above: