class Desafio(pilasengine.escenas.Escena): def iniciar(self, pilas, nombreDesafio): musica = pilas.datos.musica if musica is not None: musica.detener_gradualmente(3) self.fondo = pilas.fondos.FondoMozaico("imagenes/fondo/fondoJuego.jpg") self.decir = tts self.partida = Partida(pilas) self.partida.definir_reglas("puzzle") self.textoAyuda = TextoAyuda(self.pilas) # se arma el reloj self.reloj = Reloj(pilas, x=-150, y=300, incremental=True) self.reloj.comenzar() # armamos tablero: self.tablero = Tablero(pilas, x=-400, y=-250, filas=8, columnas=8) self.partida.definir_tablero(self.tablero) # definimos la posicion inicial: fichas = self.cargarDesafio("datos/desafios/" + nombreDesafio + ".chess") self.nombreDesafio = nombreDesafio self.partida.iniciar(posicionInicial=fichas) self.cabezal = Cabezal(pilas, tablero=self.tablero, tts=tts) # conexiones con eventos: self.pilas.eventos.pulsa_tecla.conectar(self.interpreta_teclado) self.pilas.eventos.click_de_mouse.conectar(self.click_mouse) self.pilas.eventos.pulsa_tecla_escape.conectar( self.activar_menu_principal) # eventos de partida: self.partida.eventoPreMueveFicha.conectar(self.mueveFicha) self.partida.eventoFinalizar.conectar(self.finalizar) # sonidos: self.sonido_mover = Sonido('audio/mover-ficha.ogg') self.historial = Historial(pilas, ejex=300, ejey=0, cantidadDeJugadores=1) self.historial.fijo = True def activar_menu_principal(self, evento): self.pilas.escenas.MenuPrincipal(pilas=self.pilas) def mueveFicha(self, evento): self.sonido_mover.reproducir() if evento.fichaEliminada: self.decir( str(evento.ficha) + " por " + str(evento.fichaEliminada) + " de " + repr(evento.celdaDestino)) self.historial.agregar( repr(evento.ficha) + "x" + repr(evento.celdaDestino)) else: self.decir( str(evento.ficha) + " mueve a: " + repr(evento.celdaDestino)) self.historial.agregar( repr(evento.ficha) + repr(evento.celdaDestino)) def click_mouse(self, evento): x = int(evento.x) - (self.tablero.x - self.tablero.distancia / 2) + self.pilas.camara.x y = int(evento.y) - (self.tablero.y - self.tablero.distancia / 2) + self.pilas.camara.y columna = x / self.tablero.distancia fila = y / self.tablero.distancia if (evento.boton == 1): self.cabezal.mover(columna=columna, fila=fila) self.partida.seleccionar_celda(columna=self.cabezal.columna, fila=self.cabezal.fila) if (evento.boton == 2): ficha = self.tablero.obtenerFicha(columna=columna, fila=fila) if ficha is not None: self.textoAyuda.infoDePieza(ficha.nombre, x, y) def interpreta_teclado(self, evento): if evento.codigo == "a" or evento.codigo == self.pilas.simbolos.IZQUIERDA: self.cabezal.mover_izquierda() if evento.codigo == "d" or evento.codigo == self.pilas.simbolos.DERECHA: self.cabezal.mover_derecha() if evento.codigo == "s" or evento.codigo == self.pilas.simbolos.ABAJO: self.cabezal.mover_abajo() if evento.codigo == "w" or evento.codigo == self.pilas.simbolos.ARRIBA: self.cabezal.mover_arriba() if evento.codigo == "n": self.pilas.escenas.Desafio(pilas=self.pilas, nombreDesafio=self.nombreDesafio) if evento.codigo == self.pilas.simbolos.SELECCION: self.partida.seleccionar_celda(columna=self.cabezal.columna, fila=self.cabezal.fila) if evento.codigo == "F1": ficha = self.tablero.obtenerFicha(columna=self.cabezal.columna, fila=self.cabezal.fila) if ficha is not None: self.textoAyuda.infoDePieza(ficha.nombre, self.cabezal.x + 30, self.cabezal.y) def cargarDesafio(self, rutaDeArchivo): file = open(rutaDeArchivo, "r") info = file.read() file.close() info = info.split("\n") lista = [] for x in info: if x != "": x = x.split(" ") x.append(int(x[2][1]) - 1) x[2] = ord(x[2][0]) - 97 lista.append(tuple(x)) return lista def finalizar(self, evento): if evento.motivo == "superado": if self.nombreDesafio == '9': self.pilas.escenas.GanasteLosDesafios(self.pilas) else: self.pilas.escenas.DesafioSuperado(self.pilas, self.reloj.texto, self.nombreDesafio)
class PantallaJuego(pilasengine.escenas.Escena): def iniciar(self, pilas, datos=None): musica = pilas.datos.musica if musica is not None: musica.detener_gradualmente(3) self.fondo = pilas.fondos.FondoMozaico("imagenes/fondo/fondoJuego.jpg") self.decir = tts self.datos = datos self.partida = Partida(pilas, self.datos) self.partida.definir_reglas(pilas.datos.modoJuego) self.textoAyuda = TextoAyuda(self.pilas) # armamos tablero: self.tablero = Tablero(pilas, x=- 400 ,y=-250) self.partida.definir_tablero(self.tablero) self.partida.iniciar() self.cabezal = Cabezal(pilas, tablero=self.tablero, tts=tts) # conexiones con eventos: self.pilas.eventos.pulsa_tecla.conectar(self.interpreta_teclado) self.pilas.eventos.click_de_mouse.conectar(self.click_mouse) self.pilas.eventos.pulsa_tecla_escape.conectar(self.activar_menu_principal) # eventos de juego: self.partida.eventoPreMueveFicha.conectar(self.mueveFicha) self.partida.eventoFinalizar.conectar(self.mostrarResultado) # sonidos: self.sonido_mover = Sonido('audio/mover-ficha.ogg') self.historial = Historial(pilas, ejex=320, ejey=0) self.historial.fijo = True # self.botonReiniciar = pilas.interfaz.Boton("Nueva Partida") self.botonReiniciar.x = 400 self.botonReiniciar.y = -300 self.botonReiniciar.conectar(self.nuevaPartida) self.botonReiniciar.fijo = True def activar_menu_principal(self, evento): datos=None if self.partida.activa: datos=self.partida.datos self.pilas.escenas.MenuPrincipal(pilas=self.pilas, datos=datos) def mueveFicha(self, evento): self.sonido_mover.reproducir() if evento.fichaEliminada: self.decir(str(evento.ficha) +" por "+ str(evento.fichaEliminada) +" de "+ repr(evento.celdaDestino)) #print("fuera de juego", fichaEliminada.nombre, fichaEliminada.color) self.historial.agregar(repr(evento.ficha) + "x" + repr(evento.celdaDestino)) else: self.decir(str(evento.ficha)+" mueve a: "+repr(evento.celdaDestino)) self.historial.agregar(repr(evento.ficha) + repr(evento.celdaDestino)) def click_mouse(self, evento): x = (int(evento.x) + (self.tablero.distancia / 2) + int(self.pilas.camara.x)) - self.tablero.x y = (int(evento.y) + (self.tablero.distancia / 2) + int(self.pilas.camara.y)) - self.tablero.y columna = x / self.tablero.distancia fila = y / self.tablero.distancia if(evento.boton == 1): self.cabezal.mover(columna=columna, fila=fila) #elf.cabezal.seleccionar() self.partida.seleccionar_celda(columna=self.cabezal.columna, fila=self.cabezal.fila) if(evento.boton == 2): ficha = self.tablero.obtenerFicha(columna=columna,fila=fila) if ficha is not None: self.textoAyuda.infoDePieza(ficha.nombre,x,y) def interpreta_teclado(self, evento): if evento.codigo == "a" or evento.codigo == self.pilas.simbolos.IZQUIERDA: self.cabezal.mover_izquierda() if self.tablero.columnas > 8 and abs(self.cabezal.x - self.camara.x) > 400 and self.cabezal.x - self.camara.x < 399: self.pilas.camara.x = [self.cabezal.x + 400] if evento.codigo == "d" or evento.codigo == self.pilas.simbolos.DERECHA: self.cabezal.mover_derecha() if self.tablero.columnas > 8 and self.cabezal.x - self.camara.x > -400 and self.cabezal.x - self.camara.x > 399 : self.pilas.camara.x = [self.cabezal.x - 400] if evento.codigo == "s" or evento.codigo == self.pilas.simbolos.ABAJO: self.cabezal.mover_abajo() if self.tablero.filas > 8 and abs(self.cabezal.y - self.camara.y) > 200: self.pilas.camara.y = [self.cabezal.y + 200] if evento.codigo == "w" or evento.codigo == self.pilas.simbolos.ARRIBA: self.cabezal.mover_arriba() if self.tablero.filas > 8 and abs(self.cabezal.y - self.camara.y) > 200: self.pilas.camara.y = [self.cabezal.y - 200] if evento.codigo == self.pilas.simbolos.SELECCION: self.partida.seleccionar_celda(columna=self.cabezal.columna, fila=self.cabezal.fila) if evento.codigo == "g": self.historial.subir() if evento.codigo == "h": self.historial.bajar() if evento.codigo == "n": self.nuevaPartida() if evento.codigo == "F1": ficha = self.tablero.obtenerFicha(columna=self.cabezal.columna, fila=self.cabezal.fila) if ficha is not None: info = self.textoAyuda.infoDePieza(ficha.nombre , self.cabezal.x +30,self.cabezal.y) self.decir(info) def nuevaPartida(self): self.audio = Sonido("audio/acomodar_tablero.ogg") self.audio.reproducir() self.pilas.escenas.PantallaJuego(pilas=self.pilas, datos=self.datos) def mostrarResultado(self,evento): texto = self.pilas.actores.Texto("GANAN LAS ", y=330, x= -30,ancho= 800,magnitud=30) texto.color = self.pilas.colores.Color(77, 38, 22) mensaje = evento.motivo + "" if evento.color == "blanco": texto.texto = texto.texto + "BLANCAS" mensaje += "GANAN LAS BLANCAS." else: texto.texto = texto.texto + "NEGRAS" mensaje += "GANAN LAS NEGRAS." audio = Sonido("audio/logro.ogg") audio.reproducir_esperando() self.decir(mensaje)