Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/FGR_T0204.py
diff options
context:
space:
mode:
Diffstat (limited to 'FGR_T0204.py')
-rw-r--r--FGR_T0204.py827
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
+