diff options
Diffstat (limited to 'FGR_T0204.py')
-rw-r--r-- | FGR_T0204.py | 827 |
1 files changed, 827 insertions, 0 deletions
diff --git a/FGR_T0204.py b/FGR_T0204.py new file mode 100644 index 0000000..954dfab --- /dev/null +++ b/FGR_T0204.py @@ -0,0 +1,827 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# FGR_T0204.py por: Flavio Danesse fdanesse@gmail.com +# https://sites.google.com/site/flaviodanesse/ +# https://sites.google.com/site/sugaractivities/ +# http://codigosdeejemplo.blogspot.com/ + +import pygame +import os +import gc +import gobject +import sys +import random +import gtk +from pygame.locals import * +import Globals as G +gc.enable() +import BiblioJAM +from BiblioJAM.JAMButton import JAMButton +from BiblioJAM.JAMLabel import JAMLabel +import BiblioJAM.JAMGlobals as JAMG + +class FGR_T0204(gtk.Widget): + __gsignals__ = {"run_grupo":(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,gobject.TYPE_INT))} + def __init__(self, usuario): + gtk.Widget.__init__(self) + self.usuario = usuario + self.ventana = None + self.nombre = "Crucigrama." + self.estado = False + self.fondo = None + self.reloj = None + self.puntos = 0 + # Sprites + self.textos = None + self.botonesmenu = None + self.controles = None + self.seniales = None + self.senial_select = None + # sonidos + self.sonido_error = None + self.sonido_exito = None + self.sound_select = None + # Escalado + self.ventana_real = None + self.resolucionreal = None + self.VA = None + self.VH = None + self.load() + self.estado = "Intro" + + def run(self): + if self.estado == "Intro": + self.controles.stop() + self.fondo = self.fondo1 + return self.run_menu() + elif self.estado == "Game": + self.puntos = 0 + self.fondo = self.fondo2 + self.reset() + return self.run_juego() + + def run_menu(self): + self.ventana.blit(self.fondo, (0,0)) + self.textos.draw(self.ventana) + self.botonesmenu.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while self.estado == "Intro": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + self.textos.clear(self.ventana, self.fondo) + self.botonesmenu.clear(self.ventana, self.fondo) + self.botonesmenu.update() + self.handle_event_Intro() + pygame.event.clear() + self.textos.draw(self.ventana) + self.botonesmenu.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + + def run_juego(self): + pygame.mixer.music.pause() + self.ventana.blit(self.fondo, (0,0)) + self.seniales.draw(self.ventana) + self.controles.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while self.estado == "Game": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + self.seniales.clear(self.ventana, self.fondo) + self.controles.clear(self.ventana, self.fondo) + self.seniales.update() + self.controles.update() + self.handle_event_Game() + pygame.event.clear() + self.seniales.draw(self.ventana) + self.controles.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + + def reset(self): + self.puntos= 0 + self.controles.init() + #self.seniales.init() + + def toma(self, boton): + if boton.ubicado: return + self.sound_select.play() + self.senial_select = boton + self.seniales.seleccionar(self.senial_select) + + def deja(self, flecha): + if not self.senial_select: return + if self.senial_select.get_text() == flecha.nombre: + self.sonido_exito.play() + self.puntos += 10 + self.controles.actualiza_puntos() + self.senial_select.marcar() + self.senial_select = None + self.seniales.marcar(flecha) + self.verificar() + else: + self.sonido_error.play() + self.controles.cronometro.cron.segundos_transcurridos += 5 + + def verificar(self): + faltan = False + for boton in self.seniales.botones: + if not boton.ubicado: + faltan = True + break + if not faltan: + self.ventana.blit(self.fondo, (0,0)) + self.seniales.draw(self.ventana) + self.controles.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + pygame.time.wait(1000) + self.ventana.blit(self.fondo, (0,0)) + return self.victory() + + def victory(self): + pygame.mixer.music.unpause() + self.controles.stop() + self.puntos+= (10*self.controles.cronometro.get_tiempo_restante()) + self.controles.actualiza_puntos() + self.ventana.blit(self.fondo, (0,0)) + self.seniales.draw(self.ventana) + self.controles.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + pygame.time.wait(1000) + text1= "Muy bien, ahora saben cuáles son las partes más importantes de una bici y " + text2= "gracias a eso consiguieron 1 sticker más. Sigan adelante!" + mensaje= Mensaje(self, "Victory", text1, text2) + self.fondo= self.fondo1 + self.ventana.blit(self.fondo, (0,0)) + mensaje.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while mensaje.estado == True: + self.reloj.tick(35) + mensaje.clear(self.ventana, self.fondo) + mensaje.update() + mensaje.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + pygame.time.wait(6000) + return self.salir(True) + + def game_over(self, jamcron): + pygame.mixer.music.unpause() + self.controles.update() # para actualizar imagen de progressbar del reloj + self.controles.stop() + self.controles.actualiza_puntos() + self.ventana.blit(self.fondo, (0,0)) + self.seniales.draw(self.ventana) + self.controles.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + pygame.time.wait(1000) + text1= "Te han Faltado Unos Segundos Para Completar la Actividad." + text2= "Prueba Nuevamente." + mensaje= Mensaje(self, "End", text1, text2) + self.fondo= self.fondo1 + self.ventana.blit(self.fondo, (0,0)) + mensaje.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while mensaje.estado == True: + self.reloj.tick(35) + mensaje.clear(self.ventana, self.fondo) + mensaje.update() + mensaje.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + pygame.time.wait(6000) + return self.salir(False) + + # ----------- SETEOS ------------- + def load(self): + pygame.event.set_blocked([JOYAXISMOTION, JOYBALLMOTION, JOYHATMOTION, + JOYBUTTONUP, JOYBUTTONDOWN, KEYUP, USEREVENT]) + pygame.event.set_allowed([MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, + KEYDOWN, VIDEORESIZE, VIDEOEXPOSE, QUIT, ACTIVEEVENT]) + pygame.mouse.set_visible(True) + A, B= G.RESOLUCION + self.ventana = pygame.Surface( (A, B), flags=HWSURFACE ) + self.ventana_real= pygame.display.get_surface() + C= pygame.display.Info().current_w + D= pygame.display.Info().current_h + self.resolucionreal= (C,D) + self.VA= float(C)/float(A) + self.VH= float(D)/float(B) + self.fondo1, self.fondo2= G.get_Fondos_FGR_T0204() + self.textos= Textos_Intro() + self.botonesmenu= ButtonsMenu(self) + from Globals import Controles + self.controles= Controles(self) + self.seniales= Seniales(self) + self.sonido_error, self.sonido_exito= G.get_Sonidos() + self.sound_select= JAMG.get_sound_select() + self.reloj = pygame.time.Clock() + + # ----------- EVENTOS en MENU --------------- + def handle_event_Intro(self): + for event in pygame.event.get(pygame.KEYDOWN): + tecla= event.key + if tecla== pygame.K_ESCAPE: + pygame.event.clear() + #return self.run_dialog_intro(None) + return self.salir() + + def run_Instruc(self): + self.fondo= G.get_instruc("204") + self.ventana.blit(self.fondo, (0,0)) + self.botonesmenu.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while self.estado== "Instruc": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + self.botonesmenu.clear(self.ventana, self.fondo) + self.botonesmenu.update() + pygame.event.clear() + self.botonesmenu.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + + ''' + def run_dialog_intro(self, button): + from BiblioJAM.JAMDialog import JAMDialog + dialog= JAMDialog(mensaje="¿Abandonas el Juego?", + funcion_ok=self.ok_intro, funcion_cancel=self.cancel_intro) + fuente, tamanio= JAMG.get_Font_fawn() + dialog.set_font_from_file(fuente, tamanio= 40) + dialog.boton_aceptar.set_font_from_file(fuente, tamanio= 25) + dialog.boton_cancelar.set_font_from_file(fuente, tamanio= 25) + a,b,c= JAMG.get_estilo_papel_quemado() + dialog.set_colors_dialog(base=c, bordes=c) + dialog.set_colors_buttons(colorbas=a, colorbor=b, colorcara=c) + self.estado= "Dialog" + dialog.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while self.estado== "Dialog": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + dialog.clear(self.ventana, self.fondo) + dialog.update() + pygame.event.clear() + dialog.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + dialog.clear(self.ventana, self.fondo) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + + def ok_intro(self, button): + return self.salir(False) + def cancel_intro(self, button): + self.estado= "Intro"''' + # ----------- EVENTOS en MENU --------------- + + # ----------- EVENTOS en JUEGO --------------- + def handle_event_Game(self): + for event in pygame.event.get(pygame.KEYDOWN): + tecla= event.key + if tecla== pygame.K_ESCAPE: + pygame.event.clear() + return self.run_dialog_game(None) + + def run_dialog_game(self, button): + self.controles.stop() + from BiblioJAM.JAMDialog import JAMDialog + dialog= JAMDialog(mensaje="¿Abandonas el Juego?", + funcion_ok=self.ok, funcion_cancel=self.cancel) + fuente, tamanio= JAMG.get_Font_fawn() + dialog.set_font_from_file(fuente, tamanio= 30) + dialog.boton_aceptar.set_font_from_file(fuente, tamanio= 30) + dialog.boton_cancelar.set_font_from_file(fuente, tamanio= 30) + a,b,c= JAMG.get_estilo_papel_quemado() + dialog.set_colors_dialog(base=c, bordes=c) + dialog.set_colors_buttons(colorbas=a, colorbor=b, colorcara=c) + self.estado= "Dialog" + dialog.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + while self.estado== "Dialog": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + dialog.clear(self.ventana, self.fondo) + dialog.update() + pygame.event.clear() + dialog.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + if self.estado== "Intro": + dialog.clear(self.ventana, self.fondo) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + return self.run() + else: + dialog.clear(self.ventana, self.fondo) + self.ventana_real.blit(pygame.transform.scale(self.ventana, + self.resolucionreal), (0,0)) + pygame.display.update() + self.controles.play() + + def ok(self, button): + #self.estado = "Intro" + self.salir() + def cancel(self, button): + self.estado= "Game" + # ----------- EVENTOS en JUEGO --------------- + + def salir(self, valor= None): + self.estado = False + self.emit("run_grupo", "grupo2", self.puntos) + +class Seniales(pygame.sprite.OrderedUpdates): + def __init__(self, main): + pygame.sprite.OrderedUpdates.__init__(self) + self.main = main + self.palabras = {} + self.botones = [] + self.flechas = {} + self.matriz_letras = [] + self.textos = [] + self.load_sprites() + self.set_posicion((75, 180)) + + def load_sprites(self): + self.empty() + self.botones = [] + self.palabras = {} + self.flechas = {} + self.matriz_letras = [] + self.textos = [] + matriz = G.get_letras_FGR_T0204() + for linea in matriz: + fila = [] + for letra in linea: + l = Letra(letra) + fila.append(l) + if bool(letra): self.add(l) + self.matriz_letras.append(fila) + + # Verticales + acera = [] + for linea in self.matriz_letras[0:5]: + acera.append(linea[-1]) + self.palabras['ACERA'] = acera + banquina = [] + for linea in self.matriz_letras[2:]: + banquina.append(linea[8]) + self.palabras['BANQUINA'] = banquina + cruzar = [] + for linea in self.matriz_letras[2:8]: + cruzar.append(linea[6]) + self.palabras['CRUZAR'] = cruzar + # Horizontales + self.palabras['FILA'] = self.matriz_letras[0][9:] + self.palabras['BORDE'] = self.matriz_letras[2][8:] + self.palabras['ESQUINA'] = self.matriz_letras[4][3:10] + self.palabras['OPUESTA'] = self.matriz_letras[6][:7] + self.palabras['PEATON'] = self.matriz_letras[-1][6:] + + for key in self.palabras.keys(): + boton = Boton(key) + boton.connect(callback = self.main.toma, sonido_select = None) + self.botones.append(boton) + self.add(boton) + + directorio = os.path.join(G.IMAGENES, 'flechas') + self.flechas['ACERA'] = Flecha('ACERA', os.path.join(directorio, 'v_flecha6.png')) + self.flechas['BANQUINA'] = Flecha('BANQUINA', os.path.join(directorio, 'v_flecha2.png')) + self.flechas['CRUZAR'] = Flecha('CRUZAR', os.path.join(directorio, 'v_flecha3.png')) + self.flechas['FILA'] = Flecha('FILA', os.path.join(directorio, 'flecha7.png')) + self.flechas['BORDE'] = Flecha('BORDE', os.path.join(directorio, 'flecha5.png')) + self.flechas['ESQUINA'] = Flecha('ESQUINA', os.path.join(directorio, 'flecha1.png')) + self.flechas['OPUESTA'] = Flecha('OPUESTA', os.path.join(directorio, 'flecha4.png')) + self.flechas['PEATON'] = Flecha('PEATON', os.path.join(directorio, 'flecha8.png')) + for key in self.flechas.keys(): + flecha = self.flechas[key] + flecha.connect(callback = self.main.deja, sonido_select = None) + self.add(flecha) + + fuente, tamanio = JAMG.get_Font_fawn() + for linea in G.get_Texto_FGR_T0204(): + label = JAMLabel(linea) + label.set_font_from_file(fuente, tamanio = 28) + label.set_text(color = (255,255,255,255)) + self.textos.append(label) + + def set_posicion(self, punto = (0,0)): + pos = punto + x, y = pos + w, h = (0,0) + for fila in self.matriz_letras: + for letra in fila: + letra.set_posicion( (x,y) ) + w,h = letra.get_tamanio() + x += w + y += h + x = pos[0] + + # Verticales + flecha = self.flechas['ACERA'] + elemento = self.matriz_letras[0][-1] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a,b-d) ) + flecha = self.flechas['BANQUINA'] + elemento = self.matriz_letras[2][8] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a,b-d) ) + flecha = self.flechas['CRUZAR'] + elemento = self.matriz_letras[2][6] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a,b-d) ) + + # Horizontales + flecha = self.flechas['FILA'] + elemento = self.matriz_letras[0][9] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a - c, b) ) + flecha = self.flechas['BORDE'] + elemento = self.matriz_letras[2][8] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a-c,b) ) + flecha = self.flechas['ESQUINA'] + elemento = self.matriz_letras[4][3] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a-c,b) ) + flecha = self.flechas['OPUESTA'] + elemento = self.matriz_letras[6][0] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a-c,b) ) + flecha = self.flechas['PEATON'] + elemento = self.matriz_letras[-1][6] + ((a,b), (c,d)) = (elemento.get_posicion(), flecha.get_tamanio()) + flecha.set_posicion( (a-c,b) ) + + ultimo = self.matriz_letras[-1][-1] + x, y = ultimo.get_posicion() + w, h = ultimo.get_tamanio() + posbuttons = (x+w,y+h) + + for fila in self.matriz_letras: + for letra in fila: + if not letra.letra: + fila.remove(letra) + letra.kill() + + y = posbuttons[1] + 60 + for boton in self.botones[6:]: + w,h = boton.get_tamanio() + x = posbuttons[0] - w + boton.set_posicion( (x, y) ) + y += h + 10 + y = posbuttons[1] + 60 + posbuttons = (posbuttons[0] - (w+10), posbuttons[1]) + for boton in self.botones[4:6]: + w,h = boton.get_tamanio() + x = posbuttons[0] - w + boton.set_posicion( (x, y) ) + y += h + 10 + y = posbuttons[1] + 60 + posbuttons = (posbuttons[0] - (w+10), posbuttons[1]) + for boton in self.botones[2:4]: + w,h = boton.get_tamanio() + x = posbuttons[0] - w + boton.set_posicion( (x, y) ) + y += h + 10 + y = posbuttons[1] + 60 + posbuttons = (posbuttons[0] - (w+10), posbuttons[1]) + for boton in self.botones[:2]: + w,h = boton.get_tamanio() + x = posbuttons[0] - w + boton.set_posicion( (x, y) ) + y += h + 10 + + x, y = (G.RESOLUCION[0]/2 + 175, 150) + for label in self.textos: + label.set_posicion((x,y)) + y += label.get_tamanio()[1]+10 + + a,b,c,d = (0,0,0,0) + a,b = self.textos[0].get_posicion() + for label in self.textos: + e,f = label.get_tamanio() + if e > c: c = e + if f > d: d = f + sombra = JAMG.get_Sombra((c+40, self.textos[-1].get_posicion()[1]-b + d + 40), + (92,193,235,255), 80) + sombra = sombra.sprites()[0] + sombra.rect.x, sombra.rect.y = (a-20, b-20) + self.add(sombra) + for label in self.textos: + self.add(label) + + def seleccionar(self, boton): + for bot in self.botones: + if not bot.ubicado: + bot.connect(callback = self.main.toma, sonido_select = None) + bot.reset() + boton.connect(callback = None, sonido_select = None) + boton.seleccionar() + + def marcar(self, flecha): + for letra in self.palabras[flecha.nombre]: + letra.set_text(texto = letra.letra) + flecha.kill() + +class Boton(JAMButton): + def __init__(self, texto): + JAMButton.__init__(self, texto, None) + self.ubicado = False + fuente, tamanio = JAMG.get_Font_fawn() + self.set_font_from_file(fuente, tamanio = 30) + self.set_tamanios(tamanio = (150, 25), grosorbor=1, detalle=1, espesor=1) + self.colorcara, self.colorbase, self.colorborde, g, d, e = JAMG.get_default_jambutton_values() + self.colormarca = (92,193,235,255) + self.reset() + def reset(self): + self.set_colores(colorbas = self.colorbase, + colorbor = self.colorborde, colorcara = self.colorcara) + def seleccionar(self): + self.set_colores(colorbas = self.colormarca, + colorbor = self.colormarca, colorcara = self.colormarca) + def marcar(self): + self.ubicado = True + self.connect(callback = None, sonido_select = None) + self.set_colores(colorbas = self.colorbase, + colorbor = self.colorbase, colorcara = self.colorbase) + +class Flecha(JAMButton): + def __init__(self, nombre, imagen): + JAMButton.__init__(self, '',imagen) + self.nombre = nombre + self.set_tamanios(tamanio = (50, 50), grosorbor=1, detalle=1, espesor=1) + imagen = pygame.image.load(imagen) + self.final_select = JAMG.get_Rectangulo((240,150,0,255), (50,50)) + self.final_select.blit(imagen,(0,0)) + self.final_unselect = imagen + self.image = self.final_unselect + self.rect = self.image.get_rect() + +class Letra(JAMButton): + def __init__(self, letra): + JAMButton.__init__(self, '',None) + fuente, tamanio = JAMG.get_Font_fawn() + self.set_font_from_file(fuente, tamanio = 30) + self.letra = letra + #if self.letra: self.set_text(texto = self.letra) + self.set_tamanios(tamanio = (50, 50), grosorbor=1, detalle=1, espesor=1) + def update(self): + pass + +# --------- TEXTOS ---------------- +class Textos_Intro(pygame.sprite.OrderedUpdates): + def __init__(self): + pygame.sprite.OrderedUpdates.__init__(self) + self.base= None + self.labels= [] + self.gruber= None + self.base= None + + self.load_textos() + self.set_posicion_labels() + self.base= self.get_base() + self.gruber= self.get_gruber() + + self.add(self.base) + self.add(self.labels) + self.add(self.gruber) + + def get_gruber(self): + gruber= pygame.sprite.Sprite() + gruber.image= G.get_Imagen_Gruber1() + gruber.rect= gruber.image.get_rect() + w,h= G.RESOLUCION + gruber.rect.x, gruber.rect.y= (w/2-gruber.rect.w/2, self.base.rect.y-gruber.rect.h) + return gruber + + def get_base(self): + w,h= self.get_dimensiones() + w+= 20 + h+= 20 + base= pygame.sprite.Sprite() + superficie = pygame.Surface( (w,h), flags=SRCALPHA ) + superficie.fill((0,0,0,150)) + base.image= superficie + base.rect= base.image.get_rect() + base.rect.x, base.rect.y= (G.RESOLUCION[0]/2-base.rect.w/2, self.labels[0].rect.y-10) + return base + + def load_textos(self): + textos= G.get_Textos_FGR_T0301() + for linea in textos: + label= Sprite_Texto(linea) + self.labels.append(label) + + def set_posicion_labels(self): + w,h= G.RESOLUCION + x, y= (0,h/2-30) + for label in self.labels: + x= w/2-label.rect.w/2 + label.rect.x= x + label.rect.y= y + y+= label.rect.h + + def get_dimensiones(self): + w,h= (0,0) + for label in self.labels: + if label.rect.w > w: w= label.rect.w + h+= label.rect.h + return (w,h) + +class Sprite_Texto(pygame.sprite.Sprite): + def __init__(self, texto): + pygame.sprite.Sprite.__init__(self) + string_to_render= "" + fuente= self.get_Font() + string_to_render = unicode( texto.decode("utf-8") ) + self.image = fuente.render(string_to_render, 1, JAMG.get_blanco()) + self.rect= self.image.get_rect() + + def get_Font(self): + fuente, tamanio= JAMG.get_Font_fawn() + return pygame.font.Font(fuente, tamanio) +# --------- TEXTOS ---------------- + +# --------- Botones en Menu (Salir y Jugar) ------------------ +class ButtonsMenu(pygame.sprite.OrderedUpdates): + def __init__(self, main): + pygame.sprite.OrderedUpdates.__init__(self) + self.main = main + imagen = G.get_Flecha() + salir = JAMButton("",None) + salir.set_imagen(origen = imagen, tamanio=(100,55)) + salir.set_colores(colorbas=JAMG.get_negro(), colorcara=JAMG.get_negro()) + salir.set_tamanios(tamanio=(0,0), grosorbor=1, detalle=1, espesor=1) + salir.set_posicion(punto= (10,10)) + #salir.connect (callback = self.main.run_dialog_intro) + salir.connect (callback = self.main.salir, sonido_select = None) + self.add(salir) + jugar= JAMButton("Jugar",None) + jugar.set_text(color=JAMG.get_blanco()) + fuente, tamanio= JAMG.get_Font_fawn() + jugar.set_font_from_file(fuente, tamanio= 50) + jugar.set_colores(colorbas=JAMG.get_negro(), colorcara=JAMG.get_negro()) + jugar.set_tamanios(tamanio=(200,0), grosorbor=1, detalle=1, espesor=1) + w,h= G.RESOLUCION + ww,hh= jugar.get_tamanio() + jugar.set_posicion(punto= (w-ww-10,h-hh-10)) + jugar.connect (callback= self.run_Instruc) + self.add(jugar) + + def run_Instruc(self, button): + button.connect (callback= self.switching) + self.main.estado= "Instruc" + pygame.event.clear() + return self.main.run_Instruc() + + def switching(self, button): + self.main.estado= "Game" + pygame.event.clear() + return self.main.run() +# --------- Botones en Menu (Salir y Jugar) ------------------ + +# --------- Mensaje Final --------- +class Mensaje(pygame.sprite.OrderedUpdates): + def __init__(self, main, opcion, text1, text2): + pygame.sprite.OrderedUpdates.__init__(self) + self.main= main + self.estado= True + + self.base= None + self.label1= None + self.label2= None + self.labels= [] + self.gruber= None + + self.label1= Sprite_Texto(text1) + self.label2= Sprite_Texto(text2) + self.labels= [self.label1, self.label2] + + self.x_final_label1= 0 + self.x_final_label2= 0 + + self.init() + self.base= self.get_base() + if opcion== "Victory": + self.gruber= self.get_gruber2() + elif opcion== "End": + self.gruber= self.get_gruber3() + + self.add(self.base) + self.add(self.labels) + self.add(self.gruber) + + def init(self): + w,h= G.RESOLUCION + w1,h1= (self.label1.rect.w, self.label1.rect.h) + w2,h2= (self.label2.rect.w, self.label2.rect.h) + + x= 0-w + y= h/2-h2/2 + self.label2.rect.x, self.label2.rect.y= (x,y) + self.x_final_label2= w/2-w2/2 + + x= w + y= self.label2.rect.y - h2 + self.label1.rect.x, self.label1.rect.y= (x,y) + self.x_final_label1= w/2-w1/2 + + def get_base(self): + w,h= self.get_dimensiones() + w+= 20 + h+= 20 + base= pygame.sprite.Sprite() + superficie = pygame.Surface( (w,h), flags=SRCALPHA ) + superficie.fill((0,0,0,150)) + base.image= superficie + base.rect= base.image.get_rect() + base.rect.x, base.rect.y= (G.RESOLUCION[0]/2-base.rect.w/2, self.labels[0].rect.y-10) + return base + + def get_dimensiones(self): + w,h= (0,0) + for label in self.labels: + if label.rect.w > w: w= label.rect.w + h+= label.rect.h + return (w,h) + + def get_gruber2(self): + gruber= pygame.sprite.Sprite() + gruber.image= G.get_Imagen_Gruber2() + gruber.rect= gruber.image.get_rect() + w,h= G.RESOLUCION + gruber.rect.x, gruber.rect.y= (w/2-gruber.rect.w/2, self.base.rect.y-gruber.rect.h) + return gruber + + def get_gruber3(self): + gruber= pygame.sprite.Sprite() + gruber.image= G.get_Imagen_Gruber3() + gruber.rect= gruber.image.get_rect() + w,h= G.RESOLUCION + gruber.rect.x, gruber.rect.y= (w/2-gruber.rect.w/2, self.base.rect.y-gruber.rect.h) + return gruber + + def update(self): + x,y,w,h= self.label2.rect + final= True + if x < self.x_final_label2: + x+= 60 + self.label2.rect.x, self.label2.rect.y= (x,y) + final= False + else: + self.label2.rect.x= self.x_final_label2 + + x,y,w,h= self.label1.rect + if x > self.x_final_label1: + x-= 60 + self.label1.rect.x, self.label1.rect.y= (x,y) + final= False + else: + self.label1.rect.x= self.x_final_label1 + + if final== True: + self.label2.rect.x= self.x_final_label2 + self.label1.rect.x= self.x_final_label1 + self.estado= False + |