Example #1
0
        //private bool hayNivelSiguiente()
        //{
        //    if (nivelActual == nivelActividad.experto)
        //        return false;
        //    else
        //        return true;
        //}

        public ResultadoActividad ingresarLetraUsuario(string letra)
        {
            ResultadoActividad result = new ResultadoActividad();

            //if (actPorTiempo)
            //{
            //    tiempoAgotado = false;
            //    //reloj.Start(); //si es por tiempo se inicia el reloj
            //    reloj.Enabled = true;
            //}

            result = act.ingresarLetraUsuario(letra);

            if (actPorTiempo && tiempoAgotado) //si es por tiempo y se agotó el mismo
            {
                result.tiempoAgotado = true;
            }
            else
            {
                result.tiempoAgotado = false;
            }

            actualizarInfoActividad();
            //reloj.Stop();
            //reloj.Enabled = false;

            tiempoAgotado = false; //se reinicia la variable
            return(result);
        }
Example #2
0
        public ResultadoActividad ingresarLetraUsuario(string letra)
        {
            ResultadoActividad result = new ResultadoActividad();
            comparación        comparaciónLetraUsuario;
            cargar             resultCarga = cargar.cargada;

            if (swHayPalabraNueva == true)
            {
                swHayPalabraNueva = false;                            //si la anterior fue palabra nueva, se resetea
            }
            if (this.swHayLecciónNueva == true)
            {
                this.swHayLecciónNueva = false;                                 //si la anterior fue lección nueva, se resetea
            }
            comparaciónLetraUsuario = chequearLetraUsuario(letra);

            if (comparaciónLetraUsuario == comparación.igual) //se chequea si la letra del usuario es correcta
            {
                palabraActualUsuario += letra;
                resultCarga           = cargarSiguienteLetraLección();
                result.letraCorrecta  = true;
            }
            else
            {
                if (auxLetras.esLetraConAcento(letraActualLección))
                {
                    result.esperarPorAcento = true;                                                 //si antes se escribió el acento correctamente y se esperaba por la vocal correcta, pero el usuario apretó una errónea, no se le pide que escriba de nuevo el acento, sólo la vocal
                }
                result.letraCorrecta = false;
            }

            if (comparaciónLetraUsuario == comparación.esperarAcento)
            {
                result.esperarPorAcento = true;
                result.letraCorrecta    = true;
            }

            if (this.swHayLecciónNueva) //si hay una lección nueva dentro de la misma actividad
            {
                result.nuevaLección = true;
            }
            else
            {
                result.nuevaLección = false;
            }

            //si hay aún letras en la lección o lecciones en la actividad
            if (resultCarga == cargar.cargada)
            {
                result.continúaActividad = true;
            }
            else
            {
                result.continúaActividad = false;
            }

            return(result);
        }
        //private bool hayNivelSiguiente()
        //{
        //    if (nivelActual == nivelActividad.experto)
        //        return false;
        //    else
        //        return true;
        //}
        
        public ResultadoActividad ingresarLetraUsuario(string letra)
        {
            ResultadoActividad result = new ResultadoActividad();
            //if (actPorTiempo)
            //{
            //    tiempoAgotado = false;
            //    //reloj.Start(); //si es por tiempo se inicia el reloj
            //    reloj.Enabled = true;
            //}

            result = act.ingresarLetraUsuario(letra);
            
            if (actPorTiempo && tiempoAgotado) //si es por tiempo y se agotó el mismo
                result.tiempoAgotado=true;
            else
                result.tiempoAgotado=false;

            actualizarInfoActividad();
            //reloj.Stop();
            //reloj.Enabled = false;

            tiempoAgotado = false; //se reinicia la variable
            return result;
        }
        private string elegirMensajeParaHablar(ResultadoActividad result)
        {
            string mensaje="";

            if (result.letraCorrecta)
                mensaje = "Muy bien, ";
            else
                mensaje = "Te equivocaste, ";


            switch (adminAct.TipoActividad)
            {
                //=============== palabras ======================
                case tipoActividad.palabras:
                    if (adminAct.swhayPalabraNueva)
                    {
                        mensaje += " Terminaste de escribir " + auxLetras.traducirCarácter(adminAct.PalabraAnteriorLección) + ". Ahora escribí la palabra " + auxLetras.traducirCarácter(adminAct.PalabraActualLección);
                    }
                    else
                    {
                        if (adminAct.LetraActualLección == " ") //si terminó la palabra
                            mensaje += " Terminaste  de escribir la palabra " + auxLetras.traducirCarácter(adminAct.PalabraActualLección) + ", ahora apretá espacio";
                        else //si todavía queda parte de la palabra por escribir
                        {
                            if (result.letraCorrecta && !result.esperarPorAcento) //si es la letra correcta y no hay que esperar por el acento
                                mensaje += " hasta ahora escribiste" + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);
                            else if (result.letraCorrecta && result.esperarPorAcento) //si acaba de acertar el acento
                                mensaje += auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + ". Ahora escribí la vocal " + auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección) + " para formar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                            else if (!result.letraCorrecta && result.esperarPorAcento) //si ya acertó el acento, pero erró la vocal que se esperaba; o si erró el tipo de acento que se esperaba
                            {
                                mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar ";
                                if (!auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si lo que tiene que escribir es el acento
                                    mensaje += auxLetras.traducirCarácter(auxLetras.obtenerAcentoDeVocal(adminAct.LetraActualLección));
                                else
                                    mensaje += auxLetras.traducirCarácter(auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección));

                                mensaje += " para escribir " + auxLetras.traducirCarácter(adminAct.LetraActualLección);

                                if (auxLetras.esLetraConAcento(adminAct.LetraAnteriorLección) || auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si ya escribió el acento
                                    mensaje += ". Ya escribiste " + auxLetras.traducirCarácter(adminAct.LetraAnteriorLección);
                            }

                            else if (!result.letraCorrecta && !result.esperarPorAcento) //si no es la letra esperada pero a su vez no había que esperar por la vocal del acento
                            {
                                mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                                if (adminAct.PalabraActualUsuario != "") //si el usuario ha escrito algo
                                    mensaje += ". Llevás escrito" + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);
                                else
                                    mensaje += ". Todavía no has escrito nada";
                            }
                        }
                    }
                    break;
                //=============== sílabas ======================
                case tipoActividad.sílabas:
                    if (adminAct.swhayPalabraNueva)
                        mensaje += " Terminaste de escribir " + auxLetras.traducirCarácter(adminAct.PalabraAnteriorLección) + ". Ahora escribí la sílaba " + auxLetras.traducirCarácter(adminAct.PalabraActualLección);
                    else
                        if (adminAct.LetraActualLección == " ")
                            mensaje += " Terminaste  de escribir la sílaba " + auxLetras.traducirCarácter(adminAct.PalabraActualLección) + ", ahora apretá espacio";
                        else
                        {
                            if (result.letraCorrecta && !result.esperarPorAcento)
                                mensaje += "  hasta ahora escribiste" + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);

                            if (result.letraCorrecta && result.esperarPorAcento) //si acaba de acertar el acento
                                mensaje += auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + ". Ahora escribí la vocal " + auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección) + " para formar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                            else if (!result.letraCorrecta && result.esperarPorAcento) //si ya acertó el acento, pero erró la vocal que se esperaba; o si erró el tipo de acento que se esperaba
                            {
                                mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar ";
                                if (!auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si lo que tiene que escribir es el acento
                                    mensaje += auxLetras.traducirCarácter(auxLetras.obtenerAcentoDeVocal(adminAct.LetraActualLección));
                                else
                                    mensaje += auxLetras.traducirCarácter(auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección));

                                mensaje += " para escribir " + auxLetras.traducirCarácter(adminAct.LetraActualLección);

                                if (auxLetras.esLetraConAcento(adminAct.LetraAnteriorLección) || auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si ya escribió el acento
                                    mensaje += ". Ya escribiste " + auxLetras.traducirCarácter(adminAct.LetraAnteriorLección);
                            }

                            else if (!result.letraCorrecta && !result.esperarPorAcento) //si no es la letra esperada pero a su vez no había que esperar por la vocal del acento
                            {
                                mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                                if (adminAct.PalabraActualUsuario != "") //si el usuario ha escrito algo
                                    mensaje += ". Llevás escrito" + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);
                                else
                                    mensaje += ". Todavía no has escrito nada";
                            }


                        }
                    break;
                //=============== números ======================
                case tipoActividad.números:
                    if (adminAct.swhayPalabraNueva)
                        mensaje += " Terminaste de escribir " + auxLetras.traducirCarácter(adminAct.PalabraAnteriorLección) + ". Ahora escribí el número " + auxLetras.traducirCarácter(adminAct.PalabraActualLección);
                    else
                        if (adminAct.LetraActualLección == " ")
                            mensaje += " Terminaste  de escribir el número " + auxLetras.traducirCarácter(adminAct.PalabraActualLección) + ", ahora apretá espacio";
                        else
                        {
                            //if (result.letraCorrecta)
                            //    mensaje += " hasta ahora escribiste el número " + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);
                            //else
                            //{
                            //    mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                            //    if (adminAct.PalabraActualUsuario != "") //si el usuario ha escrito algo
                            //        mensaje += ". Llevás escrito" + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);
                            //    else
                            //        mensaje += ". Todavía no has escrito nada";



                            if (result.letraCorrecta && !result.esperarPorAcento)
                                mensaje += "  hasta ahora escribiste el número " + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);

                            if (result.letraCorrecta && result.esperarPorAcento) //si acaba de acertar el acento
                                mensaje += auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + ". Ahora escribí la vocal " + auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección) + " para formar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                            else if (!result.letraCorrecta && result.esperarPorAcento) //si ya acertó el acento, pero erró la vocal que se esperaba; o si erró el tipo de acento que se esperaba
                            {
                                mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar ";
                                if (!auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si lo que tiene que escribir es el acento
                                    mensaje += auxLetras.traducirCarácter(auxLetras.obtenerAcentoDeVocal(adminAct.LetraActualLección));
                                else
                                    mensaje += auxLetras.traducirCarácter(auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección));

                                mensaje += " para escribir " + auxLetras.traducirCarácter(adminAct.LetraActualLección);

                                if (auxLetras.esLetraConAcento(adminAct.LetraAnteriorLección) || auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si ya escribió el acento
                                    mensaje += ". Ya escribiste " + auxLetras.traducirCarácter(adminAct.LetraAnteriorLección);
                            }

                            else if (!result.letraCorrecta && !result.esperarPorAcento) //si no es la letra esperada pero a su vez no había que esperar por la vocal del acento
                            {
                                mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                                if (adminAct.PalabraActualUsuario != "") //si el usuario ha escrito algo
                                    mensaje += ". Llevás escrito" + auxLetras.traducirCarácter(adminAct.PalabraActualUsuario);
                                else
                                    mensaje += ". Todavía no has escrito nada";
                            }
                        }
                        
                    break;
                //=============== letras y símbolos ======================
                default:
                    if (result.letraCorrecta && !result.esperarPorAcento)
                        mensaje += " Tecla apretada: " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + ". Ahora apretá la tecla " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                    else if (result.letraCorrecta && result.esperarPorAcento) //si acaba de acertar el acento
                        mensaje += auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + ". Ahora escribí la vocal " + auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección) + " para formar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                    else if (!result.letraCorrecta && result.esperarPorAcento) //si ya acertó el acento, pero erró la vocal que se esperaba; o si erró el tipo de acento que se esperaba
                    {
                        mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar ";
                        if (!auxLetras.esAcento(adminAct.LetraAnteriorLección)) //si lo que tiene que escribir es el acento
                            mensaje += auxLetras.traducirCarácter(auxLetras.obtenerAcentoDeVocal(adminAct.LetraActualLección));
                        else
                            mensaje += auxLetras.traducirCarácter(auxLetras.obtenerVocalSinAcento(adminAct.LetraActualLección));

                        mensaje += " para escribir " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                    }

                    else if (!result.letraCorrecta && !result.esperarPorAcento) //si no es la letra esperada pero a su vez no había que esperar por la vocal del acento
                    {
                        mensaje += " apretaste " + auxLetras.traducirCarácter(adminAct.LetraActualUsuario) + " pero tenías que apretar " + auxLetras.traducirCarácter(adminAct.LetraActualLección);
                    }
                    break;
            }

            if (!result.letraCorrecta)
            {
                char letra;
                char.TryParse(adminAct.LetraActualLección, out letra);
                mensaje += elegirAyudaQuéDedoUsar(letra);
            }

            return mensaje;
        }
        //void animarTeclado(Key teclaApretada)
        //{
        //    switch (teclaApretada)
        //    {
        //        case Key.A:
        //            teclado.BeginStoryboard(tecla);
        //            break;
        //        case Key.B:
        //            teclado.b.FontSize = 24;
        //            break;
        //    }
        //}

        private void ventana_KeyDown(object sender, KeyEventArgs e)
        {
            
            string textoParaHablar;

            ResultadoActividad result = new ResultadoActividad();
            string letra = e.Key.ToString().ToLower();

            try
            {
                if (e.Key == Key.RightShift || e.Key == Key.LeftShift) //si se aprieta el shift
                    swShiftActivo = true;

                if (e.Key == Key.RightAlt || e.Key == Key.LeftAlt) //si se aprieta el alt
                    swAltActivo = true;

                if (e.Key == Key.Capital)
                    if (e.IsToggled)
                        voz.hablarAsync("Bloqueador de mayúsculas activado");
                    else
                        voz.hablarAsync("Bloqueador de mayúsculas desactivado");

                if (e.Key == Key.NumLock)
                    if (e.IsToggled)
                        voz.hablarAsync("Bloqueador de números activado");
                    else
                        voz.hablarAsync("Bloqueador de números desactivado");

                bool swArribaEñe = false;
                if (adminPref.lugarDelAcento == lugarAcento.arribaDeLaEñe)
                    swArribaEñe = true;

                letra = auxLetras.corregirCarácter(letra, swShiftActivo, swAltActivo, swArribaEñe);

                if (auxLetras.esCarácterLegible(letra))
                {
                    if (letra == "space") letra = " ";
                    result = adminAct.ingresarLetraUsuario(letra.ToString());
                    if (result.continúaActividad)
                    {
                        if (result.letraCorrecta && !result.esperarPorAcento) //si la letra es correcta pero no hay que esperar por una vocal por el acento
                        {
                            posiciónCarácterActualEnPalabra++;
                        }
                    }
                    else
                    {
                        MediaPlayer reproductor = new MediaPlayer(); //se reproduce el sonido
                        reproductor.Close();
                        string rutaInicial = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\Recursos\Sonidos\";
                        if (File.Exists(rutaInicial + "finActividad.wav"))
                        {
                            reproductor.Open(new Uri(rutaInicial + "finActividad.wav"));
                            reproductor.Play();
                        }

                        adminEst.guardarEstadísticas(idUsuario, idActividad, adminAct.IdLecciónActual); //se guarda la estadística

                        string mensaje = "Muy bien! Terminaste todas las lecciones de esta actividad para practicar ";
                        switch (adminAct.TipoActividad)
                        {
                            case tipoActividad.palabras:
                                mensaje += " palabras";
                                break;
                            case tipoActividad.sílabas:
                                mensaje += " sílabas";
                                break;
                            case tipoActividad.letras:
                                mensaje += " letras";
                                break;
                            case tipoActividad.números:
                                mensaje += " números";
                                break;
                            case tipoActividad.símbolos:
                                mensaje += " símbolos";
                                break;
                        }

                        mensaje += "!. Ahora vas a ir al menú principal así podés elegir otra actividad para seguir practicando";

                        voz.hablar(mensaje);


                        //Lecciones ventanaAct = new Lecciones(rutaAct, tipoAct, idUsuario);
                        //ventanaAct.swVolviendo = true;
                        //ventanaAct.Show();
                        //this.Close();
                        Actividades ventanaAct = new Actividades(idUsuario);
                        ventanaAct.swVolviendo = true;
                        ventanaAct.Show();
                        this.Close();
                        return;
                    }

                    textoParaHablar = elegirMensajeParaHablar(result);

                    if (result.letraCorrecta) //se cargan las estadísticas
                        adminEst.cargarLetraAcierto(char.Parse(letra));
                    else
                        adminEst.cargarLetraError(char.Parse(letra));

                    medidor1.actualizarGráfico(adminEst.estadística.aciertos, adminEst.estadística.errores, miPincel); //se actualiza el medidor


                    if (result.tiempoAgotado)
                        textoParaHablar += ", tiempo agotado";


                    if (adminAct.swhayPalabraNueva)
                        cargarPalabra();

                    if (adminAct.swhayLecciónNueva)
                        adminEst.guardarEstadísticas(idUsuario, idActividad, adminAct.IdLecciónAnterior); //cambiar 1,1 por el número de la act y de la lecc

                    e.Handled = true; //se evita que se procese la tecla en el sistema, esto por los acentos y diéresis
                    //se actualizan las estadísticas
                    actualizarTxtEstadísticas();

                    animarTexto();

                    voz.hablarAsync(textoParaHablar);
                }

                if (e.Key == Key.Escape) //si aprieta escape, volver a las lecciones
                {
                    Lecciones ventanaAct = new Lecciones(rutaAct, tipoAct, idUsuario, idActividad);
                    ventanaAct.swVolviendo = true;
                    ventanaAct.Show();
                    this.Close();
                }

                if (e.Key == Key.F1) //F1, recordar texto actual a escribir y lo ya escrito
                {
                    recordarPalabraActual();
                }

                if (e.Key == Key.F2) //F2, deletrear palabra
                {
                    deletrearPalabraActual();
                }

                if (e.Key == Key.F3) //F3, ayuda de qué dedo apretar
                {
                    char miLetra;
                    char.TryParse(adminAct.LetraActualLección, out miLetra);
                    voz.hablarAsync(elegirAyudaQuéDedoUsar(miLetra));
                }

                if (e.Key == Key.F4) //F4, cambia el estado de visibilidad del teclado en pantalla
                {
                    if (miTeclado.IsVisible)
                    {
                        miTeclado.Visibility = Visibility.Hidden;
                        txtTexto.Margin = new Thickness(53, this.Width / 4, 49, 0);
                        voz.hablarAsync("Ocultando el teclado en pantalla");
                    }
                    else
                    {
                        miTeclado.Visibility = Visibility.Visible;
                        txtTexto.Margin = new Thickness(53, 36, 49, 0);
                        voz.hablarAsync("Haciendo visible el teclado en pantalla");
                    }
                }

                if (e.Key == Key.F5) //F5, cambiar el acento entre la derecha de la eñe y arriba de la misma
                {
                    if (adminPref.lugarDelAcento == lugarAcento.arribaDeLaEñe)
                    {
                        adminPref.lugarDelAcento = lugarAcento.derechaDeLaEñe;
                        voz.hablarAsync("Configurando el acento agudo a la derecha de la eñe");
                    }
                    else
                    {
                        adminPref.lugarDelAcento = lugarAcento.arribaDeLaEñe;
                        voz.hablarAsync("Configurando el acento agudo arriba y a la derecha de la eñe");
                    }
                }

                if (e.Key == Key.F6) //F6, lee las estadísticas
                {
                    actualizarMensajeEstadísticasVoz();
                }

                if (e.Key == Key.F9) //F9, abre el editor de actividades
                {
                    abrirActividades();
                }

                if (e.Key == Key.F8) //F8, abre el estadísticas
                {
                    abrirEstadísticas();
                }

                if (e.Key == Key.F12) //F12, abre las preferencias
                {
                    abrirPreferencias();
                }

                if (e.Key == Key.RightCtrl || e.Key == Key.LeftCtrl)//si usa las flechas
                {
                    voz.callar();
                }

                //e.Handled = true; //se evita que se procese la tecla en el sistema, esto por los acentos, diéresis y efes
            }
            catch (Exception ex)
            {
                MessageBox.Show("Para enviar al desarrollador. Mensaje del error: " + ex.Message);
            }
        }