コード例 #1
0
class Juego(object):
    """Clase que carga todo lo referente al juego"""
    def __init__(self, ctrl):
        self.controlador = ctrl

        self.mensaje_encriptado = ""
        self.mensaje_desencriptado = ""

        self.consulta_query = "SELECT * FROM Palabra;"
        self.conexion = Conexion()
        self.palabras = self.conexion.enviar_consulta(self.consulta_query)

        self.fondo = "view/img/fondos/Espera-espectral.jpg"

        self.abecedario = [
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
        ]

        self.mensajes()

        self.construir()

        self.vida_actuales = 2
        self.puntuacion = 0
        self.dificultad = 1
        self.tiempoJuego = 0
        # 1 -> Facil
        # 2 -> medio
        # 3 -> Dificil
        # Para implementar

    def mensajes(self):
        self.titulos = {
            "e_invertir": "Encriptar Invertir",
            "d_invertir": "Desencriptar Invertir",
            "e_atbash": "Encriptar Atbash",
            "d_atbash": "Desencriptar Atbash",
            "e_polibi": "Encriptar Polibi",
            "d_polibi": "Desencriptar Polibi",
            "e_cesar": "Encriptar Cesar",
            "d_cesar": "Desencriptar Cesar"
        }

    def construir(self):
        """
        Metodo que va a generar la construccion grafica del juego
        """
        self.fondo = Imagen(self.fondo, (0, 0))
        self.fondo.cambiarEscala(0.5)
        self.titulo = Titulo("KACH!", 120, 450, 70, 2, (36, 32, 163))
        self.lblNivel = Titulo("Nivel 1", 550, 30, 40, 2, (36, 32, 163))

        self.cuadro = Boton("")
        self.cuadro.modificarPosicion(10, 50)
        self.cuadro.modificarTamano(620, 200)
        self.cuadro.modificarPosicionTexto(30, 27)
        self.cuadro.modificarColor1(234, 234, 216)
        self.cuadro.modificarColorLetra1(21, 67, 96)
        self.cuadro.modificarColor2(234, 234, 216)
        self.cuadro.modificarColorLetra2(21, 67, 96)
        self.cuadro.modificarColor3(234, 234, 216)
        self.cuadro.modificarColorLetra3(21, 67, 96)
        self.cuadro.modificarEvento(0)

        self.cuadro_corazon = Boton("Vidas:")
        self.cuadro_corazon.modificarPosicion(10, 360)
        self.cuadro_corazon.modificarTamano(180, 40)
        self.cuadro_corazon.modificarPosicionTexto(30, 20)
        self.cuadro_corazon.modificarColor1(255, 255, 255)
        self.cuadro_corazon.modificarColorLetra1(21, 67, 96)
        self.cuadro_corazon.modificarColor2(255, 255, 255)
        self.cuadro_corazon.modificarColorLetra2(21, 67, 96)
        self.cuadro_corazon.modificarColor3(255, 255, 255)
        self.cuadro_corazon.modificarColorLetra3(21, 67, 96)
        self.cuadro_corazon.modificarEvento(0)

        self.cuadro_tiempo = Boton("Tiempo:")
        self.cuadro_tiempo.modificarPosicion(10, 10)
        self.cuadro_tiempo.modificarTamano(180, 40)
        self.cuadro_tiempo.modificarPosicionTexto(30, 20)
        self.cuadro_tiempo.modificarColor1(255, 255, 255)
        self.cuadro_tiempo.modificarColorLetra1(21, 67, 96)
        self.cuadro_tiempo.modificarColor2(255, 255, 255)
        self.cuadro_tiempo.modificarColorLetra2(21, 67, 96)
        self.cuadro_tiempo.modificarColor3(255, 255, 255)
        self.cuadro_tiempo.modificarColorLetra3(21, 67, 96)
        self.cuadro_tiempo.modificarEvento(0)

        self.lblTiempo = Titulo("30", 120, 32, 20, 2, (20, 90, 50))

        self.cuadro_Puntuacion = Boton("Puntuacion:")
        self.cuadro_Puntuacion.modificarPosicion(450, 360)
        self.cuadro_Puntuacion.modificarTamano(180, 40)
        self.cuadro_Puntuacion.modificarPosicionTexto(50, 20)
        self.cuadro_Puntuacion.modificarColor1(255, 255, 255)
        self.cuadro_Puntuacion.modificarColorLetra1(21, 67, 96)
        self.cuadro_Puntuacion.modificarColor2(255, 255, 255)
        self.cuadro_Puntuacion.modificarColorLetra2(21, 67, 96)
        self.cuadro_Puntuacion.modificarColor3(255, 255, 255)
        self.cuadro_Puntuacion.modificarColorLetra3(21, 67, 96)
        self.cuadro_Puntuacion.modificarEvento(0)

        self.lblPuntuacion = Titulo("0", 590, 380, 20, 2, (36, 32, 163))

        img_vidas = "view/img/corazon.jpg"
        self.vida1 = Imagen(img_vidas, (65, 360))
        self.vida1.cambiarEscala(0.25)
        self.vida2 = Imagen(img_vidas, (105, 360))
        self.vida2.cambiarEscala(0.25)
        self.vida3 = Imagen(img_vidas, (145, 360))
        self.vida3.cambiarEscala(0.25)

        self.btnOpcion1 = Boton("Opcion1")
        self.btnOpcion1.modificarPosicion(30, 280)
        self.btnOpcion1.modificarTamano(140, 50)
        self.btnOpcion1.modificarPosicionTexto(60, 27)
        self.btnOpcion1.modificarColor1(234, 234, 216)
        self.btnOpcion1.modificarColorLetra1(21, 67, 96)
        self.btnOpcion1.modificarColor2(209, 210, 179)
        self.btnOpcion1.modificarColorLetra2(21, 67, 96)
        self.btnOpcion1.modificarColor3(91, 202, 213)
        self.btnOpcion1.modificarColorLetra3(21, 67, 96)
        self.btnOpcion1.modificarEvento(8)
        self.btnOpcion2 = Boton("Opcion2")
        self.btnOpcion2.modificarPosicion(180, 280)
        self.btnOpcion2.modificarTamano(140, 50)
        self.btnOpcion2.modificarPosicionTexto(60, 27)
        self.btnOpcion2.modificarColor1(234, 234, 216)
        self.btnOpcion2.modificarColorLetra1(21, 67, 96)
        self.btnOpcion2.modificarColor2(209, 210, 179)
        self.btnOpcion2.modificarColorLetra2(21, 67, 96)
        self.btnOpcion2.modificarColor3(91, 202, 213)
        self.btnOpcion2.modificarColorLetra3(21, 67, 96)
        self.btnOpcion2.modificarEvento(9)
        self.btnOpcion3 = Boton("Opcion3")
        self.btnOpcion3.modificarPosicion(330, 280)
        self.btnOpcion3.modificarTamano(140, 50)
        self.btnOpcion3.modificarPosicionTexto(60, 27)
        self.btnOpcion3.modificarColor1(234, 234, 216)
        self.btnOpcion3.modificarColorLetra1(21, 67, 96)
        self.btnOpcion3.modificarColor2(209, 210, 179)
        self.btnOpcion3.modificarColorLetra2(21, 67, 96)
        self.btnOpcion3.modificarColor3(91, 202, 213)
        self.btnOpcion3.modificarColorLetra3(21, 67, 96)
        self.btnOpcion3.modificarEvento(10)
        self.btnOpcion4 = Boton("Opcion4")
        self.btnOpcion4.modificarPosicion(480, 280)
        self.btnOpcion4.modificarTamano(140, 50)
        self.btnOpcion4.modificarPosicionTexto(60, 27)
        self.btnOpcion4.modificarColor1(234, 234, 216)
        self.btnOpcion4.modificarColorLetra1(21, 67, 96)
        self.btnOpcion4.modificarColor2(209, 210, 179)
        self.btnOpcion4.modificarColorLetra2(21, 67, 96)
        self.btnOpcion4.modificarColor3(91, 202, 213)
        self.btnOpcion4.modificarColorLetra3(21, 67, 96)
        self.btnOpcion4.modificarEvento(11)

        self.btnInicio = Boton("Salir")
        self.btnInicio.modificarPosicion(460, 420)
        self.btnInicio.modificarTamano(160, 50)
        self.btnInicio.modificarPosicionTexto(30, 27)
        self.btnInicio.modificarColor1(234, 234, 216)
        self.btnInicio.modificarColorLetra1(21, 67, 96)
        self.btnInicio.modificarColor2(209, 210, 179)
        self.btnInicio.modificarColorLetra2(21, 67, 96)
        self.btnInicio.modificarColor3(91, 202, 213)
        self.btnInicio.modificarColorLetra3(21, 67, 96)
        self.btnInicio.modificarEvento(6)

        self.pregunta = Titulo("", 320, 60, 17, 3, (36, 32, 163))
        self.pregunta1 = Titulo("", 320, 90, 17, 3, (36, 32, 163))
        self.pregunta2 = Titulo("", 320, 120, 17, 3, (36, 32, 163))
        self.pregunta3 = Titulo("", 320, 150, 17, 3, (36, 32, 163))
        self.pregunta4 = Titulo("", 320, 180, 17, 3, (36, 32, 163))
        self.pregunta5 = Titulo("", 320, 210, 17, 3, (36, 32, 163))
        self.pregunta6 = Titulo("", 320, 240, 17, 3, (36, 32, 163))

        #Enviar al controlador
        self.controlador.enviarEventoBoton(self.btnOpcion1)
        self.controlador.enviarEventoBoton(self.btnOpcion2)
        self.controlador.enviarEventoBoton(self.btnOpcion3)
        self.controlador.enviarEventoBoton(self.btnOpcion4)
        self.controlador.enviarEventoBoton(self.btnInicio)

    def activar_botones(self):
        self.btnOpcion1.modificarActivo(True)
        self.btnOpcion2.modificarActivo(True)
        self.btnOpcion3.modificarActivo(True)
        self.btnOpcion4.modificarActivo(True)
        self.btnInicio.modificarActivo(True)

    def desactivar_botones(self):
        self.btnOpcion1.modificarActivo(False)
        self.btnOpcion2.modificarActivo(False)
        self.btnOpcion3.modificarActivo(False)
        self.btnOpcion4.modificarActivo(False)
        self.btnInicio.modificarActivo(False)

    def reiniciar(self):
        #self.seleccionar_pregunta()
        self.vida_actuales = 2
        self.puntuacion = 0
        self.dificultad = 1

    def num_aleatorio(self, ini, fin):
        return random.randint(ini, fin)

    def pintar(self, screen, tiempo):
        """
        Pinta en pantalla la parte grafica

        @param screen: Pantalla en la que se va a pintar
        @type screen: Surface
        """
        self.fondo.ponerImagen(screen)
        self.titulo.pintar(screen)
        self.lblNivel.pintar(screen)

        self.cuadro.pintar(screen)
        self.cuadro_corazon.pintar(screen)

        self.cuadro_tiempo.pintar(screen)
        self.cuadro_Puntuacion.pintar(screen)

        self.tiempoJuego = tiempo
        if (tiempo <= 3):
            self.lblTiempo.modificarColor((148, 49, 38))
        elif (tiempo <= 6):
            self.lblTiempo.modificarColor((229, 175, 32))
        else:
            self.lblTiempo.modificarColor((91, 229, 69))
        self.lblTiempo.modificarTexto(str(tiempo))
        self.lblTiempo.pintar(screen)

        self.lblPuntuacion.modificarTexto(str(self.puntuacion))
        self.lblPuntuacion.pintar(screen)

        if (self.vida_actuales == 2):
            self.vida1.ponerImagen(screen)
            self.vida2.ponerImagen(screen)
            self.vida3.ponerImagen(screen)
        elif (self.vida_actuales == 1):
            self.vida1.ponerImagen(screen)
            self.vida2.ponerImagen(screen)
        elif (self.vida_actuales == 0):
            self.vida1.ponerImagen(screen)
        else:
            #GAME OVER
            pass

        self.pregunta.pintar(screen)
        self.pregunta1.pintar(screen)
        self.pregunta2.pintar(screen)
        self.pregunta3.pintar(screen)
        self.pregunta4.pintar(screen)
        self.pregunta5.pintar(screen)
        self.pregunta6.pintar(screen)

        self.btnOpcion1.pintar(screen)
        self.btnOpcion2.pintar(screen)
        self.btnOpcion3.pintar(screen)
        self.btnOpcion4.pintar(screen)
        self.btnInicio.pintar(screen)

    def seleccionar_pregunta(self):
        self.pregunta.modificarTexto("")
        self.pregunta1.modificarTexto("")
        self.pregunta2.modificarTexto("")
        self.pregunta3.modificarTexto("")
        self.pregunta4.modificarTexto("")
        self.pregunta5.modificarTexto("")
        self.pregunta6.modificarTexto("")
        self.btnOpcion1.modificarString("")
        self.btnOpcion2.modificarString("")
        self.btnOpcion3.modificarString("")
        self.btnOpcion4.modificarString("")
        tipo = self.num_aleatorio(1, 2)
        #decidira si es encriptar o desencriptar
        #1 -> encriptar
        #2 -> Desencriptar
        if (tipo == 1):
            tipo = self.num_aleatorio(0, len(self.palabras) - 1)
            (_, self.mensaje_desencriptado) = self.palabras[tipo]
            tipo = self.num_aleatorio(1, 4)
            self.pregunta1.modificarTexto("La Palabra a Encriptar es:")
            if (tipo == 1):
                #Invertida
                self.pregunta.modificarTexto(self.titulos["e_invertir"])
                self.mensaje_encriptado = self.lista_to_str_espaciado(
                    self.invetirOracion(self.mensaje_desencriptado))
                self.pregunta2.modificarTexto(self.mensaje_desencriptado)
                self.pregunta3.modificarTexto(
                    "Seleccione la encriptacion correcta")
                tipo = self.num_aleatorio(1, 4)  #Pone el correcto
                if (tipo == 1):
                    self.btnOpcion1.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion3.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion4.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                elif (tipo == 2):
                    self.btnOpcion2.modificarString(self.mensaje_encriptado)
                    self.btnOpcion1.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion3.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion4.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                elif (tipo == 3):
                    self.btnOpcion3.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion1.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion4.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                elif (tipo == 4):
                    self.btnOpcion4.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion3.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
                    self.btnOpcion1.modificarString(
                        self.lista_to_str_espaciado(
                            self.invetirOracion(
                                self.palabras[self.num_aleatorio(
                                    0,
                                    len(self.palabras) - 1)][1])))
            elif (tipo == 2):
                #encriptar ATBASH
                self.pregunta.modificarTexto(self.titulos["e_atbash"])
                self.mensaje_encriptado = self.encriptar_atbash(
                    self.mensaje_desencriptado)
                self.pregunta2.modificarTexto(self.mensaje_desencriptado)
                self.pregunta4.modificarTexto(
                    self.lista_to_str_espaciado(self.abecedario))
                self.pregunta5.modificarTexto(
                    self.lista_to_str_espaciado(reversed(self.abecedario)))
                self.pregunta6.modificarTexto(
                    "Seleccione la encripcion Correcta")
                tipo = self.num_aleatorio(1, 4)  #Pone el correcto
                if (tipo == 1):
                    self.btnOpcion1.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion3.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion4.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                elif (tipo == 2):
                    self.btnOpcion2.modificarString(self.mensaje_encriptado)
                    self.btnOpcion1.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion3.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion4.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                elif (tipo == 3):
                    self.btnOpcion3.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion1.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion4.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                elif (tipo == 4):
                    self.btnOpcion4.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion3.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
                    self.btnOpcion1.modificarString(
                        self.encriptar_atbash(self.palabras[self.num_aleatorio(
                            0,
                            len(self.palabras) - 1)][1]))
            elif (tipo == 3):
                #encriptar Polibi
                self.pregunta.modificarTexto(self.titulos["e_polibi"])
                self.mensaje_encriptado = self.encriptar_polibi_5(
                    self.mensaje_desencriptado)
                self.pregunta2.modificarTexto(self.mensaje_desencriptado)
                self.pregunta5.modificarTexto(
                    "Seleccione la encripcion Correcta")
                tipo = self.num_aleatorio(1, 4)  #Pone el correcto
                if (tipo == 1):
                    self.btnOpcion1.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion3.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion4.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                elif (tipo == 2):
                    self.btnOpcion2.modificarString(self.mensaje_encriptado)
                    self.btnOpcion1.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion3.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion4.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                elif (tipo == 3):
                    self.btnOpcion3.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion1.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion4.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                elif (tipo == 4):
                    self.btnOpcion4.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion3.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
                    self.btnOpcion1.modificarString(
                        self.encriptar_polibi_5(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1]))
            elif (tipo == 4):
                #encriptar cesar
                self.pregunta.modificarTexto(self.titulos["e_cesar"])
                self.mensaje_encriptado = self.CodificarCesar(
                    self.mensaje_desencriptado, 3)
                self.pregunta2.modificarTexto(self.mensaje_desencriptado)
                self.pregunta4.modificarTexto(
                    self.lista_to_str_espaciado(self.abecedario))
                self.pregunta5.modificarTexto(
                    self.lista_to_str_espaciado(reversed(self.abecedario)))
                self.pregunta6.modificarTexto(
                    "Seleccione la encripcion Correcta")
                tipo = self.num_aleatorio(1, 4)  #Pone el correcto
                if (tipo == 1):
                    self.btnOpcion1.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion3.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion4.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                elif (tipo == 2):
                    self.btnOpcion2.modificarString(self.mensaje_encriptado)
                    self.btnOpcion1.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion3.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion4.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                elif (tipo == 3):
                    self.btnOpcion3.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion1.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion4.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                elif (tipo == 4):
                    self.btnOpcion4.modificarString(self.mensaje_encriptado)
                    self.btnOpcion2.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion3.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))
                    self.btnOpcion1.modificarString(
                        self.CodificarCesar(
                            self.palabras[self.num_aleatorio(
                                0,
                                len(self.palabras) - 1)][1], 3))

        else:
            tipo = self.num_aleatorio(0, len(self.palabras) - 1)
            (_, self.mensaje_desencriptado) = self.palabras[tipo]
            tipo = self.num_aleatorio(1, 4)
            self.pregunta1.modificarTexto("La Palabra a Desencriptar es:")
            if (tipo == 1):
                #Invertida
                self.pregunta.modificarTexto(self.titulos["d_invertir"])
                self.mensaje_encriptado = self.lista_to_str_espaciado(
                    self.invetirOracion(self.mensaje_desencriptado))
                self.pregunta2.modificarTexto(self.mensaje_encriptado)
                self.pregunta3.modificarTexto(
                    "Seleccione la Desencripcion correcta")
            elif (tipo == 2):
                #encriptar ATBASH
                self.pregunta.modificarTexto(self.titulos["d_atbash"])
                self.mensaje_encriptado = self.encriptar_atbash(
                    self.mensaje_desencriptado)
                self.pregunta2.modificarTexto(self.mensaje_encriptado)
                self.pregunta4.modificarTexto(
                    self.lista_to_str_espaciado(self.abecedario))
                self.pregunta5.modificarTexto(
                    self.lista_to_str_espaciado(reversed(self.abecedario)))
                self.pregunta6.modificarTexto(
                    "Seleccione la encripcion Correcta")
            elif (tipo == 3):
                #encriptar Polibi
                self.pregunta.modificarTexto(self.titulos["d_polibi"])
                self.mensaje_encriptado = self.encriptar_polibi_5(
                    self.mensaje_desencriptado)
                self.pregunta2.modificarTexto(self.mensaje_encriptado)
                self.pregunta5.modificarTexto(
                    "Seleccione la encripcion Correcta")
            elif (tipo == 4):
                #encriptar cesar
                self.pregunta.modificarTexto(self.titulos["d_cesar"])
                self.mensaje_encriptado = self.CodificarCesar(
                    self.mensaje_desencriptado, 3)
                self.pregunta2.modificarTexto(self.mensaje_encriptado)
                self.pregunta4.modificarTexto(
                    self.lista_to_str_espaciado(self.abecedario))
                self.pregunta5.modificarTexto(
                    self.lista_to_str_espaciado(reversed(self.abecedario)))
                self.pregunta6.modificarTexto(
                    "Seleccione la encripcion Correcta")
            tipo = self.num_aleatorio(1, 4)  #Pone el correcto
            if (tipo == 1):
                self.btnOpcion1.modificarString(self.mensaje_desencriptado)
                self.btnOpcion2.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion3.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion4.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
            elif (tipo == 2):
                self.btnOpcion2.modificarString(self.mensaje_desencriptado)
                self.btnOpcion1.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion3.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion4.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
            elif (tipo == 3):
                self.btnOpcion3.modificarString(self.mensaje_desencriptado)
                self.btnOpcion2.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion1.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion4.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
            elif (tipo == 4):
                self.btnOpcion4.modificarString(self.mensaje_desencriptado)
                self.btnOpcion2.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion3.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])
                self.btnOpcion1.modificarString(
                    self.palabras[self.num_aleatorio(0,
                                                     len(self.palabras) -
                                                     1)][1])

    def modificar_tiempo(self, tiempo):
        self.tiempo = tiempo

    def quitar_vida(self):
        self.vida_actuales -= 1

    def get_vidas_actuales(self):
        return self.vida_actuales

    def get_puntuacion(self):
        return self.puntuacion

    def compararOpcion(self, opcion):
        return opcion == self.mensaje_encriptado or opcion == self.mensaje_desencriptado

    def sumarPuntaje(self):
        self.puntuacion += self.tiempoJuego

    def invertirPalabra(self, palabra):
        """
        Invierte Palabra::
            "Hola" -> "aloH"

        @param palabra: palabra que se va a invertir
        @type palabra: str

        @return: Palabra convertida
        @rtype: str
        """
        return ''.join(reversed(palabra))

    def invetirOracion(self, Oracion):
        """
        Invierte Oracion, pero retorna una lista::
            "Hola Mundo" -> ["aloH", "odnuM"]

        @param palabra: Oracion que se va a invertir
        @type palabra: str

        @return: Lista con Oracion Convertida
        @rtype: list
        """
        lista = Oracion.split()
        return list(map(self.invertirPalabra, lista))

    def lista_to_str_espaciado(self, lista):
        """
        Imprime con espaciado una lista::
            ["aloH", "odnuM"] -> "aloH odnuM"

        @param lista: Lista que se va a convertir
        @type lista: list

        @return: Oracion de la lista con espacios
        @rtype: str
        """
        return " ".join(lista)

    def encriptar_atbash(self, message):
        """
        Metodo que encripta con metodo atbash::
            Con el alfabeto
            A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z
            Z Y X W V U T S R Q P O Ñ N M L K J I H G F E D C B A
            ----------------------------------------------------
            Lo que trata de hacer es modificar la letra de arriba con la
            respectiva de abajo, el ejemplo:
             "HOLA MUNDO" -> "SLOZ ÑFNWL"

        @param message: mensaje a Encriptar
        @type message: str

        @return: mensaje encriptado
        @rtype: str
        """
        alphabet = u'A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ñ o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9'.split(
        )
        backward = u'Z Y X W V U T S R Q P O Ñ N M L K J I H G F E D C B A z y x w v u t s r q p o ñ n m l k j i h g f e d c b a 9 8 7 6 5 4 3 2 1 0'.split(
        )
        cipher = []

        for letter in message:
            if letter in alphabet:
                for i in xrange(len(alphabet)):
                    if alphabet[i] == letter:
                        pos = i
                cipher.append(backward[pos])
            else:
                cipher.append(letter)

        newMessage = ''.join(cipher)
        return newMessage

    def desencriptar_atbash(self, message):
        """
        Metodo para desencriptar con metodo atbash::
            Con el alfabeto
            A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z
            Z Y X W V U T S R Q P O Ñ N M L K J I H G F E D C B A
            ----------------------------------------------------
            Lo que trata de hacer es modificar la letra de arriba con la
            respectiva de abajo, el ejemplo:
             "SLOZ ÑFNWL" -> "HOLA MUNDO"

        @param message: mensaje a Desencriptar
        @type message: str

        @return: mensaje Desencriptado
        @rtype: str
        """
        alphabet = u'A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z a b c d e f g h i j k l m n ñ o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9'.split(
        )
        backward = u'Z Y X W V U T S R Q P O Ñ N M L K J I H G F E D C B A z y x w v u t s r q p o ñ n m l k j i h g f e d c b a 9 8 7 6 5 4 3 2 1 0'.split(
        )
        cipher = []

        for letter in message:
            if letter in backward:
                for i in xrange(len(backward)):
                    if backward[i] == letter:
                        pos = i
                cipher.append(alphabet[pos])
            else:
                cipher.append(letter)

        newMessage = ''.join(cipher)
        return newMessage

    def codificar_polibi_5(self, char):
        """
        Codifica una letra en formato polibi::
            "H" -> (3,3) como ejemplo

        @param char: caracter a convertir
        @type char: str
        @return: Tupla con el valor convertido en polibi
        @rtype: (a, b)
        """
        alfabeto = "abcdefghiklmnopqrstuvwxyz"
        tup = (0, 0)
        if char:
            if alfabeto.find(char) <= 5:
                tup = (1, alfabeto.find(char) + 1)
            elif alfabeto.find(char) <= 10:
                tup = (2, (alfabeto.find(char) + 1) - 5)
            elif alfabeto.find(char) <= 15:
                tup = (3, (alfabeto.find(char) + 1) - 10)
            elif alfabeto.find(char) <= 20:
                tup = (4, (alfabeto.find(char) + 1) - 15)
            elif alfabeto.find(char) <= 25:
                tup = (5, (alfabeto.find(char) + 1) - 20)
        return "".join(map(str, tup))

    def encriptar_str_polibi_5(self, texto):
        """
        Encripta una palabra a codigo polibi::
            "HOLA" -> [(1,2),(2,3),(3,4),(4,5)]

        @param texto: Palabra a encriptar
        @type texto: str
        @return: Lista encriptada en polibi
        @rtype: [(a,b),(c,d)]
        """
        return " ".join(map(self.codificar_polibi_5, texto))

    def encriptar_polibi_5(self, mensaje):
        """
        Encripta una palabra convertida y las une como una lista, imprime un str
        ::
            "HOLA MUNDO" -> "(1,1),(1,2),(1,3),(1,4)-(2,1),(2,2),(2,3),(2,4),(2,5)"

        @param mensaje: Mensaje a encriptar
        @type mensaje: str
        @return: str con mensaje encriptado
        @rtype: str
        """
        mensaje = mensaje.replace("j", "i")
        lista = mensaje.split()
        lista = map(self.encriptar_str_polibi_5, lista)
        return "-".join(lista)
        #return self.lista_to_str_espaciado(lista)

    def CodificarCesar(self, Palabra, Avance):
        """
        Codifica Mensaje con codficacion atbas, sin embargo, el orden del abecderio
        no es el mismo::
        A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z
        Y X W V U T S R Q P O Ñ N M L K J I H G F E D C B A Z
        ------------------------------------------------------

        @param Palabra: Palabra a criptar
        @type Palabra: str
        @param Avance: avance o cambio de orden del abecedario
        @type Avance: int

        @return: Palabra invertida
        @rtype: str
        """
        alfabetoMinus = [
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
            'z'
        ]
        alfabetoMayus = [
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
            'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
            'Z'
        ]
        Clave = ''
        Tope = len(alfabetoMayus)
        Posicion = 0
        for letra in Palabra:
            for i in range(Tope):
                if (i + Avance < Tope):
                    Posicion = i + Avance
                else:
                    Posicion = abs((Tope - i) - Avance)
                if letra == alfabetoMinus[i]:
                    Clave = Clave + alfabetoMinus[Posicion]
                elif letra == alfabetoMayus[i]:
                    Clave = Clave + alfabetoMayus[Posicion]
        return Clave
コード例 #2
0
class Tutorial:
    """Clase enfocada en todo lo que carga el tutorial"""
    def __init__(self, ctrl):
        """
        Constructor del Tutorial

        @param ctrl: controlador del los eventos
        @type ctrl: Controlador
        """
        self.controlador = ctrl
        self.fondo = "view/img/fondos/España.jpg"
        self.textos = []
        self.textoActual = 0

        #Cargar Mensajes y ponerlos en la matriz de los textos
        self.construir()
        self.construirTabla1()

        #Imagen ATBAS
        self.ImagenAtbas = Imagen("view/img/codigoAtbas.png", (10, 270))
        self.ImagenAtbas.cambiarEscala(0.65)

        #Cifra de Polibi
        self.tablaPolibi = Imagen("view/img/polibi.png", (285, 240))
        self.tablaPolibi.cambiarEscala(0.5)
        self.manoPolibi = Imagen("view/img/polibiManoEje.png", (380, 300))
        self.manoPolibi.cambiarEscala(0.4)
        self.polibiEje = Imagen("view/img/polibiCodi.png", (300, 160))
        self.polibiEje.cambiarEscala(0.5)

        #Cesar
        self.cesar = Imagen("view/img/Cesar.png", (10, 230))
        self.cesar.cambiarEscala(0.65)
        self.cesarEjemplo = Imagen("view/img/cesarEjemplo.png", (300, 330))
        self.cesarEjemplo.cambiarEscala(0.5)

        #Rejilla
        self.rejilla = Imagen("view/img/Rejilla.png", (350, 300))
        self.rejilla.cambiarEscala(0.6)
        self.rejillaEjemplo = Imagen("view/img/RejillaEjemplo.png", (340, 180))
        self.rejillaEjemplo.cambiarEscala(0.6)

    def mensajes(self):
        """Mensajes que se podran mostrar en el tutorial"""
        texto1 = []
        texto1.append(
            Titulo("Existen diferentes metodos para", 420, 120, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("transformar un mensaje.", 420, 140, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("A lo largo de la historia se han creado", 420, 160, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("diferentes formas de codificar la", 420, 180, 17, 2,
                   (36, 32, 163)))
        texto1.append(Titulo("informacion.", 420, 200, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("En este juego veremos 7 metodos de", 420, 220, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("<<Encriptar>> y <<Desencriptar>> un mensaje.", 420, 240,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("-Oculto en la Tabla", 420, 260, 17, 2, (36, 32, 163)))
        texto1.append(Titulo("-Invertir", 420, 280, 17, 2, (36, 32, 163)))
        texto1.append(Titulo("-Codigo ATBAS", 420, 300, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("-Cifra de Polibi", 420, 320, 17, 2, (36, 32, 163)))
        texto1.append(Titulo("-Cifra de Cesar", 420, 340, 17, 2,
                             (36, 32, 163)))
        texto1.append(
            Titulo("-Rejilla Giratoria", 420, 360, 17, 2, (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(
            Titulo("Oculto en la Tabla", 420, 120, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("El objetivo de oculto en la tabla es relacionar", 420, 140,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("un significado con respecto a otro asi si:", 420, 160, 17,
                   2, (36, 32, 163)))
        texto1.append(
            Titulo("Asi relacionariamos <<Estrella>> con <<Entrar>>", 420, 280,
                   17, 2, (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(Titulo("Invertir", 420, 120, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("El objetivo de este metodo es invertir las", 420, 140, 17,
                   2, (36, 32, 163)))
        texto1.append(
            Titulo("palabras para que estas no sean legibles", 420, 160, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("a simple vista y que por ende esten del", 420, 180, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("todo complicadas, un ejemplo que se puede", 420, 200, 17,
                   2, (36, 32, 163)))
        texto1.append(Titulo("apreciar:", 420, 220, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("<<Mensaje Secreto>> a la hora de invertir", 420, 260, 17,
                   2, (36, 32, 163)))
        texto1.append(
            Titulo("seria <<Ejasnem Oterces>>", 420, 280, 17, 2,
                   (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(Titulo("Codigo Atbas", 420, 120, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("El codigo ATBAS es un codigo utilizado en algunos", 420,
                   140, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("textos religiosos hebreos, el objetivo de este", 420, 160,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("metodo es desorganizar el abecedario para que", 420, 180,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("las palabras del uno sean diferentes que las", 420, 200,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("del otro tomando con un significado el que valga", 420,
                   220, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("para que esta regla se cumpla, este necesita de", 420, 240,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("una tabla de valores como el mostrado:", 420, 260, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("Asi si, <<Criptografia>> seria <<Xirkgltizurz>>", 420, 380,
                   17, 2, (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(Titulo("Cifra de Polibi", 420, 120, 17, 2,
                             (36, 32, 163)))
        texto1.append(
            Titulo("Descrito por el historiador del siglo III a.C.,", 420, 140,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("para codificar cada letra utiliza una tabla de", 420, 160,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("doble entrada, en la que cada letra viene", 420, 180, 17,
                   2, (36, 32, 163)))
        texto1.append(
            Titulo("representada por dos numeros:", 420, 200, 17, 2,
                   (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(Titulo("Cifra de Polibi", 420, 120, 17, 2,
                             (36, 32, 163)))
        texto1.append(Titulo("Ejemplo:", 420, 140, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("Se pueden utilizar algunos esquemas graficos", 420, 240,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("para  codificar, las manos en este caso", 420, 260, 17, 2,
                   (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(Titulo("Cifra de Cesar", 420, 120, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("El metodo de Cesar consiste en desplazar", 420, 140, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("cualquier alfabeto. La clave del codigo sera el", 420, 160,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("numero de lugares que se desplaza. Muy similar", 420, 180,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("al codigo ATBAS, un ejemplo seria:", 420, 200, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("La codificacion seria de la siguiente manera:", 420, 300,
                   17, 2, (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(
            Titulo("Rejilla Giratoria", 420, 120, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("Lo primero que debe hacerse es fabricar una", 420, 140, 17,
                   2, (36, 32, 163)))
        texto1.append(
            Titulo("tapadera. La rejilla se construye de forma que:", 420, 160,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("-Tenga tantos huecos como la cuarta parte del", 420, 180,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("total de la rejilla", 420, 200, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("-Al girar hasta cuatro veces, una casilla no", 420, 220,
                   17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("puede quedar destapada dos veces", 420, 240, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("-Todas las casillas han de quedar destapadas", 420, 260,
                   17, 2, (36, 32, 163)))
        texto1.append(Titulo("alguna vez", 420, 280, 17, 2, (36, 32, 163)))
        self.textos.append(texto1)

        texto1 = []
        texto1.append(
            Titulo("Rejilla Giratoria", 420, 120, 17, 2, (36, 32, 163)))
        texto1.append(
            Titulo("seria para mostrar una tabla del estilo:", 420, 140, 17, 2,
                   (36, 32, 163)))
        texto1.append(
            Titulo("la idea es tapar cada uno de los cuadros no", 420, 300, 17,
                   2, (36, 32, 163)))
        texto1.append(Titulo("necesarios", 420, 320, 17, 2, (36, 32, 163)))
        self.textos.append(texto1)

    def construirTabla1(self):
        """Metodo que construye la primera tabla"""
        self.tablaPalabra = Boton("Palabra")
        self.tablaPalabra.modificarPosicion(340, 180)
        self.tablaPalabra.modificarTamano(100, 40)
        self.tablaPalabra.modificarPosicionTexto(50, 20)
        self.tablaPalabra.modificarColor1(203, 67, 53)
        self.tablaPalabra.modificarColor2(176, 58, 46)
        self.tablaPalabra.modificarColor3(203, 67, 53)
        self.tablaPalabra.modificarColorLetra1(23, 32, 42)
        self.tablaPalabra.modificarColorLetra2(23, 32, 42)
        self.tablaPalabra.modificarColorLetra3(23, 32, 42)
        self.tablaPalabra.modificarEvento(0)
        self.tablaCodigo = Boton("Codigo")
        self.tablaCodigo.modificarPosicion(443, 180)
        self.tablaCodigo.modificarTamano(100, 40)
        self.tablaCodigo.modificarPosicionTexto(50, 20)
        self.tablaCodigo.modificarColor1(203, 67, 53)
        self.tablaCodigo.modificarColor2(176, 58, 46)
        self.tablaCodigo.modificarColor3(203, 67, 53)
        self.tablaCodigo.modificarColorLetra1(23, 32, 42)
        self.tablaCodigo.modificarColorLetra2(23, 32, 42)
        self.tablaCodigo.modificarColorLetra3(23, 32, 42)
        self.tablaCodigo.modificarEvento(0)
        self.tablaPalabra1 = Boton("Entrar")
        self.tablaPalabra1.modificarPosicion(340, 223)
        self.tablaPalabra1.modificarTamano(100, 40)
        self.tablaPalabra1.modificarPosicionTexto(50, 20)
        self.tablaPalabra1.modificarColor1(241, 148, 138)
        self.tablaPalabra1.modificarColor2(236, 112, 99)
        self.tablaPalabra1.modificarColor3(241, 148, 138)
        self.tablaPalabra1.modificarColorLetra1(23, 32, 42)
        self.tablaPalabra1.modificarColorLetra2(23, 32, 42)
        self.tablaPalabra1.modificarColorLetra3(23, 32, 42)
        self.tablaPalabra1.modificarEvento(0)
        self.tablaCodigo1 = Boton("Estrella")
        self.tablaCodigo1.modificarPosicion(443, 223)
        self.tablaCodigo1.modificarTamano(100, 40)
        self.tablaCodigo1.modificarPosicionTexto(50, 20)
        self.tablaCodigo1.modificarColor1(217, 136, 128)
        self.tablaCodigo1.modificarColor2(205, 97, 85)
        self.tablaCodigo1.modificarColor3(217, 136, 128)
        self.tablaCodigo1.modificarColorLetra1(23, 32, 42)
        self.tablaCodigo1.modificarColorLetra2(23, 32, 42)
        self.tablaCodigo1.modificarColorLetra3(23, 32, 42)
        self.tablaCodigo1.modificarEvento(0)

        self.controlador.enviarEventoBoton(self.tablaCodigo)
        self.controlador.enviarEventoBoton(self.tablaCodigo1)
        self.controlador.enviarEventoBoton(self.tablaPalabra)
        self.controlador.enviarEventoBoton(self.tablaPalabra1)

    def activarBotones(self):
        """Activa el conjunto de botones"""
        self.btnContinuar.modificarActivo(True)
        self.btnInicio.modificarActivo(True)
        self.activarTabla()

    def desactivarBotones(self):
        """Desactiva el conjunto de botones"""
        self.btnContinuar.modificarActivo(False)
        self.btnInicio.modificarActivo(False)
        self.desactivarTabla()

    def activarTabla(self):
        """Activa el conjunto de botones de la tabla"""
        self.tablaCodigo.modificarActivo(True)
        self.tablaCodigo1.modificarActivo(True)
        self.tablaPalabra.modificarActivo(True)
        self.tablaPalabra1.modificarActivo(True)

    def desactivarTabla(self):
        """Desactiva el conjunto de botones de la tabla"""
        self.tablaCodigo.modificarActivo(False)
        self.tablaCodigo1.modificarActivo(False)
        self.tablaPalabra.modificarActivo(False)
        self.tablaPalabra1.modificarActivo(False)

    def construir(self):
        """
        Se encargara de construir toda la parte grafica
        """
        self.fondo = Imagen(self.fondo, (0, 0))
        self.fondo.cambiarEscala(0.5)
        self.titulo = Titulo("KACH!", 120, 450, 70, 2, (36, 32, 163))
        self.lblTutorial = Titulo("Tutorial", 450, 30, 40, 2, (36, 32, 163))

        self.btnContinuar = Boton("Continuar")
        self.btnContinuar.modificarPosicion(280, 420)
        self.btnContinuar.modificarTamano(160, 50)
        self.btnContinuar.modificarPosicionTexto(40, 27)
        self.btnContinuar.modificarColor1(234, 234, 216)
        self.btnContinuar.modificarColorLetra1(21, 67, 96)
        self.btnContinuar.modificarColor2(209, 210, 179)
        self.btnContinuar.modificarColorLetra2(21, 67, 96)
        self.btnContinuar.modificarColor3(91, 202, 213)
        self.btnContinuar.modificarColorLetra3(21, 67, 96)
        self.btnContinuar.modificarEvento(7)
        self.btnInicio = Boton("Inicio")
        self.btnInicio.modificarPosicion(460, 420)
        self.btnInicio.modificarTamano(160, 50)
        self.btnInicio.modificarPosicionTexto(30, 27)
        self.btnInicio.modificarColor1(234, 234, 216)
        self.btnInicio.modificarColorLetra1(21, 67, 96)
        self.btnInicio.modificarColor2(209, 210, 179)
        self.btnInicio.modificarColorLetra2(21, 67, 96)
        self.btnInicio.modificarColor3(91, 202, 213)
        self.btnInicio.modificarColorLetra3(21, 67, 96)
        self.btnInicio.modificarEvento(6)

        self.cuadro = Boton("")
        self.cuadro.modificarPosicion(200, 100)
        self.cuadro.modificarTamano(430, 300)
        self.cuadro.modificarPosicionTexto(30, 27)
        self.cuadro.modificarColor1(234, 234, 216)
        self.cuadro.modificarColorLetra1(21, 67, 96)
        self.cuadro.modificarColor2(234, 234, 216)
        self.cuadro.modificarColorLetra2(21, 67, 96)
        self.cuadro.modificarColor3(234, 234, 216)
        self.cuadro.modificarColorLetra3(21, 67, 96)
        self.cuadro.modificarEvento(0)

        self.mensajes()

        #Eventos de los botones
        self.controlador.enviarEventoBoton(self.btnContinuar)
        self.controlador.enviarEventoBoton(self.btnInicio)

    def pintar(self, screen, paso=0):
        """
        Se encargara de mostrar toda la parte grafica

        @param screen: Pantalla en la que se va a pintar
        @type screen: Surface
        """
        self.fondo.ponerImagen(screen)
        self.titulo.pintar(screen)
        self.lblTutorial.pintar(screen)

        self.btnInicio.pintar(screen)
        self.btnContinuar.pintar(screen)

        self.cuadro.pintar(screen)
        if (paso == 0):
            self.textoActual = 0
            for x in self.textos[self.textoActual]:
                x.pintar(screen)
        elif (paso == 1):
            self.textoActual = 1
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.tablaCodigo.pintar(screen)
            self.tablaPalabra.pintar(screen)
            self.tablaCodigo1.pintar(screen)
            self.tablaPalabra1.pintar(screen)
        elif (paso == 2):
            self.textoActual = 2
            for x in self.textos[self.textoActual]:
                x.pintar(screen)
        elif (paso == 3):
            self.textoActual = 3
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.ImagenAtbas.ponerImagen(screen)
        elif (paso == 4):
            self.textoActual = 4
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.tablaPolibi.ponerImagen(screen)
        elif (paso == 5):
            self.textoActual = 5
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.manoPolibi.ponerImagen(screen)
            self.polibiEje.ponerImagen(screen)
        elif (paso == 6):
            self.textoActual = 6
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.cesar.ponerImagen(screen)
            self.cesarEjemplo.ponerImagen(screen)
        elif (paso == 7):
            self.textoActual = 7
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.rejilla.ponerImagen(screen)
        else:
            self.textoActual = 8
            for x in self.textos[self.textoActual]:
                x.pintar(screen)

            self.rejillaEjemplo.ponerImagen(screen)