diff options
Diffstat (limited to 'Menu.py')
-rw-r--r-- | Menu.py | 468 |
1 files changed, 468 insertions, 0 deletions
@@ -0,0 +1,468 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Main.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, gc, sys, random, gtk, pygtk +from pygame.locals import * + +import Globals as G +gc.enable() + +import BiblioJAM +from BiblioJAM.JAMButton import JAMButton +import BiblioJAM.JAMGlobals as JAMG + +class Menu(): + def __init__(self): + self.ventana = None + self.name= "Derecho a Transitar" + self.estado= False + + # Variables del Juego + self.fondo= None + self.reloj= None + + # Sprites + self.botonesmenu= None + self.game= None + + # Escalado + self.ventana_real= None + self.resolucionreal= None + self.VA= None + self.VH= None + + self.preset() + + from BiblioJAM.JAMatrix import JAMatrix + matrix= JAMatrix(self, self.ventana_real, self.resolucionreal) + matrix.set_imagen_matrix(None) + matrix.carga_game() + + self.estado= "Intro" + self.switch() + + def run_menu(self): + ''' loop del menú. ''' + self.ventana.blit(self.fondo, (0,0)) + self.botonesmenu.draw(self.ventana) + 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.botonesmenu.clear(self.ventana, self.fondo) + self.botonesmenu.update() + self.handle_event_Intro() + 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 presentacion(self, button): + presentacion= Presentacion(self) + self.ventana.blit(self.fondo, (0,0)) + presentacion.draw(self.ventana) + pygame.display.update() + while presentacion.estado: + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + presentacion.clear(self.ventana, self.fondo) + presentacion.update() + pygame.event.clear() + presentacion.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + + self.fondo= G.get_Fondo() + 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() + + def update(self): + 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() + + def run_T0101(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0101 import FGR_T0101 + juego= FGR_T0101(self) + juego.run() + self.update() + if juego.estado: self.run_T0102(None) + + def run_T0102(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0102 import FGR_T0102 + juego= FGR_T0102(self) + juego.run() + self.update() + #if juego.estado: self.run_T0103(None) + + ''' + def run_T0103(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0103 import FGR_T0103 + return FGR_T0103(self)''' + + def run_T0201(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0201 import FGR_T0201 + juego= FGR_T0201(self) + juego.run() + self.update() + if juego.estado: self.run_T0202(None) + + def run_T0202(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0202 import FGR_T0202 + juego= FGR_T0202(self) + juego.run() + self.update() + #if juego.estado: self.run_T0102(None) + + def run_T0301(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0301 import FGR_T0301 + juego= FGR_T0301(self) + juego.run() + self.update() + if juego.estado: self.run_T0302(None) + + def run_T0302(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0302 import FGR_T0302 + juego= FGR_T0302(self) + juego.run() + self.update() + if juego.estado: self.run_T0303(None) + + def run_T0303(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0303 import FGR_T0303 + juego= FGR_T0303(self) + juego.run() + self.update() + #if juego.estado: self.run_T0102(None) + + def run_T0401(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0401 import FGR_T0401 + juego= FGR_T0401(self) + juego.run() + self.update() + if juego.estado: self.run_T0402(None) + + def run_T0402(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0402 import FGR_T0402 + juego= FGR_T0402(self) + juego.run() + self.update() + #if juego.estado: self.run_T0403(None) + + def run_T0501(self, jambutton): + self.ventana.blit(self.fondo, (0,0)) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + from FGR_T0501 import FGR_T0501 + juego= FGR_T0501(self) + juego.run() + self.update() + #if juego.estado: self.run_T0102(None) + + def switch(self): + if self.estado== "Intro": + self.set_event_intro() + return self.run_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() + self.run_dialog_intro(None) + + def preset(self): + 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) + + def load(self): + self.fondo= G.get_Fondo() + self.botonesmenu= ButtonsMenu(self) + self.reloj = pygame.time.Clock() + self.estado= True + + def set_event_intro(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) + + 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) + 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() + def cancel_intro(self, button): + self.estado= "Intro" + + def salir(self): + pygame.quit() + sys.exit() + +class ButtonsMenu(pygame.sprite.OrderedUpdates): + def __init__(self, main): + pygame.sprite.OrderedUpdates.__init__(self) + 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= main.run_dialog_intro) + self.add(salir) + + imagen_cartel_unselect, imagen_cartel_select= G.get_Imagen_CartelMenu() + + uno= Cartel(imagen_cartel_unselect.copy(), imagen_cartel_select.copy(), "Señales de Tránsito") + uno.connect(callback= main.run_T0101) + uno.rect.x, uno.rect.y= (50, 100) + self.add(uno) + + dos= Cartel(imagen_cartel_unselect.copy(), imagen_cartel_select.copy(), "Caminando a la Escuela") + dos.connect(callback= main.run_T0201) + dos.rect.x, dos.rect.y= (200, 270) + self.add(dos) + + tres= Cartel(imagen_cartel_unselect.copy(), imagen_cartel_select.copy(), "Seré Conductor") + tres.connect(callback= main.run_T0301) + tres.rect.x, tres.rect.y= (380, 180) + self.add(tres) + + cuatro= Cartel(imagen_cartel_unselect.copy(), imagen_cartel_select.copy(), "Niñas y niños pasajeros!") + cuatro.connect(callback= main.run_T0401) + cuatro.rect.x, cuatro.rect.y= (900, 200) + self.add(cuatro) + + cinco= Cartel(imagen_cartel_unselect.copy(), imagen_cartel_select.copy(), "Paseando en Familia") + cinco.connect(callback= main.run_T0501) + cinco.rect.x, cinco.rect.y= (650, 120) + self.add(cinco) + + presenta1, presenta2= G.get_cartel_presenta() + w,h= G.RESOLUCION + presenta= Cartel(presenta1, presenta2, "") + presenta.connect(callback= main.presentacion) + ww,hh= (presenta.rect.w, presenta.rect.h) + presenta.rect.x, presenta.rect.y= (w-ww, h-hh) + self.add(presenta) + +class Cartel(pygame.sprite.Sprite): + def __init__(self, imagen_cartel_unselect, imagen_cartel_select, texto): + pygame.sprite.Sprite.__init__(self) + labels= self.get_labels(texto) + self.final_unselect, self.final_select= (imagen_cartel_unselect, imagen_cartel_select) + self.bliting_labels(self.final_unselect, labels) + self.bliting_labels(self.final_select, labels) + self.image= self.final_unselect + self.rect= self.image.get_rect() + self.select= False + self.callback= False + + def get_labels(self, texto): + from BiblioJAM.JAMLabel import JAMLabel + labels= [] + for text in texto.split("\n"): + label= JAMLabel(text) + label.set_text(color=JAMG.get_azul1()) + fuente, tamanio= JAMG.get_Font_fawn() + label.set_font_from_file(fuente, tamanio= 30) + labels.append(label) + return labels + + def bliting_labels(self, imagen, labels): + x,y,w,h= imagen.get_rect() + y+= 10 + for label in labels: + w1,h1= label.get_tamanio() + imagen.blit(label.image, (w/2-w1/2, y)) + y+= h1 + + def connect(self, callback=None): + self.callback= callback + + def update(self): + eventos_republicar= [] + eventos= pygame.event.get(pygame.MOUSEBUTTONDOWN) + for event in eventos: + posicion = event.pos + if self.rect.collidepoint(posicion): + punto= (int(posicion[0]-self.rect.x), int(posicion[1]-self.rect.y)) + color= self.image.get_at( punto ) + if color[3] != 0: + if self.callback: + pygame.event.clear() + return self.callback(self) + else: + if not event in eventos_republicar: eventos_republicar.append(event) + + eventos= pygame.event.get(pygame.MOUSEMOTION) + for event in eventos: + posicion = event.pos + if self.rect.collidepoint(posicion): + punto= (int(posicion[0]-self.rect.x), int(posicion[1]-self.rect.y)) + color= self.image.get_at( punto ) + if color[3] != 0: + if self.select == False: + self.image = self.final_select + self.select = True + else: + if self.select == True: + self.image = self.final_unselect + self.select = False + if not event in eventos_republicar: eventos_republicar.append(event) + for event in eventos_republicar: + pygame.event.post(event) + +class Presentacion(pygame.sprite.OrderedUpdates): + def __init__(self, main): + pygame.sprite.OrderedUpdates.__init__(self) + self.main= main + self.imagenes= G.get_Presentacion() + siguiente= None + anterior= None + salir= None + self.imagen_actual= None + self.estado= True + + fuente, tamanio= JAMG.get_Font_fawn() + w,h= G.RESOLUCION + + siguiente= JAMButton("Siguiente", None) + siguiente.set_text(color=JAMG.get_blanco()) + siguiente.set_font_from_file(fuente, tamanio= 40) + siguiente.set_colores(colorbas=JAMG.get_negro(), colorcara=JAMG.get_negro()) + siguiente.set_tamanios(tamanio=(150,0), grosorbor=1, detalle=1, espesor=1) + ww,hh= siguiente.get_tamanio() + siguiente.set_posicion(punto= (w-ww-20,h-hh-20)) + siguiente.connect (callback= self.next) + self.add(siguiente) + + anterior= JAMButton("Anterior", None) + anterior.set_text(color=JAMG.get_blanco()) + anterior.set_font_from_file(fuente, tamanio= 40) + anterior.set_colores(colorbas=JAMG.get_negro(), colorcara=JAMG.get_negro()) + anterior.set_tamanios(tamanio=(150,0), grosorbor=1, detalle=1, espesor=1) + ww,hh= anterior.get_tamanio() + anterior.set_posicion(punto= (20,h-hh-20)) + anterior.connect (callback= self.previous) + self.add(anterior) + + salir= JAMButton("Salir", None) + salir.set_text(color=JAMG.get_blanco()) + salir.set_font_from_file(fuente, tamanio= 40) + salir.set_colores(colorbas=JAMG.get_negro(), colorcara=JAMG.get_negro()) + salir.set_tamanios(tamanio=(150,0), grosorbor=1, detalle=1, espesor=1) + ww,hh= salir.get_tamanio() + salir.set_posicion(punto= (w/2-ww/2,20)) + salir.connect (callback= self.volver) + self.add(salir) + + self.imagen_actual= self.imagenes[0] + self.main.fondo= self.imagen_actual + + def volver(self, button): + for sprite in self.sprites(): + sprite.kill() + self.empty() + self.estado= False + + def next(self, button): + try: + indice= self.imagenes.index(self.imagen_actual) + if indice < len(self.imagenes)-1: + self.imagen_actual= self.imagenes[indice+1] + self.main.fondo= self.imagen_actual + else: + self.imagen_actual= self.imagenes[0] + self.main.ventana.blit(self.main.fondo, (0,0)) + pygame.display.update() + except: + pass + + def previous(self, button): + try: + indice= self.imagenes.index(self.imagen_actual) + if indice > 1: + self.imagen_actual= self.imagenes[indice-1] + self.main.fondo= self.imagen_actual + else: + self.imagen_actual= self.imagenes[-1] + self.main.ventana.blit(self.main.fondo, (0,0)) + pygame.display.update() + except: + pass + |