Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Cria_Bichos_Main.py
diff options
context:
space:
mode:
Diffstat (limited to 'Cria_Bichos_Main.py')
-rw-r--r--Cria_Bichos_Main.py1997
1 files changed, 1002 insertions, 995 deletions
diff --git a/Cria_Bichos_Main.py b/Cria_Bichos_Main.py
index f2c3fd0..31db2b6 100644
--- a/Cria_Bichos_Main.py
+++ b/Cria_Bichos_Main.py
@@ -19,7 +19,14 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import pygame, gc, sys, random, os, threading, gtk, pygtk
+import pygame
+import gc
+import sys
+import random
+import os
+import threading
+import gtk
+
from pygame.locals import *
from math import sin, cos, radians
@@ -38,1009 +45,1009 @@ from Ficha_Bicho import Ficha_Bicho
from Libreta_de_Lectura import Libreta_de_Lectura
def Traduce_posiciones(VA, VH):
- eventos= pygame.event.get(pygame.MOUSEBUTTONDOWN)
- for event in eventos:
- x, y = event.pos
- xx= x/VA
- yy= y/VH
- event_pos= (xx, yy)
- for event in eventos:
- evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN, pos= event_pos, button=event.button)
- pygame.event.post(evt)
-
- eventos= pygame.event.get(pygame.MOUSEMOTION)
- for event in eventos:
- x, y = event.pos
- xx= x/VA
- yy= y/VH
- event_pos= (xx, yy)
- for event in eventos:
- evt = pygame.event.Event(pygame.MOUSEMOTION, pos= event_pos, rel=event.rel, buttons=event.buttons)
- pygame.event.post(evt)
-
+ eventos= pygame.event.get(pygame.MOUSEBUTTONDOWN)
+ for event in eventos:
+ x, y = event.pos
+ xx= x/VA
+ yy= y/VH
+ event_pos= (xx, yy)
+ for event in eventos:
+ evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN, pos= event_pos, button=event.button)
+ pygame.event.post(evt)
+
+ eventos= pygame.event.get(pygame.MOUSEMOTION)
+ for event in eventos:
+ x, y = event.pos
+ xx= x/VA
+ yy= y/VH
+ event_pos= (xx, yy)
+ for event in eventos:
+ evt = pygame.event.Event(pygame.MOUSEMOTION, pos= event_pos, rel=event.rel, buttons=event.buttons)
+ pygame.event.post(evt)
+
class Cria_Bichos_Main():
- def __init__(self, cucarasims):
- self.velocidad_juego = VG.VELOCIDADJUEGO
- self.maximo_cucas = VG.MAXIMOCUCAS
-
- self.cucarasims= cucarasims
-
- self.ventana= self.cucarasims.ventana
- self.reloj = self.cucarasims.reloj
- self.fondo = None
-
- self.sonido_bicho = None
- self.imagenes_bicho = None
- self.Bichos = None # cucarachas
- self.interfaz = None # botones
-
- self.nivel = None
- self.area_visible = None # Donde pueden caminar las cucas
-
- self.puntero = None # grupo para contener la imagen del puntero actual
- self.pan_select = None # puntero del mouse para pan seleccionado
- self.agua_select = None
-
- self.alimento = None # grupo de alimento en escenario
- self.unidad_alimento = None # imagen para alimento en escenario
-
- self.agua = None # grupo de agua en escenario
- self.unidad_agua = None # imagen para agua en escenario
-
- self.tiempo_de_juego = 0
- self.horas = 0
- self.dias = 0
- self.anios = 0
-
- self.ficha_bicho = None # para mostrar los datos del bicho seleccionado
- self.ficha = None
-
- self.secuencia_muda = 0 # las veces que se ha reproducido automáticamente esta lección
- self.lecciones = None # contenedor para leccion en pantalla
- self.leccion_muda = None # leccion muda
-
- self.reproduccion = 0
- self.leccion_reproduccion = None
- self.ootecas = None
-
- self.nacimientos = 0
- self.leccion_ciclo_vital = None
-
- self.muertes = 0
- self.leccion_muerte = None
- self.cadaveres = None
-
- self.leccion_generica = None # para cualquier lección sin imagenes extras
- self.plaga = 0
-
- self.machos, self.hembras = 0,0
- self.mensajes = None
- self.mensajes_emergentes = None
- self.puntos = 0
-
- self.dialog_cerrar = None
- self.dialog_guardar = None
-
- self.sonido_select = None
-
- # Escalado
- self.resolucionreal= self.cucarasims.resolucionreal
- self.ventana_real= self.cucarasims.ventana_real
- self.VA= self.cucarasims.VA
- self.VH= self.cucarasims.VH
-
- self.load()
-
- def Run(self):
- self.nivel = "Bichos"
- self.ventana.blit(self.fondo, (0,0))
- self.deselecciona_leccion(None)
- self.Bichos.draw(self.ventana)
- self.interfaz.draw(self.ventana)
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
- self.selecciona_leccion_ciclo(None)
-
- while self.nivel == "Bichos":
- self.reloj.tick(35)
- while gtk.events_pending():
- gtk.main_iteration(False)
- Traduce_posiciones(self.VA, self.VH)
-
- if self.lecciones:
- self.pause_game_lecciones()
-
- self.agua.clear(self.ventana, self.fondo)
- self.alimento.clear(self.ventana, self.fondo)
- self.cadaveres.clear(self.ventana, self.fondo)
- self.ootecas.clear(self.ventana, self.fondo)
- self.Bichos.clear(self.ventana, self.fondo)
- self.interfaz.clear(self.ventana, self.fondo)
- self.ficha.clear(self.ventana, self.fondo)
- self.mensajes.clear(self.ventana, self.fondo)
- self.puntero.clear(self.ventana, self.fondo)
-
- self.agua.update()
- self.alimento.update()
- self.cadaveres.update()
- self.ootecas.update()
- self.Bichos.update()
- self.interfaz.update()
- self.ficha.update()
- self.mensajes.update()
- self.puntero.update()
- self.handle_event()
- pygame.event.clear()
-
- self.agua.draw(self.ventana)
- self.alimento.draw(self.ventana)
- self.cadaveres.draw(self.ventana)
- self.ootecas.draw(self.ventana)
- self.Bichos.draw(self.ventana)
- self.interfaz.draw(self.ventana)
- self.ficha.draw(self.ventana)
- self.mensajes.draw(self.ventana)
- self.puntero.draw(self.ventana)
-
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
-
- self.set_tiempo_de_juego()
-
- def get_end(self):
- self.event_end_game() # cuando pierde nada más
-
- def set_musica(self, button= None):
- self.set_mensaje(texto= "Musica Activada.")
- self.interfaz.boton_musica.set_imagen(origen= self.interfaz.imagenes_audio[0])
- pygame.mixer.music.load(VG.MUSICA1)
- pygame.mixer.music.play(-1, 0.0)
-
- def set_pause_musica(self, button= None):
- self.set_mensaje(texto="Musica Desactivada.")
- self.interfaz.boton_musica.set_imagen(origen= self.interfaz.imagenes_audio[1])
- if pygame.mixer.music.get_busy():
- pygame.mixer.music.stop()
- else:
- self.set_musica()
-
- def no_mensajes(self):
- self.mensajes.clear(self.ventana, self.fondo)
- pygame.display.update()
- self.mensajes = pygame.sprite.OrderedUpdates()
-
- if not self.ootecas.sprites():
- # no habrán más naciemientos
- if not self.machos or not self.hembras:
- # faltan especímenes de uno de los sexos
- self.get_end()
- if self.machos + self.hembras >= self.maximo_cucas:
- self.migrar()
-
- def migrar(self):
- # la mitad de los machos y de las hembras se van
- migracion_machos = self.machos/2
- migracion_hembras = self.hembras/2
-
- for bicho in self.Bichos.sprites():
- if bicho.sexo == "M" and migracion_machos > 0 and self.machos >= 2:
- bicho.kill()
- self.puntos += 1
- migracion_machos -= 1
-
- if bicho.sexo == "F" and migracion_hembras > 0 and self.hembras >= 2:
- bicho.kill()
- self.puntos += 1
- migracion_hembras -= 1
-
- self.set_mensaje(texto="Algunas Cucarachas han migrado hacia otros habitats.")
-
- def set_mensaje(self, texto=""):
- self.sonido_bicho.play()
- if self.mensajes_emergentes.texto != texto:
- self.mensajes_emergentes.set_mensaje(texto)
- if self.mensajes != self.mensajes_emergentes:
- self.mensajes = self.mensajes_emergentes
-
- def get_nuevo_Juego(self):
- # poner todo a cero y empezar de nuevo
- self.Bichos.empty()
- self.cadaveres.empty()
- self.alimento.empty()
- self.ootecas.empty()
- self.agua.empty()
- self.ficha = pygame.sprite.OrderedUpdates()
- self.puntos = 0
- self.tiempo_de_juego = 0
- self.horas = 0
- self.dias = 0
- self.anios = 0
- self.machos, self.hembras = 0,0
-
- self.secuencia_muda = 0
- self.reproduccion = 0
- self.nacimientos = 0
- self.muertes = 0
- self.plaga = 0
-
- while not self.machos or not self.hembras:
- # asegurar un macho y una hembra
- self.event_nacer()
- self.machos, self.hembras = self.verificar_sexos_en_habitat()
-
- def verificar_sexos_en_habitat(self):
- # verifica si hay machos para reproducirse
- machos = 0
- hembras = 0
- for cuca in self.Bichos.sprites():
- if cuca.sexo == "M":
- machos += 1
- if cuca.sexo == "F":
- hembras += 1
- return machos, hembras
-
- def event_morir(self, posicion=(0,0), dias=0, leccion=False):
- # muere una cuca
- if self.muertes == 0:
- self.muertes = 1
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.lecciones = self.leccion_muerte
- if not self.interfaz.boton_muerte in self.interfaz:
- self.interfaz.add(self.interfaz.boton_muerte)
- if leccion == False:
- # Cuando es True se está llamando desde el botón para ver la lección
- self.cadaveres.add(Cadaver(self, posicion=posicion, dias=dias))
- self.set_mensaje(texto="Se han producido muertes en el habitat.")
-
- def event_nacer(self, leccion=False):
- # nace una cuca
- if self.nacimientos == 0:
- self.nacimientos = 1
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.lecciones = self.leccion_ciclo_vital
- if not self.interfaz.boton_ciclo in self.interfaz:
- self.interfaz.add(self.interfaz.boton_ciclo)
- if leccion == False:
- # Cuando es True se está llamando desde el botón para ver la lección
- self.Bichos.add(Bicho(self))
- self.set_mensaje(texto="Se han producido nacimientos en el habitat.")
-
- def pause_game_lecciones(self):
- # pausa el juego y reproduce las lecciones
- while self.lecciones.sprites():
- self.reloj.tick(35)
- while gtk.events_pending():
- gtk.main_iteration(False)
- Traduce_posiciones(self.VA, self.VH)
- self.lecciones.clear(self.ventana, self.fondo)
- self.lecciones.update()
- self.handle_event()
- pygame.event.clear()
- self.lecciones.draw(self.ventana)
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
-
- def event_muda(self, posicion=(0, 0), tamanio=(63,50)):
- # dejar exoesqueleto
- self.set_mensaje(texto="Algunas Cucarachas han realizado la muda de su exoesqueleto.")
- if self.secuencia_muda == 0:
- self.secuencia_muda = 1
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.lecciones = self.leccion_muda
- if not self.interfaz.boton_muda in self.interfaz:
- self.interfaz.add(self.interfaz.boton_muda)
-
- def event_reproduccion(self, posicion=(0, 0)):
- # dejar ooteca
- if posicion != None:
- self.ootecas.add(Ooteca(self, posicion=posicion))
- self.set_mensaje(texto="Hay nuevas ootecas en el habitat.")
-
- if self.reproduccion == 0:
- # self.reproduccion es para verificar si se ha visto la leccion.
- # la leccion se activa automaticamente la 1ª vez nada más y despues no se muestra automaticamente
- # para no molestar al usuario
- self.reproduccion = 1
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.lecciones = self.leccion_reproduccion
- if not self.interfaz.boton_reproduccion in self.interfaz:
- self.interfaz.add(self.interfaz.boton_reproduccion)
-
- def event_end_game(self):
- # lectura perder
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.leccion_generica.set_lectura(VG.LECTURAENDGAME)
- x = VG.RESOLUCION[0]/2 - self.leccion_generica.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - self.leccion_generica.hoja_impresa.rect.h/2
- self.leccion_generica.set_posicion(punto=(x,y))
- self.lecciones = self.leccion_generica
-
- def event_plaga(self):
- # dejar exoesqueleto
- if self.plaga == 0:
- self.plaga = 1
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.leccion_generica.set_lectura(VG.LECTURAPLAGA)
- x = VG.RESOLUCION[0]/2 - self.leccion_generica.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - self.leccion_generica.hoja_impresa.rect.h/2
- self.leccion_generica.set_posicion(punto=(x,y))
- self.lecciones = self.leccion_generica
- if not self.interfaz.boton_plaga in self.interfaz:
- self.interfaz.add(self.interfaz.boton_plaga)
-
- def get_leccion_muerte(self):
- # La lección sobre la muerte
- libreta = Libreta_de_Lectura(VG.LECTURAMUERTE)
- x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
- libreta.set_posicion(punto=(x,y))
-
- muertea = pygame.sprite.Sprite()
- muertea.image = pygame.transform.scale(pygame.image.load(VG.MUERTE), (400,252)).convert_alpha()
- muertea.rect = muertea.image.get_rect()
-
- y = (VG.RESOLUCION[1]/2) - (muertea.rect.h/2)
- x = libreta.hoja_impresa.rect.x - muertea.rect.w - 20
- muertea.rect.x, muertea.rect.y = x, y
- y = muertea.rect.y + muertea.rect.h + 10
-
- # frame contenedor
- frame = pygame.sprite.Sprite()
- ancho = 10 + muertea.rect.w + 10
- altura = 10 + muertea.rect.h + 10
- x, y = muertea.rect.x - 10, muertea.rect.y - 10
- frame.image= pygame.Surface( (ancho,altura) )
- frame.image.fill( (255,255,255,255) )
- frame.rect = frame.image.get_rect()
- frame.rect.x, frame.rect.y = x, y
-
- libreta.add(frame)
- libreta.add(muertea)
-
- libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
- libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
- return libreta
-
- def get_leccion_cilo_vital(self):
- # La lección sobre el ciclo vital
- libreta = Libreta_de_Lectura(VG.LECTURACICLOVITAL)
- x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
- libreta.set_posicion(punto=(x,y))
-
- cicloa = pygame.sprite.Sprite()
- cicloa.image = pygame.transform.scale(pygame.image.load(VG.CICLO1), (400,398)).convert_alpha()
- cicloa.rect = cicloa.image.get_rect()
-
- ciclob = pygame.sprite.Sprite()
- ciclob.image = pygame.transform.scale(pygame.image.load(VG.CICLO2), (400,270)).convert_alpha()
- ciclob.rect = ciclob.image.get_rect()
-
- y = VG.RESOLUCION[1]/2 - (cicloa.rect.h + 10 + ciclob.rect.h)/2
- x = libreta.hoja_impresa.rect.x - cicloa.rect.w - 20
- cicloa.rect.x, cicloa.rect.y = x, y
- y = cicloa.rect.y + cicloa.rect.h + 10
- ciclob.rect.x, ciclob.rect.y = x, y
-
- # frame contenedor
- frame = pygame.sprite.Sprite()
- ancho = 10 + cicloa.rect.w + 10
- altura = 10 + cicloa.rect.h + 10 + ciclob.rect.h + 10
- x, y = cicloa.rect.x - 10, cicloa.rect.y - 10
- frame.image= pygame.Surface( (ancho,altura) )
- frame.image.fill( (255,255,255,255) )
- frame.rect = frame.image.get_rect()
- frame.rect.x, frame.rect.y = x, y
-
- libreta.add(frame)
- libreta.add(cicloa)
- libreta.add(ciclob)
-
- libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
- libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
- return libreta
-
- def get_leccion_reproduccion(self):
- # La lección sobre reproducción
- libreta = Libreta_de_Lectura(VG.LECTURAREPRODUCCION)
- x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
- libreta.set_posicion(punto=(x,y))
-
- reproa = pygame.sprite.Sprite()
- reproa.image = pygame.transform.scale(pygame.image.load(VG.REPRODUCCION1), (400,250)).convert_alpha()
- reproa.rect = reproa.image.get_rect()
-
- reprob = pygame.sprite.Sprite()
- reprob.image = pygame.transform.scale(pygame.image.load(VG.REPRODUCCION2), (400,248)).convert_alpha()
- reprob.rect = reprob.image.get_rect()
-
- y = VG.RESOLUCION[1]/2 - (reproa.rect.h + 10 + reprob.rect.h)/2
- x = libreta.hoja_impresa.rect.x - reproa.rect.w - 20
- reproa.rect.x, reproa.rect.y = x, y
- y = reproa.rect.y + reproa.rect.h + 10
- reprob.rect.x, reprob.rect.y = x, y
-
- # frame contenedor
- frame = pygame.sprite.Sprite()
- ancho = 10 + reproa.rect.w + 10
- altura = 10 + reproa.rect.h + 10 + reprob.rect.h + 10
- x, y = reproa.rect.x - 10, reproa.rect.y - 10
- frame.image= pygame.Surface( (ancho,altura) )
- frame.image.fill( (255,255,255,255) )
- frame.rect = frame.image.get_rect()
- frame.rect.x, frame.rect.y = x, y
-
- libreta.add(frame)
- libreta.add(reproa)
- libreta.add(reprob)
-
- libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
- libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
- return libreta
-
- def get_leccion_muda(self):
- # Leccion Muda de Exoesqueleto
- libreta = Libreta_de_Lectura(VG.LECTURAMUDA)
- x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
- libreta.set_posicion(punto=(x,y))
-
- secuencia = Secuencia_muda()
- mudaa = pygame.sprite.Sprite()
- mudaa.image = pygame.transform.scale(pygame.image.load(VG.MUDA1), (400,192)).convert_alpha()
- mudaa.rect = mudaa.image.get_rect()
- mudab = pygame.sprite.Sprite()
- mudab.image = pygame.transform.scale(pygame.image.load(VG.MUDA2), (400,140)).convert_alpha()
- mudab.rect = mudab.image.get_rect()
-
- y = VG.RESOLUCION[1]/2 - (secuencia.rect.h + 10 + mudaa.rect.h + 10 + mudab.rect.h)/2
- x = libreta.hoja_impresa.rect.x - secuencia.rect.w - 20
- secuencia.rect.x, secuencia.rect.y = x, y
- y = secuencia.rect.y + secuencia.rect.h + 10
- mudaa.rect.x, mudaa.rect.y = x, y
- y = mudaa.rect.y + mudaa.rect.h + 10
- mudab.rect.x, mudab.rect.y = x, y
-
- # frame contenedor
- frame = pygame.sprite.Sprite()
- ancho = 10 + secuencia.rect.w + 10
- altura = 10 + secuencia.rect.h + 10 + mudaa.rect.h + 10 + mudab.rect.h + 10
- x, y = secuencia.rect.x - 10, secuencia.rect.y - 10
- frame.image= pygame.Surface( (ancho,altura) )
- frame.image.fill( (255,255,255,255) )
- frame.rect = frame.image.get_rect()
- frame.rect.x, frame.rect.y = x, y
-
- libreta.add(frame)
- libreta.add(secuencia)
- libreta.add(mudaa)
- libreta.add(mudab)
- libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
- libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
- return libreta
-
- def get_leccion_generica(self):
- # La lección sobre reproducción
- libreta = Libreta_de_Lectura(" ")
- x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
- libreta.set_posicion(punto=(x,y))
- libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
- libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
- return libreta
-
- def deselecciona_leccion(self, button= None):
- # deselecciona cualquier leccion que se este ejecutando para detenerla
- self.lecciones.clear(self.ventana, self.fondo)
- self.lecciones= pygame.sprite.OrderedUpdates()
- pygame.display.update()
-
- def selecciona_mensaje_salir(self, button= None):
- self.deselecciona_leccion(None)
- self.lecciones= self.dialog_cerrar
- def selecciona_mensaje_guardar(self, button):
- self.deselecciona_leccion(None)
- self.lecciones = self.dialog_guardar
-
- def guardar_juego(self, button= None):
- base= self.cucarasims.base_de_datos
- datos= self.get_datos_para_guardar()
- self.cucarasims.Archivos_y_Directorios.guardar(base=base, datos=datos)
- self.salir(None)
-
- def get_datos_para_guardar(self):
- datos_de_juego = [self.anios, self.dias, self.horas, self.puntos]
- bichos = []
- for bicho in self.Bichos.sprites():
- sexo = bicho.sexo
- anios = bicho.anios
- dias = bicho.dias
- horas = bicho.horas
- hambre = bicho.hambre
- sed = bicho.sed
- dato_bicho = [sexo, anios, dias, horas, hambre, sed]
- bichos.append(dato_bicho)
-
- ootecas = []
- for ooteca in self.ootecas.sprites():
- dias = ooteca.dias
- horas = ooteca.horas
- huevos = ooteca.huevos
- dato_ooteca = [dias, horas, huevos]
- ootecas.append(dato_ooteca)
-
- datos = (datos_de_juego, bichos, ootecas)
- return datos
-
- def selecciona_leccion_extra(self, button= None):
- # para conectar al boton de la leccion correspondiente
- self.sonido_bicho.play()
- self.deselecciona_leccion(None)
- self.leccion_generica.set_lectura(VG.LECTURASEXTRAS)
- x = VG.RESOLUCION[0]/2 - self.leccion_generica.hoja_impresa.rect.w/5
- y = VG.RESOLUCION[1]/2 - self.leccion_generica.hoja_impresa.rect.h/2
- self.leccion_generica.set_posicion(punto=(x,y))
- self.lecciones = self.leccion_generica
-
- def selecciona_leccion_plaga(self, button= None):
- # para conectar al boton de la leccion correspondiente
- plaga = self.plaga
- self.deselecciona_leccion(None)
- self.plaga = 0
- self.event_plaga()
- self.plaga = plaga # para devolverlo al estado inicial
-
- def selecciona_leccion_muerte(self, button= None):
- # para conectar al boton de la leccion correspondiente
- muertes = self.muertes
- self.deselecciona_leccion(None)
- self.muertes = 0
- self.event_morir(leccion=True)
- self.muertes = muertes # para devolverlo al estado inicial
-
- def selecciona_leccion_ciclo(self, button= None):
- # para conectar al boton de la leccion correspondiente
- nacimientos = self.nacimientos
- self.deselecciona_leccion(None)
- self.nacimientos = 0
- self.event_nacer(leccion=True)
- self.nacimientos = nacimientos # para devolverlo al estado inicial
-
- def selecciona_leccion_muda(self, button= None):
- # para conectar al boton de la leccion correspondiente
- mudas = self.secuencia_muda
- self.deselecciona_leccion(None)
- self.secuencia_muda = 0
- self.event_muda()
- self.secuencia_muda = mudas # para devolverlo al estado inicial
-
- def selecciona_leccion_reproduccion(self, button= None):
- # para conectar al boton de la leccion correspondiente
- reproduccion = self.reproduccion
- self.deselecciona_leccion(None)
- self.reproduccion = 0
- self.event_reproduccion(posicion=None)
- self.reproduccion = reproduccion # para devolverlo al estado inicial
-
- def set_tiempo_de_juego(self):
- # calculos vitales de tiempo
- self.tiempo_de_juego += 1
- cambios = False
- if self.tiempo_de_juego == self.velocidad_juego:
- self.horas += 1
- self.tiempo_de_juego = 0
- for bicho in self.Bichos.sprites():
- bicho.set_tiempo_de_vida()
- for ooteca in self.ootecas.sprites():
- ooteca.set_tiempo_de_vida()
- for cadaver in self.cadaveres.sprites():
- cadaver.set_tiempo_de_vida()
- cambios = True
-
- if self.horas == 1:
- # ************************************* #
- self.machos, self.hembras = self.verificar_sexos_en_habitat()
- total = self.machos + self.hembras
- ootecas = len(self.ootecas.sprites())
- bichos = "Cucarachas: %s, Machos: %s, Hembras: %s, Ootecas: %s Migración: %s" % (total, self.machos,
- self.hembras, ootecas, self.puntos)
- self.interfaz.set_informacion_de_habitat(bichos)
-
- if not self.machos and not ootecas:
- self.set_mensaje(texto="No quedan Machos ni ootecas en el habitat, la Reproducción ya no será posible.")
- elif not self.hembras and not ootecas:
- self.set_mensaje(texto="No quedan Hembras ni ootecas en el habitat, la Reproducción ya no será posible.")
- elif not self.machos and not self.hembras and not ootecas:
- self.set_mensaje(texto="Todas las Cucarachas han muerto y no hay ootecas en el habitat.")
- elif self.machos + self.hembras >= self.maximo_cucas:
- self.event_plaga()
- self.set_mensaje(texto="Hay Demasiadas Cucarachas en el habitat. Algunas migrarán. !!!")
- # ************************************* #
- if self.horas == 24:
- self.dias += 1
- self.horas = 0
- self.aumenta_hambre()
- self.aumenta_sed()
-
- if self.dias == 365:
- self.anios += 1
- self.dias = 0
-
- if cambios:
- tiempo = "Tiempo de Juego = Años: %s Dias: %s Horas: %s" % (self.anios, self.dias, self.horas)
- self.interfaz.set_tiempo_de_juego(tiempo)
-
- def aumenta_hambre(self):
- # cada 24 horas aumenta el hambre de los bichos
- for bicho in self.Bichos.sprites():
- bicho.hambre -= VG.AUMENTAHAMBRE
- def aumenta_sed(self):
- # cada 24 horas aumenta la sed de los bichos
- for bicho in self.Bichos.sprites():
- bicho.sed -= VG.AUMENTASED
-
- # ------------------------------- CONFIGURACIONES ------------------------------------------------ #
- def load(self):
- if not self.sonido_select: self.sonido_select = JAMG.get_sound_select()
- if not self.area_visible: self.area_visible = pygame.Rect(35,35,VG.RESOLUCION[0]-70,VG.RESOLUCION[1]-70)
- if not self.reloj: self.reloj = pygame.time.Clock()
- if not self.fondo: self.fondo = self.get_fondo()
- if not self.imagenes_bicho:
- self.imagenes_bicho = [pygame.transform.rotate(pygame.image.load(VG.CUCARACHA1), -90),
- pygame.transform.rotate(pygame.image.load(VG.CUCARACHA2), -90),
- pygame.transform.rotate(pygame.image.load(VG.CUCARACHA3), -90),
- pygame.transform.rotate(pygame.image.load(VG.CUCARACHA4), -90)]
-
- if not self.sonido_bicho: self.sonido_bicho = pygame.mixer.Sound(VG.SONIDOCUCARACHA)
- if not self.puntero: self.puntero= pygame.sprite.OrderedUpdates()
- if not self.pan_select: self.pan_select = Puntero(1)
- if not self.agua_select: self.agua_select = Puntero(2)
- if not self.interfaz:
- self.interfaz= Interfaz()
- self.interfaz.boton_pan.connect(callback=self.get_pan, sonido_select=self.sonido_select)
- self.interfaz.boton_jarra.connect(callback=self.get_agua, sonido_select=self.sonido_select)
- self.interfaz.boton_muda.connect(callback=self.selecciona_leccion_muda, sonido_select=self.sonido_select)
- self.interfaz.boton_reproduccion.connect(callback=self.selecciona_leccion_reproduccion, sonido_select=self.sonido_select)
- self.interfaz.boton_ciclo.connect(callback=self.selecciona_leccion_ciclo, sonido_select=self.sonido_select)
- self.interfaz.boton_muerte.connect(callback=self.selecciona_leccion_muerte, sonido_select=self.sonido_select)
- self.interfaz.boton_plaga.connect(callback=self.selecciona_leccion_plaga, sonido_select=self.sonido_select)
- self.interfaz.boton_musica.connect(callback=self.set_pause_musica, sonido_select=self.sonido_select)
- self.interfaz.boton_extras.connect(callback=self.selecciona_leccion_extra, sonido_select=self.sonido_select)
- self.interfaz.boton_salir.connect(callback=self.selecciona_mensaje_salir, sonido_select=self.sonido_select)
-
- if not self.lecciones: self.lecciones= pygame.sprite.OrderedUpdates()
-
- if not self.leccion_muda: self.leccion_muda = self.get_leccion_muda()
- if not self.leccion_generica: self.leccion_generica = self.get_leccion_generica()
- if not self.leccion_reproduccion: self.leccion_reproduccion = self.get_leccion_reproduccion()
- if not self.leccion_ciclo_vital: self.leccion_ciclo_vital = self.get_leccion_cilo_vital()
- if not self.leccion_muerte: self.leccion_muerte = self.get_leccion_muerte()
-
- if not self.alimento: self.alimento = pygame.sprite.OrderedUpdates()
- if not self.mensajes: self.mensajes = pygame.sprite.OrderedUpdates()
- if not self.mensajes_emergentes: self.mensajes_emergentes = Mensaje(self)
- if not self.cadaveres: self.cadaveres = pygame.sprite.OrderedUpdates()
- if not self.ootecas: self.ootecas = pygame.sprite.OrderedUpdates()
- if not self.unidad_alimento: self.unidad_alimento = Alimento(self.interfaz)
- if not self.agua: self.agua = pygame.sprite.OrderedUpdates()
- if not self.unidad_agua: self.unidad_agua = Agua(self.interfaz)
- if not self.Bichos: self.Bichos = pygame.sprite.OrderedUpdates()
- if not self.ficha_bicho: self.ficha_bicho = Ficha_Bicho()
- if not self.ficha: self.ficha = pygame.sprite.OrderedUpdates()
-
- if not self.dialog_cerrar:
- a,b,c= JAMG.get_estilo_celeste()
- self.dialog_cerrar= JAMDialog(mensaje= "¿Deseas Salir del Juego?",
- funcion_ok= self.selecciona_mensaje_guardar, funcion_cancel= self.deselecciona_leccion)
- self.dialog_cerrar.set_colors_dialog(base= c, bordes= b)
- self.dialog_cerrar.set_colors_buttons(colorbas= a, colorbor= b, colorcara= c)
- if not self.dialog_guardar:
- a,b,c= JAMG.get_estilo_naranja()
- self.dialog_guardar= JAMDialog(mensaje= "¿Guardar Antes de Salir?",
- funcion_ok= self.guardar_juego, funcion_cancel= self.Borrar_salir)
- self.dialog_guardar.set_colors_dialog(base= c, bordes= b)
- self.dialog_guardar.set_colors_buttons(colorbas= a, colorbor= b, colorcara= c)
-
- def lee(self, button= None):
- if pygame.mixer.music.get_busy():
- self.set_pause_musica(None)
- pygame.mixer.quit()
- textbuffer = ""
- for elem in self.lecciones.lectura[self.lecciones.indice_pagina_actual]:
- textbuffer += (" " + elem)
- self.lecciones.motor_de_voz.lee(textbuffer)
- pygame.mixer.init()
- self.set_pause_musica(None)
-
- def get_agua(self, button= None):
- # imagen pan para el puntero del mouse al seleccionar alimento
- imagen= self.puntero.sprites()
- if imagen:
- self.puntero.empty()
- pygame.mouse.set_visible(True)
- elif not imagen:
- self.puntero.add(self.agua_select)
- pygame.mouse.set_visible(False)
-
- def get_pan(self, button= None):
- # imagen pan para el puntero del mouse al seleccionar alimento
- imagen= self.puntero.sprites()
- if imagen:
- self.puntero.empty()
- pygame.mouse.set_visible(True)
- elif not imagen:
- self.puntero.add(self.pan_select)
- pygame.mouse.set_visible(False)
-
- def get_fondo(self, color=(200,200,200,1), tamanio=VG.RESOLUCION):
- # devuelve una superficie de color para el fondo de la ventana
- superficie = pygame.transform.scale(pygame.image.load(VG.FONDO), (VG.RESOLUCION))
- return superficie
-
- def handle_event(self):
- eventos= pygame.event.get(pygame.MOUSEBUTTONDOWN)
- for event in eventos:
- posicion= event.pos
- if self.pan_select in self.puntero.sprites():
- # si tenemos seleccionado el alimento dejar el pan en el escenario
- if not self.alimento.sprites():
- self.unidad_alimento.cantidad = VG.UNIDADALIMENTO
- self.unidad_alimento.rect.center = posicion
- self.alimento.add(self.unidad_alimento)
- self.puntero.empty()
- pygame.mouse.set_visible(True)
- self.set_mensaje(texto= "Las Cucarachas detectan con sus antenas, el alimento en el habitat.")
- elif self.agua_select in self.puntero.sprites():
- # si tenemos seleccionado el agua, dejar el agua en el escenario
- if not self.agua.sprites():
- self.unidad_agua.cantidad = VG.UNIDADAGUA
- self.unidad_agua.rect.center = posicion
- self.agua.add(self.unidad_agua)
- self.puntero.empty()
- pygame.mouse.set_visible(True)
- self.set_mensaje(texto= "Las Cucarachas detectan con sus antenas, el agua en el habitat.")
-
- elif not self.pan_select in self.puntero.sprites() and not self.agua_select in self.puntero.sprites():
- # si no tenemos seleccionado el alimento, vemos si se ha seleccionado alguna cuca
- posicion = posicion
- bicho_select = None
- for bicho in self.Bichos.sprites():
- if bicho.rect.collidepoint(posicion):
- # cuando seleccionamos una cucaracha
- bicho.play_sonido_bicho()
- bicho_select = bicho
- break
- if bicho_select:
- self.ficha_bicho.set_bicho(bicho_select)
- self.ficha = self.ficha_bicho
- else:
- self.ficha_bicho.bicho = None
- self.ficha.clear(self.ventana, self.fondo)
- self.ficha = pygame.sprite.OrderedUpdates()
- # republicar evento ?
-
- for event in pygame.event.get(pygame.KEYDOWN):
- if event.key == pygame.K_ESCAPE:
- self.selecciona_mensaje_salir(None)
-
- def salir(self, button= None):
- self.deselecciona_leccion(None)
- self.cucarasims.nivel = "Menu"
- self.cucarasims.RunMenu()
-
- def Borrar_salir(self, button= None):
- # Si no hay datos borra la base
- self.cucarasims.Archivos_y_Directorios.verifica(base_abrir=self.cucarasims.base_de_datos)
- self.cucarasims.nivel = "Menu"
- self.cucarasims.RunMenu()
-
+ def __init__(self, cucarasims):
+ self.velocidad_juego = VG.VELOCIDADJUEGO
+ self.maximo_cucas = VG.MAXIMOCUCAS
+
+ self.cucarasims= cucarasims
+
+ self.ventana= self.cucarasims.ventana
+ self.reloj = self.cucarasims.reloj
+ self.fondo = None
+
+ self.sonido_bicho = None
+ self.imagenes_bicho = None
+ self.Bichos = None # cucarachas
+ self.interfaz = None # botones
+
+ self.nivel = None
+ self.area_visible = None # Donde pueden caminar las cucas
+
+ self.puntero = None # grupo para contener la imagen del puntero actual
+ self.pan_select = None # puntero del mouse para pan seleccionado
+ self.agua_select = None
+
+ self.alimento = None # grupo de alimento en escenario
+ self.unidad_alimento = None # imagen para alimento en escenario
+
+ self.agua = None # grupo de agua en escenario
+ self.unidad_agua = None # imagen para agua en escenario
+
+ self.tiempo_de_juego = 0
+ self.horas = 0
+ self.dias = 0
+ self.anios = 0
+
+ self.ficha_bicho = None # para mostrar los datos del bicho seleccionado
+ self.ficha = None
+
+ self.secuencia_muda = 0 # las veces que se ha reproducido automáticamente esta lección
+ self.lecciones = None # contenedor para leccion en pantalla
+ self.leccion_muda = None # leccion muda
+
+ self.reproduccion = 0
+ self.leccion_reproduccion = None
+ self.ootecas = None
+
+ self.nacimientos = 0
+ self.leccion_ciclo_vital = None
+
+ self.muertes = 0
+ self.leccion_muerte = None
+ self.cadaveres = None
+
+ self.leccion_generica = None # para cualquier lección sin imagenes extras
+ self.plaga = 0
+
+ self.machos, self.hembras = 0,0
+ self.mensajes = None
+ self.mensajes_emergentes = None
+ self.puntos = 0
+
+ self.dialog_cerrar = None
+ self.dialog_guardar = None
+
+ self.sonido_select = None
+
+ # Escalado
+ self.resolucionreal= self.cucarasims.resolucionreal
+ self.ventana_real= self.cucarasims.ventana_real
+ self.VA= self.cucarasims.VA
+ self.VH= self.cucarasims.VH
+
+ self.load()
+
+ def Run(self):
+ self.nivel = "Bichos"
+ self.ventana.blit(self.fondo, (0,0))
+ self.deselecciona_leccion(None)
+ self.Bichos.draw(self.ventana)
+ self.interfaz.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+ self.selecciona_leccion_ciclo(None)
+
+ while self.nivel == "Bichos":
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ Traduce_posiciones(self.VA, self.VH)
+
+ if self.lecciones:
+ self.pause_game_lecciones()
+
+ self.agua.clear(self.ventana, self.fondo)
+ self.alimento.clear(self.ventana, self.fondo)
+ self.cadaveres.clear(self.ventana, self.fondo)
+ self.ootecas.clear(self.ventana, self.fondo)
+ self.Bichos.clear(self.ventana, self.fondo)
+ self.interfaz.clear(self.ventana, self.fondo)
+ self.ficha.clear(self.ventana, self.fondo)
+ self.mensajes.clear(self.ventana, self.fondo)
+ self.puntero.clear(self.ventana, self.fondo)
+
+ self.agua.update()
+ self.alimento.update()
+ self.cadaveres.update()
+ self.ootecas.update()
+ self.Bichos.update()
+ self.interfaz.update()
+ self.ficha.update()
+ self.mensajes.update()
+ self.puntero.update()
+ self.handle_event()
+ pygame.event.clear()
+
+ self.agua.draw(self.ventana)
+ self.alimento.draw(self.ventana)
+ self.cadaveres.draw(self.ventana)
+ self.ootecas.draw(self.ventana)
+ self.Bichos.draw(self.ventana)
+ self.interfaz.draw(self.ventana)
+ self.ficha.draw(self.ventana)
+ self.mensajes.draw(self.ventana)
+ self.puntero.draw(self.ventana)
+
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ self.set_tiempo_de_juego()
+
+ def get_end(self):
+ self.event_end_game() # cuando pierde nada más
+
+ def set_musica(self, button= None):
+ self.set_mensaje(texto= "Musica Activada.")
+ self.interfaz.boton_musica.set_imagen(origen= self.interfaz.imagenes_audio[0])
+ pygame.mixer.music.load(VG.MUSICA1)
+ pygame.mixer.music.play(-1, 0.0)
+
+ def set_pause_musica(self, button= None):
+ self.set_mensaje(texto="Musica Desactivada.")
+ self.interfaz.boton_musica.set_imagen(origen= self.interfaz.imagenes_audio[1])
+ if pygame.mixer.music.get_busy():
+ pygame.mixer.music.stop()
+ else:
+ self.set_musica()
+
+ def no_mensajes(self):
+ self.mensajes.clear(self.ventana, self.fondo)
+ pygame.display.update()
+ self.mensajes = pygame.sprite.OrderedUpdates()
+
+ if not self.ootecas.sprites():
+ # no habrán más naciemientos
+ if not self.machos or not self.hembras:
+ # faltan especímenes de uno de los sexos
+ self.get_end()
+ if self.machos + self.hembras >= self.maximo_cucas:
+ self.migrar()
+
+ def migrar(self):
+ # la mitad de los machos y de las hembras se van
+ migracion_machos = self.machos/2
+ migracion_hembras = self.hembras/2
+
+ for bicho in self.Bichos.sprites():
+ if bicho.sexo == "M" and migracion_machos > 0 and self.machos >= 2:
+ bicho.kill()
+ self.puntos += 1
+ migracion_machos -= 1
+
+ if bicho.sexo == "F" and migracion_hembras > 0 and self.hembras >= 2:
+ bicho.kill()
+ self.puntos += 1
+ migracion_hembras -= 1
+
+ self.set_mensaje(texto="Algunas Cucarachas han migrado hacia otros habitats.")
+
+ def set_mensaje(self, texto=""):
+ self.sonido_bicho.play()
+ if self.mensajes_emergentes.texto != texto:
+ self.mensajes_emergentes.set_mensaje(texto)
+ if self.mensajes != self.mensajes_emergentes:
+ self.mensajes = self.mensajes_emergentes
+
+ def get_nuevo_Juego(self):
+ # poner todo a cero y empezar de nuevo
+ self.Bichos.empty()
+ self.cadaveres.empty()
+ self.alimento.empty()
+ self.ootecas.empty()
+ self.agua.empty()
+ self.ficha = pygame.sprite.OrderedUpdates()
+ self.puntos = 0
+ self.tiempo_de_juego = 0
+ self.horas = 0
+ self.dias = 0
+ self.anios = 0
+ self.machos, self.hembras = 0,0
+
+ self.secuencia_muda = 0
+ self.reproduccion = 0
+ self.nacimientos = 0
+ self.muertes = 0
+ self.plaga = 0
+
+ while not self.machos or not self.hembras:
+ # asegurar un macho y una hembra
+ self.event_nacer()
+ self.machos, self.hembras = self.verificar_sexos_en_habitat()
+
+ def verificar_sexos_en_habitat(self):
+ # verifica si hay machos para reproducirse
+ machos = 0
+ hembras = 0
+ for cuca in self.Bichos.sprites():
+ if cuca.sexo == "M":
+ machos += 1
+ if cuca.sexo == "F":
+ hembras += 1
+ return machos, hembras
+
+ def event_morir(self, posicion=(0,0), dias=0, leccion=False):
+ # muere una cuca
+ if self.muertes == 0:
+ self.muertes = 1
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.lecciones = self.leccion_muerte
+ if not self.interfaz.boton_muerte in self.interfaz:
+ self.interfaz.add(self.interfaz.boton_muerte)
+ if leccion == False:
+ # Cuando es True se está llamando desde el botón para ver la lección
+ self.cadaveres.add(Cadaver(self, posicion=posicion, dias=dias))
+ self.set_mensaje(texto="Se han producido muertes en el habitat.")
+
+ def event_nacer(self, leccion=False):
+ # nace una cuca
+ if self.nacimientos == 0:
+ self.nacimientos = 1
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.lecciones = self.leccion_ciclo_vital
+ if not self.interfaz.boton_ciclo in self.interfaz:
+ self.interfaz.add(self.interfaz.boton_ciclo)
+ if leccion == False:
+ # Cuando es True se está llamando desde el botón para ver la lección
+ self.Bichos.add(Bicho(self))
+ self.set_mensaje(texto="Se han producido nacimientos en el habitat.")
+
+ def pause_game_lecciones(self):
+ # pausa el juego y reproduce las lecciones
+ while self.lecciones.sprites():
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ Traduce_posiciones(self.VA, self.VH)
+ self.lecciones.clear(self.ventana, self.fondo)
+ self.lecciones.update()
+ self.handle_event()
+ pygame.event.clear()
+ self.lecciones.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ def event_muda(self, posicion=(0, 0), tamanio=(63,50)):
+ # dejar exoesqueleto
+ self.set_mensaje(texto="Algunas Cucarachas han realizado la muda de su exoesqueleto.")
+ if self.secuencia_muda == 0:
+ self.secuencia_muda = 1
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.lecciones = self.leccion_muda
+ if not self.interfaz.boton_muda in self.interfaz:
+ self.interfaz.add(self.interfaz.boton_muda)
+
+ def event_reproduccion(self, posicion=(0, 0)):
+ # dejar ooteca
+ if posicion != None:
+ self.ootecas.add(Ooteca(self, posicion=posicion))
+ self.set_mensaje(texto="Hay nuevas ootecas en el habitat.")
+
+ if self.reproduccion == 0:
+ # self.reproduccion es para verificar si se ha visto la leccion.
+ # la leccion se activa automaticamente la 1ª vez nada más y despues no se muestra automaticamente
+ # para no molestar al usuario
+ self.reproduccion = 1
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.lecciones = self.leccion_reproduccion
+ if not self.interfaz.boton_reproduccion in self.interfaz:
+ self.interfaz.add(self.interfaz.boton_reproduccion)
+
+ def event_end_game(self):
+ # lectura perder
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.leccion_generica.set_lectura(VG.LECTURAENDGAME)
+ x = VG.RESOLUCION[0]/2 - self.leccion_generica.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - self.leccion_generica.hoja_impresa.rect.h/2
+ self.leccion_generica.set_posicion(punto=(x,y))
+ self.lecciones = self.leccion_generica
+
+ def event_plaga(self):
+ # dejar exoesqueleto
+ if self.plaga == 0:
+ self.plaga = 1
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.leccion_generica.set_lectura(VG.LECTURAPLAGA)
+ x = VG.RESOLUCION[0]/2 - self.leccion_generica.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - self.leccion_generica.hoja_impresa.rect.h/2
+ self.leccion_generica.set_posicion(punto=(x,y))
+ self.lecciones = self.leccion_generica
+ if not self.interfaz.boton_plaga in self.interfaz:
+ self.interfaz.add(self.interfaz.boton_plaga)
+
+ def get_leccion_muerte(self):
+ # La lección sobre la muerte
+ libreta = Libreta_de_Lectura(VG.LECTURAMUERTE)
+ x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
+ libreta.set_posicion(punto=(x,y))
+
+ muertea = pygame.sprite.Sprite()
+ muertea.image = pygame.transform.scale(pygame.image.load(VG.MUERTE), (400,252)).convert_alpha()
+ muertea.rect = muertea.image.get_rect()
+
+ y = (VG.RESOLUCION[1]/2) - (muertea.rect.h/2)
+ x = libreta.hoja_impresa.rect.x - muertea.rect.w - 20
+ muertea.rect.x, muertea.rect.y = x, y
+ y = muertea.rect.y + muertea.rect.h + 10
+
+ # frame contenedor
+ frame = pygame.sprite.Sprite()
+ ancho = 10 + muertea.rect.w + 10
+ altura = 10 + muertea.rect.h + 10
+ x, y = muertea.rect.x - 10, muertea.rect.y - 10
+ frame.image= pygame.Surface( (ancho,altura) )
+ frame.image.fill( (255,255,255,255) )
+ frame.rect = frame.image.get_rect()
+ frame.rect.x, frame.rect.y = x, y
+
+ libreta.add(frame)
+ libreta.add(muertea)
+
+ libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
+ libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
+ return libreta
+
+ def get_leccion_cilo_vital(self):
+ # La lección sobre el ciclo vital
+ libreta = Libreta_de_Lectura(VG.LECTURACICLOVITAL)
+ x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
+ libreta.set_posicion(punto=(x,y))
+
+ cicloa = pygame.sprite.Sprite()
+ cicloa.image = pygame.transform.scale(pygame.image.load(VG.CICLO1), (400,398)).convert_alpha()
+ cicloa.rect = cicloa.image.get_rect()
+
+ ciclob = pygame.sprite.Sprite()
+ ciclob.image = pygame.transform.scale(pygame.image.load(VG.CICLO2), (400,270)).convert_alpha()
+ ciclob.rect = ciclob.image.get_rect()
+
+ y = VG.RESOLUCION[1]/2 - (cicloa.rect.h + 10 + ciclob.rect.h)/2
+ x = libreta.hoja_impresa.rect.x - cicloa.rect.w - 20
+ cicloa.rect.x, cicloa.rect.y = x, y
+ y = cicloa.rect.y + cicloa.rect.h + 10
+ ciclob.rect.x, ciclob.rect.y = x, y
+
+ # frame contenedor
+ frame = pygame.sprite.Sprite()
+ ancho = 10 + cicloa.rect.w + 10
+ altura = 10 + cicloa.rect.h + 10 + ciclob.rect.h + 10
+ x, y = cicloa.rect.x - 10, cicloa.rect.y - 10
+ frame.image= pygame.Surface( (ancho,altura) )
+ frame.image.fill( (255,255,255,255) )
+ frame.rect = frame.image.get_rect()
+ frame.rect.x, frame.rect.y = x, y
+
+ libreta.add(frame)
+ libreta.add(cicloa)
+ libreta.add(ciclob)
+
+ libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
+ libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
+ return libreta
+
+ def get_leccion_reproduccion(self):
+ # La lección sobre reproducción
+ libreta = Libreta_de_Lectura(VG.LECTURAREPRODUCCION)
+ x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
+ libreta.set_posicion(punto=(x,y))
+
+ reproa = pygame.sprite.Sprite()
+ reproa.image = pygame.transform.scale(pygame.image.load(VG.REPRODUCCION1), (400,250)).convert_alpha()
+ reproa.rect = reproa.image.get_rect()
+
+ reprob = pygame.sprite.Sprite()
+ reprob.image = pygame.transform.scale(pygame.image.load(VG.REPRODUCCION2), (400,248)).convert_alpha()
+ reprob.rect = reprob.image.get_rect()
+
+ y = VG.RESOLUCION[1]/2 - (reproa.rect.h + 10 + reprob.rect.h)/2
+ x = libreta.hoja_impresa.rect.x - reproa.rect.w - 20
+ reproa.rect.x, reproa.rect.y = x, y
+ y = reproa.rect.y + reproa.rect.h + 10
+ reprob.rect.x, reprob.rect.y = x, y
+
+ # frame contenedor
+ frame = pygame.sprite.Sprite()
+ ancho = 10 + reproa.rect.w + 10
+ altura = 10 + reproa.rect.h + 10 + reprob.rect.h + 10
+ x, y = reproa.rect.x - 10, reproa.rect.y - 10
+ frame.image= pygame.Surface( (ancho,altura) )
+ frame.image.fill( (255,255,255,255) )
+ frame.rect = frame.image.get_rect()
+ frame.rect.x, frame.rect.y = x, y
+
+ libreta.add(frame)
+ libreta.add(reproa)
+ libreta.add(reprob)
+
+ libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
+ libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
+ return libreta
+
+ def get_leccion_muda(self):
+ # Leccion Muda de Exoesqueleto
+ libreta = Libreta_de_Lectura(VG.LECTURAMUDA)
+ x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
+ libreta.set_posicion(punto=(x,y))
+
+ secuencia = Secuencia_muda()
+ mudaa = pygame.sprite.Sprite()
+ mudaa.image = pygame.transform.scale(pygame.image.load(VG.MUDA1), (400,192)).convert_alpha()
+ mudaa.rect = mudaa.image.get_rect()
+ mudab = pygame.sprite.Sprite()
+ mudab.image = pygame.transform.scale(pygame.image.load(VG.MUDA2), (400,140)).convert_alpha()
+ mudab.rect = mudab.image.get_rect()
+
+ y = VG.RESOLUCION[1]/2 - (secuencia.rect.h + 10 + mudaa.rect.h + 10 + mudab.rect.h)/2
+ x = libreta.hoja_impresa.rect.x - secuencia.rect.w - 20
+ secuencia.rect.x, secuencia.rect.y = x, y
+ y = secuencia.rect.y + secuencia.rect.h + 10
+ mudaa.rect.x, mudaa.rect.y = x, y
+ y = mudaa.rect.y + mudaa.rect.h + 10
+ mudab.rect.x, mudab.rect.y = x, y
+
+ # frame contenedor
+ frame = pygame.sprite.Sprite()
+ ancho = 10 + secuencia.rect.w + 10
+ altura = 10 + secuencia.rect.h + 10 + mudaa.rect.h + 10 + mudab.rect.h + 10
+ x, y = secuencia.rect.x - 10, secuencia.rect.y - 10
+ frame.image= pygame.Surface( (ancho,altura) )
+ frame.image.fill( (255,255,255,255) )
+ frame.rect = frame.image.get_rect()
+ frame.rect.x, frame.rect.y = x, y
+
+ libreta.add(frame)
+ libreta.add(secuencia)
+ libreta.add(mudaa)
+ libreta.add(mudab)
+ libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
+ libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
+ return libreta
+
+ def get_leccion_generica(self):
+ # La lección sobre reproducción
+ libreta = Libreta_de_Lectura(" ")
+ x = VG.RESOLUCION[0]/2 - libreta.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - libreta.hoja_impresa.rect.h/2
+ libreta.set_posicion(punto=(x,y))
+ libreta.boton_cerrar.connect(callback=self.deselecciona_leccion, sonido_select= None)
+ libreta.boton_leeme.connect(callback=self.lee, sonido_select= None)
+ return libreta
+
+ def deselecciona_leccion(self, button= None):
+ # deselecciona cualquier leccion que se este ejecutando para detenerla
+ self.lecciones.clear(self.ventana, self.fondo)
+ self.lecciones= pygame.sprite.OrderedUpdates()
+ pygame.display.update()
+
+ def selecciona_mensaje_salir(self, button= None):
+ self.deselecciona_leccion(None)
+ self.lecciones= self.dialog_cerrar
+ def selecciona_mensaje_guardar(self, button):
+ self.deselecciona_leccion(None)
+ self.lecciones = self.dialog_guardar
+
+ def guardar_juego(self, button= None):
+ base= self.cucarasims.base_de_datos
+ datos= self.get_datos_para_guardar()
+ self.cucarasims.Archivos_y_Directorios.guardar(base=base, datos=datos)
+ self.salir(None)
+
+ def get_datos_para_guardar(self):
+ datos_de_juego = [self.anios, self.dias, self.horas, self.puntos]
+ bichos = []
+ for bicho in self.Bichos.sprites():
+ sexo = bicho.sexo
+ anios = bicho.anios
+ dias = bicho.dias
+ horas = bicho.horas
+ hambre = bicho.hambre
+ sed = bicho.sed
+ dato_bicho = [sexo, anios, dias, horas, hambre, sed]
+ bichos.append(dato_bicho)
+
+ ootecas = []
+ for ooteca in self.ootecas.sprites():
+ dias = ooteca.dias
+ horas = ooteca.horas
+ huevos = ooteca.huevos
+ dato_ooteca = [dias, horas, huevos]
+ ootecas.append(dato_ooteca)
+
+ datos = (datos_de_juego, bichos, ootecas)
+ return datos
+
+ def selecciona_leccion_extra(self, button= None):
+ # para conectar al boton de la leccion correspondiente
+ self.sonido_bicho.play()
+ self.deselecciona_leccion(None)
+ self.leccion_generica.set_lectura(VG.LECTURASEXTRAS)
+ x = VG.RESOLUCION[0]/2 - self.leccion_generica.hoja_impresa.rect.w/5
+ y = VG.RESOLUCION[1]/2 - self.leccion_generica.hoja_impresa.rect.h/2
+ self.leccion_generica.set_posicion(punto=(x,y))
+ self.lecciones = self.leccion_generica
+
+ def selecciona_leccion_plaga(self, button= None):
+ # para conectar al boton de la leccion correspondiente
+ plaga = self.plaga
+ self.deselecciona_leccion(None)
+ self.plaga = 0
+ self.event_plaga()
+ self.plaga = plaga # para devolverlo al estado inicial
+
+ def selecciona_leccion_muerte(self, button= None):
+ # para conectar al boton de la leccion correspondiente
+ muertes = self.muertes
+ self.deselecciona_leccion(None)
+ self.muertes = 0
+ self.event_morir(leccion=True)
+ self.muertes = muertes # para devolverlo al estado inicial
+
+ def selecciona_leccion_ciclo(self, button= None):
+ # para conectar al boton de la leccion correspondiente
+ nacimientos = self.nacimientos
+ self.deselecciona_leccion(None)
+ self.nacimientos = 0
+ self.event_nacer(leccion=True)
+ self.nacimientos = nacimientos # para devolverlo al estado inicial
+
+ def selecciona_leccion_muda(self, button= None):
+ # para conectar al boton de la leccion correspondiente
+ mudas = self.secuencia_muda
+ self.deselecciona_leccion(None)
+ self.secuencia_muda = 0
+ self.event_muda()
+ self.secuencia_muda = mudas # para devolverlo al estado inicial
+
+ def selecciona_leccion_reproduccion(self, button= None):
+ # para conectar al boton de la leccion correspondiente
+ reproduccion = self.reproduccion
+ self.deselecciona_leccion(None)
+ self.reproduccion = 0
+ self.event_reproduccion(posicion=None)
+ self.reproduccion = reproduccion # para devolverlo al estado inicial
+
+ def set_tiempo_de_juego(self):
+ # calculos vitales de tiempo
+ self.tiempo_de_juego += 1
+ cambios = False
+ if self.tiempo_de_juego == self.velocidad_juego:
+ self.horas += 1
+ self.tiempo_de_juego = 0
+ for bicho in self.Bichos.sprites():
+ bicho.set_tiempo_de_vida()
+ for ooteca in self.ootecas.sprites():
+ ooteca.set_tiempo_de_vida()
+ for cadaver in self.cadaveres.sprites():
+ cadaver.set_tiempo_de_vida()
+ cambios = True
+
+ if self.horas == 1:
+ # ************************************* #
+ self.machos, self.hembras = self.verificar_sexos_en_habitat()
+ total = self.machos + self.hembras
+ ootecas = len(self.ootecas.sprites())
+ bichos = "Cucarachas: %s, Machos: %s, Hembras: %s, Ootecas: %s Migración: %s" % (total, self.machos,
+ self.hembras, ootecas, self.puntos)
+ self.interfaz.set_informacion_de_habitat(bichos)
+
+ if not self.machos and not ootecas:
+ self.set_mensaje(texto="No quedan Machos ni ootecas en el habitat, la Reproducción ya no será posible.")
+ elif not self.hembras and not ootecas:
+ self.set_mensaje(texto="No quedan Hembras ni ootecas en el habitat, la Reproducción ya no será posible.")
+ elif not self.machos and not self.hembras and not ootecas:
+ self.set_mensaje(texto="Todas las Cucarachas han muerto y no hay ootecas en el habitat.")
+ elif self.machos + self.hembras >= self.maximo_cucas:
+ self.event_plaga()
+ self.set_mensaje(texto="Hay Demasiadas Cucarachas en el habitat. Algunas migrarán. !!!")
+ # ************************************* #
+ if self.horas == 24:
+ self.dias += 1
+ self.horas = 0
+ self.aumenta_hambre()
+ self.aumenta_sed()
+
+ if self.dias == 365:
+ self.anios += 1
+ self.dias = 0
+
+ if cambios:
+ tiempo = "Tiempo de Juego = Años: %s Dias: %s Horas: %s" % (self.anios, self.dias, self.horas)
+ self.interfaz.set_tiempo_de_juego(tiempo)
+
+ def aumenta_hambre(self):
+ # cada 24 horas aumenta el hambre de los bichos
+ for bicho in self.Bichos.sprites():
+ bicho.hambre -= VG.AUMENTAHAMBRE
+ def aumenta_sed(self):
+ # cada 24 horas aumenta la sed de los bichos
+ for bicho in self.Bichos.sprites():
+ bicho.sed -= VG.AUMENTASED
+
+ # ------------------------------- CONFIGURACIONES ------------------------------------------------ #
+ def load(self):
+ if not self.sonido_select: self.sonido_select = JAMG.get_sound_select()
+ if not self.area_visible: self.area_visible = pygame.Rect(35,35,VG.RESOLUCION[0]-70,VG.RESOLUCION[1]-70)
+ if not self.reloj: self.reloj = pygame.time.Clock()
+ if not self.fondo: self.fondo = self.get_fondo()
+ if not self.imagenes_bicho:
+ self.imagenes_bicho = [pygame.transform.rotate(pygame.image.load(VG.CUCARACHA1), -90),
+ pygame.transform.rotate(pygame.image.load(VG.CUCARACHA2), -90),
+ pygame.transform.rotate(pygame.image.load(VG.CUCARACHA3), -90),
+ pygame.transform.rotate(pygame.image.load(VG.CUCARACHA4), -90)]
+
+ if not self.sonido_bicho: self.sonido_bicho = pygame.mixer.Sound(VG.SONIDOCUCARACHA)
+ if not self.puntero: self.puntero= pygame.sprite.OrderedUpdates()
+ if not self.pan_select: self.pan_select = Puntero(1)
+ if not self.agua_select: self.agua_select = Puntero(2)
+ if not self.interfaz:
+ self.interfaz= Interfaz()
+ self.interfaz.boton_pan.connect(callback=self.get_pan, sonido_select=self.sonido_select)
+ self.interfaz.boton_jarra.connect(callback=self.get_agua, sonido_select=self.sonido_select)
+ self.interfaz.boton_muda.connect(callback=self.selecciona_leccion_muda, sonido_select=self.sonido_select)
+ self.interfaz.boton_reproduccion.connect(callback=self.selecciona_leccion_reproduccion, sonido_select=self.sonido_select)
+ self.interfaz.boton_ciclo.connect(callback=self.selecciona_leccion_ciclo, sonido_select=self.sonido_select)
+ self.interfaz.boton_muerte.connect(callback=self.selecciona_leccion_muerte, sonido_select=self.sonido_select)
+ self.interfaz.boton_plaga.connect(callback=self.selecciona_leccion_plaga, sonido_select=self.sonido_select)
+ self.interfaz.boton_musica.connect(callback=self.set_pause_musica, sonido_select=self.sonido_select)
+ self.interfaz.boton_extras.connect(callback=self.selecciona_leccion_extra, sonido_select=self.sonido_select)
+ self.interfaz.boton_salir.connect(callback=self.selecciona_mensaje_salir, sonido_select=self.sonido_select)
+
+ if not self.lecciones: self.lecciones= pygame.sprite.OrderedUpdates()
+
+ if not self.leccion_muda: self.leccion_muda = self.get_leccion_muda()
+ if not self.leccion_generica: self.leccion_generica = self.get_leccion_generica()
+ if not self.leccion_reproduccion: self.leccion_reproduccion = self.get_leccion_reproduccion()
+ if not self.leccion_ciclo_vital: self.leccion_ciclo_vital = self.get_leccion_cilo_vital()
+ if not self.leccion_muerte: self.leccion_muerte = self.get_leccion_muerte()
+
+ if not self.alimento: self.alimento = pygame.sprite.OrderedUpdates()
+ if not self.mensajes: self.mensajes = pygame.sprite.OrderedUpdates()
+ if not self.mensajes_emergentes: self.mensajes_emergentes = Mensaje(self)
+ if not self.cadaveres: self.cadaveres = pygame.sprite.OrderedUpdates()
+ if not self.ootecas: self.ootecas = pygame.sprite.OrderedUpdates()
+ if not self.unidad_alimento: self.unidad_alimento = Alimento(self.interfaz)
+ if not self.agua: self.agua = pygame.sprite.OrderedUpdates()
+ if not self.unidad_agua: self.unidad_agua = Agua(self.interfaz)
+ if not self.Bichos: self.Bichos = pygame.sprite.OrderedUpdates()
+ if not self.ficha_bicho: self.ficha_bicho = Ficha_Bicho()
+ if not self.ficha: self.ficha = pygame.sprite.OrderedUpdates()
+
+ if not self.dialog_cerrar:
+ a,b,c= JAMG.get_estilo_celeste()
+ self.dialog_cerrar= JAMDialog(mensaje= "¿Deseas Salir del Juego?",
+ funcion_ok= self.selecciona_mensaje_guardar, funcion_cancel= self.deselecciona_leccion)
+ self.dialog_cerrar.set_colors_dialog(base= c, bordes= b)
+ self.dialog_cerrar.set_colors_buttons(colorbas= a, colorbor= b, colorcara= c)
+ if not self.dialog_guardar:
+ a,b,c= JAMG.get_estilo_naranja()
+ self.dialog_guardar= JAMDialog(mensaje= "¿Guardar Antes de Salir?",
+ funcion_ok= self.guardar_juego, funcion_cancel= self.Borrar_salir)
+ self.dialog_guardar.set_colors_dialog(base= c, bordes= b)
+ self.dialog_guardar.set_colors_buttons(colorbas= a, colorbor= b, colorcara= c)
+
+ def lee(self, button= None):
+ if pygame.mixer.music.get_busy():
+ self.set_pause_musica(None)
+ pygame.mixer.quit()
+ textbuffer = ""
+ for elem in self.lecciones.lectura[self.lecciones.indice_pagina_actual]:
+ textbuffer += (" " + elem)
+ self.lecciones.motor_de_voz.lee(textbuffer)
+ pygame.mixer.init()
+ self.set_pause_musica(None)
+
+ def get_agua(self, button= None):
+ # imagen pan para el puntero del mouse al seleccionar alimento
+ imagen= self.puntero.sprites()
+ if imagen:
+ self.puntero.empty()
+ pygame.mouse.set_visible(True)
+ elif not imagen:
+ self.puntero.add(self.agua_select)
+ pygame.mouse.set_visible(False)
+
+ def get_pan(self, button= None):
+ # imagen pan para el puntero del mouse al seleccionar alimento
+ imagen= self.puntero.sprites()
+ if imagen:
+ self.puntero.empty()
+ pygame.mouse.set_visible(True)
+ elif not imagen:
+ self.puntero.add(self.pan_select)
+ pygame.mouse.set_visible(False)
+
+ def get_fondo(self, color=(200,200,200,1), tamanio=VG.RESOLUCION):
+ # devuelve una superficie de color para el fondo de la ventana
+ superficie = pygame.transform.scale(pygame.image.load(VG.FONDO), (VG.RESOLUCION))
+ return superficie
+
+ def handle_event(self):
+ eventos= pygame.event.get(pygame.MOUSEBUTTONDOWN)
+ for event in eventos:
+ posicion= event.pos
+ if self.pan_select in self.puntero.sprites():
+ # si tenemos seleccionado el alimento dejar el pan en el escenario
+ if not self.alimento.sprites():
+ self.unidad_alimento.cantidad = VG.UNIDADALIMENTO
+ self.unidad_alimento.rect.center = posicion
+ self.alimento.add(self.unidad_alimento)
+ self.puntero.empty()
+ pygame.mouse.set_visible(True)
+ self.set_mensaje(texto= "Las Cucarachas detectan con sus antenas, el alimento en el habitat.")
+ elif self.agua_select in self.puntero.sprites():
+ # si tenemos seleccionado el agua, dejar el agua en el escenario
+ if not self.agua.sprites():
+ self.unidad_agua.cantidad = VG.UNIDADAGUA
+ self.unidad_agua.rect.center = posicion
+ self.agua.add(self.unidad_agua)
+ self.puntero.empty()
+ pygame.mouse.set_visible(True)
+ self.set_mensaje(texto= "Las Cucarachas detectan con sus antenas, el agua en el habitat.")
+
+ elif not self.pan_select in self.puntero.sprites() and not self.agua_select in self.puntero.sprites():
+ # si no tenemos seleccionado el alimento, vemos si se ha seleccionado alguna cuca
+ posicion = posicion
+ bicho_select = None
+ for bicho in self.Bichos.sprites():
+ if bicho.rect.collidepoint(posicion):
+ # cuando seleccionamos una cucaracha
+ bicho.play_sonido_bicho()
+ bicho_select = bicho
+ break
+ if bicho_select:
+ self.ficha_bicho.set_bicho(bicho_select)
+ self.ficha = self.ficha_bicho
+ else:
+ self.ficha_bicho.bicho = None
+ self.ficha.clear(self.ventana, self.fondo)
+ self.ficha = pygame.sprite.OrderedUpdates()
+ # republicar evento ?
+
+ for event in pygame.event.get(pygame.KEYDOWN):
+ if event.key == pygame.K_ESCAPE:
+ self.selecciona_mensaje_salir(None)
+
+ def salir(self, button= None):
+ self.deselecciona_leccion(None)
+ self.cucarasims.nivel = "Menu"
+ self.cucarasims.RunMenu()
+
+ def Borrar_salir(self, button= None):
+ # Si no hay datos borra la base
+ self.cucarasims.Archivos_y_Directorios.verifica(base_abrir=self.cucarasims.base_de_datos)
+ self.cucarasims.nivel = "Menu"
+ self.cucarasims.RunMenu()
+
class Agua(pygame.sprite.Sprite):
# Agua en el escenario, recibe interfaz para informar de los cambios segun consumo
- def __init__(self, interfaz):
- pygame.sprite.Sprite.__init__(self)
-
- self.interfaz = interfaz
- self.cantidad = 0
- self.ultima_cantidad = 0
- imagen_original = pygame.transform.scale(pygame.image.load(VG.AGUA), (40,30)).convert_alpha()
-
- self.imagen1 = imagen_original.copy()
- self.imagen2 = pygame.transform.scale(imagen_original.copy(), (30,20)).convert_alpha()
- self.imagen3 = pygame.transform.scale(imagen_original.copy(), (20,10)).convert_alpha()
-
- self.image = self.imagen1
- self.rect = self.image.get_rect()
-
- def update(self):
- parte = VG.UNIDADAGUA/3
- if self.cantidad >= parte * 2:
- if self.image != self.imagen1:
- self.image = self.imagen1
- if self.cantidad >= parte and self.cantidad < parte * 2:
- if self.image != self.imagen2:
- self.image = self.imagen2
- if self.cantidad > 0 and self.cantidad < parte:
- if self.image != self.imagen3:
- self.image = self.imagen3
-
- # informa sobre la cantidad de agua que hay en el escenario
- if self.ultima_cantidad != self.cantidad:
- self.interfaz.set_agua_en_escenario(self.cantidad)
-
- self.ultima_cantidad = self.cantidad
-
+ def __init__(self, interfaz):
+ pygame.sprite.Sprite.__init__(self)
+
+ self.interfaz = interfaz
+ self.cantidad = 0
+ self.ultima_cantidad = 0
+ imagen_original = pygame.transform.scale(pygame.image.load(VG.AGUA), (40,30)).convert_alpha()
+
+ self.imagen1 = imagen_original.copy()
+ self.imagen2 = pygame.transform.scale(imagen_original.copy(), (30,20)).convert_alpha()
+ self.imagen3 = pygame.transform.scale(imagen_original.copy(), (20,10)).convert_alpha()
+
+ self.image = self.imagen1
+ self.rect = self.image.get_rect()
+
+ def update(self):
+ parte = VG.UNIDADAGUA/3
+ if self.cantidad >= parte * 2:
+ if self.image != self.imagen1:
+ self.image = self.imagen1
+ if self.cantidad >= parte and self.cantidad < parte * 2:
+ if self.image != self.imagen2:
+ self.image = self.imagen2
+ if self.cantidad > 0 and self.cantidad < parte:
+ if self.image != self.imagen3:
+ self.image = self.imagen3
+
+ # informa sobre la cantidad de agua que hay en el escenario
+ if self.ultima_cantidad != self.cantidad:
+ self.interfaz.set_agua_en_escenario(self.cantidad)
+
+ self.ultima_cantidad = self.cantidad
+
class Alimento(pygame.sprite.Sprite):
# Alimento en el escenario, recibe interfaz para informar de los cambios segun consumo
- def __init__(self, interfaz):
- pygame.sprite.Sprite.__init__(self)
-
- self.interfaz = interfaz
- self.cantidad = 0
- self.ultima_cantidad = 0
- imagen_original = pygame.transform.scale(pygame.image.load(VG.PAN), (40,30)).convert_alpha()
-
- self.imagen1 = imagen_original.copy()
- self.imagen2 = imagen_original.copy().subsurface(0,0,27,30)
- self.imagen3 = imagen_original.copy().subsurface(0,0,13,30)
-
- self.image = self.imagen1
- self.rect = self.image.get_rect()
-
- def update(self):
- parte = VG.UNIDADALIMENTO/3
- if self.cantidad >= parte*2:
- if self.image != self.imagen1:
- self.image = self.imagen1
- if self.cantidad >= parte and self.cantidad < parte*2:
- if self.image != self.imagen2:
- self.image = self.imagen2
- if self.cantidad > 0 and self.cantidad < parte:
- if self.image != self.imagen3:
- self.image = self.imagen3
-
- # informa sobre la cantidad de alimento que hay en el escenario
- if self.ultima_cantidad != self.cantidad:
- self.interfaz.set_pan_en_escenario(self.cantidad)
-
- self.ultima_cantidad = self.cantidad
-
+ def __init__(self, interfaz):
+ pygame.sprite.Sprite.__init__(self)
+
+ self.interfaz = interfaz
+ self.cantidad = 0
+ self.ultima_cantidad = 0
+ imagen_original = pygame.transform.scale(pygame.image.load(VG.PAN), (40,30)).convert_alpha()
+
+ self.imagen1 = imagen_original.copy()
+ self.imagen2 = imagen_original.copy().subsurface(0,0,27,30)
+ self.imagen3 = imagen_original.copy().subsurface(0,0,13,30)
+
+ self.image = self.imagen1
+ self.rect = self.image.get_rect()
+
+ def update(self):
+ parte = VG.UNIDADALIMENTO/3
+ if self.cantidad >= parte*2:
+ if self.image != self.imagen1:
+ self.image = self.imagen1
+ if self.cantidad >= parte and self.cantidad < parte*2:
+ if self.image != self.imagen2:
+ self.image = self.imagen2
+ if self.cantidad > 0 and self.cantidad < parte:
+ if self.image != self.imagen3:
+ self.image = self.imagen3
+
+ # informa sobre la cantidad de alimento que hay en el escenario
+ if self.ultima_cantidad != self.cantidad:
+ self.interfaz.set_pan_en_escenario(self.cantidad)
+
+ self.ultima_cantidad = self.cantidad
+
class Puntero(pygame.sprite.Sprite):
# El puntero del mouse, pan o agua
- def __init__(self, tipo):
- pygame.sprite.Sprite.__init__(self)
- self.tipo = tipo
- if self.tipo == 1:
- # pan seleccionado
- self.image = pygame.transform.scale(pygame.image.load(VG.PAN), (40,30)).convert_alpha()
- elif self.tipo == 2:
- # agua seleccionada
- self.image = pygame.transform.scale(pygame.image.load(VG.AGUA), (40,30)).convert_alpha()
- self.rect= self.image.get_rect()
-
- def update(self):
- for event in pygame.event.get(pygame.MOUSEMOTION):
- self.rect.center= event.pos
-
+ def __init__(self, tipo):
+ pygame.sprite.Sprite.__init__(self)
+ self.tipo = tipo
+ if self.tipo == 1:
+ # pan seleccionado
+ self.image = pygame.transform.scale(pygame.image.load(VG.PAN), (40,30)).convert_alpha()
+ elif self.tipo == 2:
+ # agua seleccionada
+ self.image = pygame.transform.scale(pygame.image.load(VG.AGUA), (40,30)).convert_alpha()
+ self.rect= self.image.get_rect()
+
+ def update(self):
+ for event in pygame.event.get(pygame.MOUSEMOTION):
+ self.rect.center= event.pos
+
class Secuencia_muda(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.lista_de_imagenes = self.get_imagenes()
- self.velocidad = 0
- self.indice = 0
- self.image = self.lista_de_imagenes[self.indice]
- self.rect = self.image.get_rect()
- self.pasadas = 0
-
- def get_imagenes(self):
- lista = []
- for archivo in os.listdir(VG.MUDAS):
- imagen = pygame.transform.scale(pygame.image.load(VG.MUDAS + archivo), (400,360)).convert_alpha()
- lista.append(imagen)
- return lista
-
- def update(self):
- if self.velocidad == 1:
- # en la xo debe ser 1
- self.pasadas += 1
- self.velocidad = 0
- self.image = self.lista_de_imagenes[self.indice]
- if len(self.lista_de_imagenes)-1 > self.indice:
- self.indice += 1
- else:
- self.indice = 0
- self.velocidad += 1
-
+ def __init__(self):
+ pygame.sprite.Sprite.__init__(self)
+ self.lista_de_imagenes = self.get_imagenes()
+ self.velocidad = 0
+ self.indice = 0
+ self.image = self.lista_de_imagenes[self.indice]
+ self.rect = self.image.get_rect()
+ self.pasadas = 0
+
+ def get_imagenes(self):
+ lista = []
+ for archivo in os.listdir(VG.MUDAS):
+ imagen = pygame.transform.scale(pygame.image.load(VG.MUDAS + archivo), (400,360)).convert_alpha()
+ lista.append(imagen)
+ return lista
+
+ def update(self):
+ if self.velocidad == 1:
+ # en la xo debe ser 1
+ self.pasadas += 1
+ self.velocidad = 0
+ self.image = self.lista_de_imagenes[self.indice]
+ if len(self.lista_de_imagenes)-1 > self.indice:
+ self.indice += 1
+ else:
+ self.indice = 0
+ self.velocidad += 1
+
class Ooteca(pygame.sprite.Sprite):
- def __init__(self, juego, posicion=(0,0)):
- pygame.sprite.Sprite.__init__(self)
-
- self.juego = juego
- self.dias = 0
- self.horas = 0
- huevos = [1, 2, 3]
- random.seed()
- self.huevos = random.choice(huevos)
- self.image = pygame.image.load(VG.OOTECA).convert_alpha()
- self.rect = self.image.get_rect()
- self.rect.centerx, self.rect.centery = posicion
-
- def set_tiempo_de_vida(self):
- self.horas += 1
- if self.horas == 24:
- self.dias += 1
- self.horas = 0
- if self.dias == VG.NACER:
- # nacimiento 30 dias de incubacion
- for huevo in range(self.huevos):
- self.juego.event_nacer()
- self.kill() # la ooteca desaparece
-
+ def __init__(self, juego, posicion=(0,0)):
+ pygame.sprite.Sprite.__init__(self)
+
+ self.juego = juego
+ self.dias = 0
+ self.horas = 0
+ huevos = [1, 2, 3]
+ random.seed()
+ self.huevos = random.choice(huevos)
+ self.image = pygame.image.load(VG.OOTECA).convert_alpha()
+ self.rect = self.image.get_rect()
+ self.rect.centerx, self.rect.centery = posicion
+
+ def set_tiempo_de_vida(self):
+ self.horas += 1
+ if self.horas == 24:
+ self.dias += 1
+ self.horas = 0
+ if self.dias == VG.NACER:
+ # nacimiento 30 dias de incubacion
+ for huevo in range(self.huevos):
+ self.juego.event_nacer()
+ self.kill() # la ooteca desaparece
+
class Cadaver(pygame.sprite.Sprite):
- def __init__(self, juego, posicion=(0,0), dias=0):
- pygame.sprite.Sprite.__init__(self)
-
- self.juego = juego
- self.dias = 0
- self.horas = 0
-
- if dias <= VG.DIASMUDAS[0]:
- escala = (53,63)
- elif dias >= VG.DIASMUDAS[0] and dias < VG.DIASMUDAS[1]:
- escala = VG.ESCALASMUDAS[0]
- elif dias >= VG.DIASMUDAS[1] and dias < VG.DIASMUDAS[2]:
- escala = VG.ESCALASMUDAS[1]
- elif dias >= VG.DIASMUDAS[2] and dias < VG.DIASMUDAS[3]:
- escala = VG.ESCALASMUDAS[2]
- elif dias >= VG.DIASMUDAS[3]:
- escala = VG.ESCALASMUDAS[3]
-
- self.image = pygame.transform.scale(pygame.image.load(VG.CADAVER), escala).convert_alpha()
-
- self.rect = self.image.get_rect()
- self.rect.centerx, self.rect.centery = posicion
-
- def set_tiempo_de_vida(self):
- self.horas += 1
- if self.horas == 24:
- self.dias += 1
- self.horas = 0
- if self.dias == VG.DIASCADAVER:
- self.kill()
-
+ def __init__(self, juego, posicion=(0,0), dias=0):
+ pygame.sprite.Sprite.__init__(self)
+
+ self.juego = juego
+ self.dias = 0
+ self.horas = 0
+
+ if dias <= VG.DIASMUDAS[0]:
+ escala = (53,63)
+ elif dias >= VG.DIASMUDAS[0] and dias < VG.DIASMUDAS[1]:
+ escala = VG.ESCALASMUDAS[0]
+ elif dias >= VG.DIASMUDAS[1] and dias < VG.DIASMUDAS[2]:
+ escala = VG.ESCALASMUDAS[1]
+ elif dias >= VG.DIASMUDAS[2] and dias < VG.DIASMUDAS[3]:
+ escala = VG.ESCALASMUDAS[2]
+ elif dias >= VG.DIASMUDAS[3]:
+ escala = VG.ESCALASMUDAS[3]
+
+ self.image = pygame.transform.scale(pygame.image.load(VG.CADAVER), escala).convert_alpha()
+
+ self.rect = self.image.get_rect()
+ self.rect.centerx, self.rect.centery = posicion
+
+ def set_tiempo_de_vida(self):
+ self.horas += 1
+ if self.horas == 24:
+ self.dias += 1
+ self.horas = 0
+ if self.dias == VG.DIASCADAVER:
+ self.kill()
+
class Mensaje(pygame.sprite.OrderedUpdates):
# mensajes emergentes
- def __init__(self, juego):
- pygame.sprite.OrderedUpdates.__init__(self)
- self.juego = juego
- self.texto = ""
- self.contador = 0
- self.etiqueta= JAMLabel("mensaje")
- self.etiqueta. set_text(tamanio= 40, color= JAMG.get_celeste1())
- self.add(self.etiqueta)
-
- def set_mensaje(self, texto):
- self.texto = texto
- self.etiqueta.set_text(texto= texto)
- self.set_posicion()
-
- def set_posicion(self):
- x = VG.RESOLUCION[0]/2 - self.etiqueta.get_tamanio()[0]/2
- y = VG.RESOLUCION[1] - 40 - self.etiqueta.get_tamanio()[1]
- self.etiqueta.set_posicion((x,y))
-
- def update(self):
- # Aparece y desaparece automáticamente al cabo de cierto tiempo
- if self.juego.mensajes == self:
- self.contador += 1
- if self.contador == 100:
- self.contador = 0
- self.juego.no_mensajes()
- return
-
+ def __init__(self, juego):
+ pygame.sprite.OrderedUpdates.__init__(self)
+ self.juego = juego
+ self.texto = ""
+ self.contador = 0
+ self.etiqueta= JAMLabel("mensaje")
+ self.etiqueta. set_text(tamanio= 40, color= JAMG.get_celeste1())
+ self.add(self.etiqueta)
+
+ def set_mensaje(self, texto):
+ self.texto = texto
+ self.etiqueta.set_text(texto= texto)
+ self.set_posicion()
+
+ def set_posicion(self):
+ x = VG.RESOLUCION[0]/2 - self.etiqueta.get_tamanio()[0]/2
+ y = VG.RESOLUCION[1] - 40 - self.etiqueta.get_tamanio()[1]
+ self.etiqueta.set_posicion((x,y))
+
+ def update(self):
+ # Aparece y desaparece automáticamente al cabo de cierto tiempo
+ if self.juego.mensajes == self:
+ self.contador += 1
+ if self.contador == 100:
+ self.contador = 0
+ self.juego.no_mensajes()
+ return
+ \ No newline at end of file