Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Archivos_y_Directorios.py423
-rw-r--r--Bicho.py659
-rw-r--r--Cria_Bichos_Main.py1997
-rw-r--r--CucaraSims.py365
-rw-r--r--Ficha_Bicho.py6
-rw-r--r--Interfaz.py6
-rw-r--r--Libreta_de_Lectura.py5
-rw-r--r--Main.py1109
-rw-r--r--activity/activity.info7
10 files changed, 2317 insertions, 2261 deletions
diff --git a/.gitignore b/.gitignore
index 81f8dd0..db73526 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
*.pyc
*.pyo
+*.bak
*.??~
diff --git a/Archivos_y_Directorios.py b/Archivos_y_Directorios.py
index 9d8ac02..c5bf213 100644
--- a/Archivos_y_Directorios.py
+++ b/Archivos_y_Directorios.py
@@ -19,215 +19,218 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import os, sqlite3, urllib, string, time
+import os
+import sqlite3
+import urllib
+import string
+import time
class Archivos_y_Directorios():
- def __init__(self, DIRECTORIO_DATOS):
- self.directorio= DIRECTORIO_DATOS
- self.set_directorio()
-
- def set_directorio(self):
- # Crear Directorio para la base de datos
- if not os.path.exists(self.directorio):
- os.mkdir(self.directorio)
-
- def get_juegos(self):
- return (self.directorio, os.listdir(self.directorio))
-
- def CrearBasededatos (self):
- # Crea la base de datos inicial
- numero_de_juegos = time.time()
- nombre = "Cucarasims%s.db" % (numero_de_juegos)
- nombre_de_base = os.path.join(self.directorio, nombre)
- try:
- coneccion = sqlite3.connect(nombre_de_base)
- basededatos = coneccion.cursor()
- basededatos.execute("""create table Cucas (id INTEGER PRIMARY KEY AUTOINCREMENT,
- sexo text, anios text, dias text, horas text, nutricion text, hidratacion text)""")
- coneccion.commit()
- basededatos.execute("""create table Juego (id INTEGER PRIMARY KEY AUTOINCREMENT,
- anios text, dias text, horas text, puntos text)""")
- coneccion.commit()
- basededatos.execute("""create table Ootecas (id INTEGER PRIMARY KEY AUTOINCREMENT,
- dias text, horas text, huevos text)""")
- coneccion.commit()
- basededatos.close()
- coneccion.close()
- os.chmod(os.path.join(self.directorio, nombre), 0666)
- return nombre_de_base
- except Exception, e:
- return False
-
- def RE_CrearBasededatos (self, base):
- # Crea la base de datos inicial
- nombre_de_base = os.path.join(self.directorio, base)
- try:
- coneccion = sqlite3.connect(nombre_de_base)
- basededatos = coneccion.cursor()
- basededatos.execute("""create table Cucas (id INTEGER PRIMARY KEY AUTOINCREMENT,
- sexo text, anios text, dias text, horas text, nutricion text, hidratacion text)""")
- coneccion.commit()
- basededatos.execute("""create table Juego (id INTEGER PRIMARY KEY AUTOINCREMENT,
- anios text, dias text, horas text, puntos text)""")
- coneccion.commit()
- basededatos.execute("""create table Ootecas (id INTEGER PRIMARY KEY AUTOINCREMENT,
- dias text, horas text, huevos text)""")
- coneccion.commit()
- basededatos.close()
- coneccion.close()
- os.chmod(os.path.join(self.directorio, nombre), 0666)
- return nombre_de_base
- except Exception, e:
- return False
-
- def guardar(self, base=None, datos=None):
- #print "GUARDANDO DATOS"
- datos_de_juego = datos[0] # [anios, dias, horas, puntos]
- datos_de_cucas = datos[1] # [sexo, anios, dias, horas, hambre, sed]
- datos_de_ootecas = datos[2] # [dias, horas, huevos]
- self.borrar_tabla(base)
- self.RE_CrearBasededatos(base)
- # Guardando Datos de tiempo de juego en general
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- try:
- coneccion.text_factory = str #(no funciona en sugar de uruguay)
- except:
- pass
- anios, dias, horas, puntos = datos_de_juego
- item = [0, anios, dias, horas, puntos]
- basededatos.execute ("insert into %s values (?,?,?,?,?)" % ("Juego"), item)
- coneccion.commit()
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Llenar la Tabla Juego"
-
- # Guardando Datos de Cucas
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- try:
- coneccion.text_factory = str #(no funciona en sugar de uruguay)
- except:
- pass
- contador = 0
- for x in range(0, len(datos_de_cucas)):
- datos_bicho = datos_de_cucas[x] # [sexo, anios, dias, horas, hambre, sed]
- sexo = datos_bicho[0]
- anios = datos_bicho[1]
- dias = datos_bicho[2]
- horas = datos_bicho[3]
- hambre = datos_bicho[4]
- sed = datos_bicho[5]
- item = [contador, sexo, anios, dias, horas, hambre, sed]
- basededatos.execute ("insert into %s values (?,?,?,?,?,?,?)" % ("Cucas"), item)
- coneccion.commit()
- contador += 1
- #print "Datos Guardados en Cucas:", item
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Llenar la Tabla Cucas"
-
- # Guardando Datos de Ootecas
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- try:
- coneccion.text_factory = str #(no funciona en sugar de uruguay)
- except:
- pass
- contador = 0
- for x in range(0, len(datos_de_ootecas)):
- datos_ootecas = datos_de_ootecas[x] # [dias, horas, huevos]
- dias = datos_ootecas[0]
- horas = datos_ootecas[1]
- huevos = datos_ootecas[2]
- item = [contador, dias, horas, huevos]
- basededatos.execute ("insert into %s values (?,?,?,?)" % ("Ootecas"), item)
- coneccion.commit()
- contador += 1
- #print "Datos Guardados en Ootecas:", item
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Llenar la Tabla Ootecas"
-
- #print "DATOS GUARDADOS"
-
-
- def Leer_Base_de_Datos(self, nombre):
- base = os.path.join(self.directorio, nombre)
- datos_juego = None
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- basededatos.execute("select * from %s" % ("Juego"))
- for dato in basededatos:
- datos_juego = dato
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Carga Tabla Juego"
- #print "Leyendo Base", datos_juego
-
- cucas = []
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- basededatos.execute("select * from %s" % ("Cucas"))
- for item in basededatos:
- cucas.append(item)
- #print item
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Carga Tabla Cucas"
-
- Ootecas = []
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- basededatos.execute("select * from %s" % ("Ootecas"))
- for item in basededatos:
- Ootecas.append(item)
- #print item
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Carga Tabla Ootecas"
-
- #print "DATOS:\n", (base, datos_juego, cucas, Ootecas), "\nFIN DATOS:"
- return (base, datos_juego, cucas, Ootecas)
-
- #print "Base Leida"
-
- def borrar_tabla(self, nombre):
- #print "\n\n BORRRAR:", nombre
- try:
- nombre_de_base= os.path.join(self.directorio, nombre)
- os.remove(nombre_de_base)
- #print "Borrar: ", nombre_de_base
- except Exception, e:
- print "Ha Ocurrido un Error al Intentar Borarr un Juego"
-
- def verifica(self, base_abrir=None):
- base = os.path.join(self.directorio, base_abrir)
- datos_juego = None
- try:
- coneccion = sqlite3.connect(base)
- basededatos = coneccion.cursor()
- basededatos.execute("select * from %s" % ("Juego"))
- for dato in basededatos:
- datos_juego = dato
- basededatos.close()
- coneccion.close()
- except Exception, e:
- print "Ha Ocurrido un Error al verifica Tabla Juego"
-
- if not datos_juego:
- os.remove(base)
- #print "base eliminada"
-
+ def __init__(self, DIRECTORIO_DATOS):
+ self.directorio= DIRECTORIO_DATOS
+ self.set_directorio()
+
+ def set_directorio(self):
+ # Crear Directorio para la base de datos
+ if not os.path.exists(self.directorio):
+ os.mkdir(self.directorio)
+
+ def get_juegos(self):
+ return (self.directorio, os.listdir(self.directorio))
+
+ def CrearBasededatos (self):
+ # Crea la base de datos inicial
+ numero_de_juegos = time.time()
+ nombre = "Cucarasims%s.db" % (numero_de_juegos)
+ nombre_de_base = os.path.join(self.directorio, nombre)
+ try:
+ coneccion = sqlite3.connect(nombre_de_base)
+ basededatos = coneccion.cursor()
+ basededatos.execute("""create table Cucas (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ sexo text, anios text, dias text, horas text, nutricion text, hidratacion text)""")
+ coneccion.commit()
+ basededatos.execute("""create table Juego (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ anios text, dias text, horas text, puntos text)""")
+ coneccion.commit()
+ basededatos.execute("""create table Ootecas (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ dias text, horas text, huevos text)""")
+ coneccion.commit()
+ basededatos.close()
+ coneccion.close()
+ os.chmod(os.path.join(self.directorio, nombre), 0666)
+ return nombre_de_base
+ except Exception, e:
+ return False
+
+ def RE_CrearBasededatos (self, base):
+ # Crea la base de datos inicial
+ nombre_de_base = os.path.join(self.directorio, base)
+ try:
+ coneccion = sqlite3.connect(nombre_de_base)
+ basededatos = coneccion.cursor()
+ basededatos.execute("""create table Cucas (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ sexo text, anios text, dias text, horas text, nutricion text, hidratacion text)""")
+ coneccion.commit()
+ basededatos.execute("""create table Juego (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ anios text, dias text, horas text, puntos text)""")
+ coneccion.commit()
+ basededatos.execute("""create table Ootecas (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ dias text, horas text, huevos text)""")
+ coneccion.commit()
+ basededatos.close()
+ coneccion.close()
+ os.chmod(os.path.join(self.directorio, nombre), 0666)
+ return nombre_de_base
+ except Exception, e:
+ return False
+
+ def guardar(self, base=None, datos=None):
+ #print "GUARDANDO DATOS"
+ datos_de_juego = datos[0] # [anios, dias, horas, puntos]
+ datos_de_cucas = datos[1] # [sexo, anios, dias, horas, hambre, sed]
+ datos_de_ootecas = datos[2] # [dias, horas, huevos]
+ self.borrar_tabla(base)
+ self.RE_CrearBasededatos(base)
+ # Guardando Datos de tiempo de juego en general
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ try:
+ coneccion.text_factory = str #(no funciona en sugar de uruguay)
+ except:
+ pass
+ anios, dias, horas, puntos = datos_de_juego
+ item = [0, anios, dias, horas, puntos]
+ basededatos.execute ("insert into %s values (?,?,?,?,?)" % ("Juego"), item)
+ coneccion.commit()
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Llenar la Tabla Juego"
+
+ # Guardando Datos de Cucas
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ try:
+ coneccion.text_factory = str #(no funciona en sugar de uruguay)
+ except:
+ pass
+ contador = 0
+ for x in range(0, len(datos_de_cucas)):
+ datos_bicho = datos_de_cucas[x] # [sexo, anios, dias, horas, hambre, sed]
+ sexo = datos_bicho[0]
+ anios = datos_bicho[1]
+ dias = datos_bicho[2]
+ horas = datos_bicho[3]
+ hambre = datos_bicho[4]
+ sed = datos_bicho[5]
+ item = [contador, sexo, anios, dias, horas, hambre, sed]
+ basededatos.execute ("insert into %s values (?,?,?,?,?,?,?)" % ("Cucas"), item)
+ coneccion.commit()
+ contador += 1
+ #print "Datos Guardados en Cucas:", item
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Llenar la Tabla Cucas"
+
+ # Guardando Datos de Ootecas
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ try:
+ coneccion.text_factory = str #(no funciona en sugar de uruguay)
+ except:
+ pass
+ contador = 0
+ for x in range(0, len(datos_de_ootecas)):
+ datos_ootecas = datos_de_ootecas[x] # [dias, horas, huevos]
+ dias = datos_ootecas[0]
+ horas = datos_ootecas[1]
+ huevos = datos_ootecas[2]
+ item = [contador, dias, horas, huevos]
+ basededatos.execute ("insert into %s values (?,?,?,?)" % ("Ootecas"), item)
+ coneccion.commit()
+ contador += 1
+ #print "Datos Guardados en Ootecas:", item
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Llenar la Tabla Ootecas"
+
+ #print "DATOS GUARDADOS"
+
+ def Leer_Base_de_Datos(self, nombre):
+ base = os.path.join(self.directorio, nombre)
+ datos_juego = None
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ basededatos.execute("select * from %s" % ("Juego"))
+ for dato in basededatos:
+ datos_juego = dato
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Carga Tabla Juego"
+ #print "Leyendo Base", datos_juego
+
+ cucas = []
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ basededatos.execute("select * from %s" % ("Cucas"))
+ for item in basededatos:
+ cucas.append(item)
+ #print item
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Carga Tabla Cucas"
+
+ Ootecas = []
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ basededatos.execute("select * from %s" % ("Ootecas"))
+ for item in basededatos:
+ Ootecas.append(item)
+ #print item
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Carga Tabla Ootecas"
+
+ #print "DATOS:\n", (base, datos_juego, cucas, Ootecas), "\nFIN DATOS:"
+ return (base, datos_juego, cucas, Ootecas)
+
+ #print "Base Leida"
+
+ def borrar_tabla(self, nombre):
+ #print "\n\n BORRRAR:", nombre
+ try:
+ nombre_de_base= os.path.join(self.directorio, nombre)
+ os.remove(nombre_de_base)
+ #print "Borrar: ", nombre_de_base
+ except Exception, e:
+ print "Ha Ocurrido un Error al Intentar Borarr un Juego"
+
+ def verifica(self, base_abrir=None):
+ base = os.path.join(self.directorio, base_abrir)
+ datos_juego = None
+ try:
+ coneccion = sqlite3.connect(base)
+ basededatos = coneccion.cursor()
+ basededatos.execute("select * from %s" % ("Juego"))
+ for dato in basededatos:
+ datos_juego = dato
+ basededatos.close()
+ coneccion.close()
+ except Exception, e:
+ print "Ha Ocurrido un Error al verifica Tabla Juego"
+
+ if not datos_juego:
+ os.remove(base)
+ #print "base eliminada"
+ \ No newline at end of file
diff --git a/Bicho.py b/Bicho.py
index ffd7f08..321285b 100644
--- a/Bicho.py
+++ b/Bicho.py
@@ -19,7 +19,10 @@
# 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, random
+import pygame
+import gc
+import random
+
from pygame.locals import *
gc.enable()
@@ -30,330 +33,330 @@ import Globals as VG
INDICE_ROTACION = 25
class Bicho(pygame.sprite.Sprite):
- def __init__(self, juego_main):
- pygame.sprite.Sprite.__init__(self)
- self.juego= juego_main
- self.alimento_en_escenario= self.juego.alimento
- self.agua_en_escenario= self.juego.agua
-
- self.velocidad = 8
-
- self.anios = 0
- self.dias = 0
- self.horas = 0
-
- self.hambre = 0
- self.sed = 0
-
- self.sonido_bicho = self.juego.sonido_bicho
- self.area_visible = self.juego.area_visible
-
- random.seed()
- self.tipo = random.choice(self.juego.imagenes_bicho)
- self.imagen_original = self.get_imagen_original()
- if self.juego.imagenes_bicho.index(self.tipo) == 2 or self.juego.imagenes_bicho.index(self.tipo) == 3:
- self.sexo = "F"
- else:
- self.sexo = "M"
-
- self.image = self.imagen_original.copy()
- self.rect = self.image.get_rect()
-
- acciones = ["camina", "gira", "quieto"]
- self.accion = random.choice(acciones)
-
- self.sent = 0
- self.angulo = 0
-
- self.contador = 0
-
- self.escalas_mudas = VG.ESCALASMUDAS
- self.dias_mudas = VG.DIASMUDAS
- self.control_mudas = self.dias_mudas[0]
-
- self.x, self.y = (0,0)
- self.dx = 0
- self.dy = 0
- self.posicionar_al_azar()
-
- self.dias_repro = VG.DIASREPRO
- self.control_repro = self.dias_repro[0]
-
- # Tamaños
- def get_imagen_original(self):
- return pygame.transform.scale(self.tipo, (60,50))
-
- def set_muda(self, escala=(63,50)):
- # cuando crece, muda el exoesqueleto
- self.imagen_original = pygame.transform.scale(self.tipo, escala)
- self.image = pygame.transform.rotate(self.imagen_original, -self.angulo)
- x,y = self.rect.x, self.rect.y
- self.rect = self.image.get_rect()
- self.rect.x, self.rect.y = x, y
- self.juego.event_muda(posicion=(self.rect.x, self.rect.y), tamanio=escala)
-
- def posicionar_al_azar(self):
- # elige una posicion inicial al azar para el bicho
- lista_de_rectangulos = []
- for bicho in self.juego.Bichos.sprites():
- # los rectangulos de los otros bichos
- rectangulo = (bicho.rect.x, bicho.rect.y, bicho.rect.w, bicho.rect.h)
- lista_de_rectangulos.append(rectangulo)
-
- random.seed()
- x = random.randrange(self.area_visible[0]+10, self.area_visible[0]+self.area_visible[2]-10, 1)
- y = random.randrange(self.area_visible[1]+10, self.area_visible[1]+self.area_visible[3]-10, 1)
- self.x, self.y = (x,y)
- self.dx = 0
- self.dy = 0
- self.actualizar_posicion()
-
- while self.rect.collidelist(lista_de_rectangulos) != -1:
- x = random.randrange(self.area_visible[0]+10, self.area_visible[0]+self.area_visible[2]-10, 1)
- y = random.randrange(self.area_visible[1]+10, self.area_visible[1]+self.area_visible[3]-10, 1)
- self.x, self.y = (x,y)
- self.dx = 0
- self.dy = 0
- self.actualizar_posicion()
-
- def play_sonido_bicho(self):
- self.sonido_bicho.play()
-
- def set_tiempo_de_vida(self):
- self.horas += 1
- if self.horas == 24:
- self.dias += 1
- self.horas = 0
-
- if self.dias == 365:
- self.anios += 1
- self.dias = 0
-
- def update(self):
- # Actualiza el sprite
- # determinar condiciones de vida
- if self.hambre <= VG.LIMITEHAMBRE or self.sed <= VG.LIMITESED or self.dias >= VG.LIMITEVIDA:
- comportamiento = "muere"
- else:
- comportamiento = "vive"
-
- # Si está viva
- if comportamiento == "vive":
- # Mudas de exoesqueleto
- if self.dias == self.control_mudas and self.horas == 0:
-
- indice = self.dias_mudas.index(self.dias)
- self.set_muda(escala=self.escalas_mudas[indice])
- self.velocidad += int(self.velocidad/3)
-
- if indice+1 < len(self.dias_mudas):
- self.control_mudas = self.dias_mudas[indice+1]
- else:
- self.control_mudas = self.dias_mudas[0]
-
- # Reproducción
- if self.dias == self.control_repro and self.horas == 0 and self.sexo == "F":
- indice = self.dias_repro.index(self.dias)
-
- if indice+1 < len(self.dias_repro):
- self.control_repro = self.dias_repro[indice+1]
- else:
- self.control_repro = self.dias_repro[0]
-
- if self.juego.machos:
- self.juego.event_reproduccion(posicion=(self.rect.centerx, self.rect.centery))
-
- comportamiento = "normal"
-
- elif comportamiento == "muere":
- # se muere
- self.juego.event_morir(posicion=(self.rect.centerx, self.rect.centery), dias=self.dias)
- self.kill()
- return
-
- if not self.agua_en_escenario.sprites() or self.sed >= 100:
- # Si no hay alimento en el escenario o el bicho no tiene sed
- comportamiento = "normal"
- elif self.agua_en_escenario.sprites() and self.sed < 100:
- # si hay alimento y tiene hambre
- comportamiento = "buscar agua"
-
- if comportamiento == "normal":
- if not self.alimento_en_escenario.sprites() or self.hambre >= 100:
- # Si no hay alimento en el escenario o el bicho no tiene hambre
- comportamiento = "normal"
- elif self.alimento_en_escenario.sprites() and self.hambre < 100:
- # si hay alimento y tiene hambre
- comportamiento = "buscar comida"
-
- self.comportamiento(comportamiento)
-
- def comportamiento(self, comportamiento):
- # decide el tipo de comportamiento según necesidades
- if comportamiento == "normal":
- if self.contador == 30:
- # cada 30 pasadas, cambia acción
- acciones = ["camina", "gira", "quieto"]
- random.seed()
- self.accion = random.choice(acciones)
- self.contador = 0
- self.contador += 1
- self.decide()
- elif comportamiento == "buscar comida":
- self.alimentarse()
- elif comportamiento == "buscar agua":
- self.beber()
- else:
- print "comportamiento sin tratar: ", comportamiento
-
- def beber(self):
- # Busca el alimento, cuando lo encuentra se alimenta
- agua = self.agua_en_escenario.sprites()[0]
-
- if self.rect.colliderect(agua.rect):
- # si ya llegamos al agua no nos movemos
- self.accion = "quieto"
-
- if self.contador >= 30:
- # cada treinta pasadas bebe
- self.sed += VG.RINDEAGUA
- agua.cantidad -= VG.CONSUMOAGUA
- self.contador = 0
- if self.sed >= 100: self.sed = 150
- if agua.cantidad <= 0:
- agua.kill()
- self.agua_en_escenario.empty()
- self.contador += 1
- return
-
- else:
- # Si no hemos llegado al agua
- posicion_agua = agua.rect.center
-
- # calcular la distancia al alimento
- distancia_x = posicion_agua[0] - self.rect.x
- distancia_y = posicion_agua[1] - self.rect.y
-
- self.dx, self.dy = self.get_vector(self.angulo)
-
- # calcular distancia si me muevo en el sentido actual
- futura_posicion_x = self.rect.x + self.dx
- futura_posicion_y = self.rect.y + self.dy
-
- # Verificar si al moverme me acerco o me alejo del alimento
- if ((futura_posicion_x - self.rect.x) <= distancia_x and (futura_posicion_y - self.rect.y) <= distancia_y):
- # Si me acerco, camino
- self.accion = "camina"
- self.decide()
- else:
- # si no me acerco, giro
- self.accion = "gira"
- self.decide()
-
- def alimentarse(self):
- # Busca el alimento, cuando lo encuentra se alimenta
- alimento = self.alimento_en_escenario.sprites()[0]
-
- if self.rect.colliderect(alimento.rect):
- # si ya llegamos al alimento no nos movemos
- self.accion = "quieto"
-
- if self.contador >= 30:
- # cada treinta pasadas come
- self.hambre += VG.RINDEALIMENTO
- alimento.cantidad -= VG.CONSUMOALIMENTO
- self.contador = 0
- if self.hambre >= 100: self.hambre = 150
- if alimento.cantidad <= 0:
- # el que come de último limpia :P
- alimento.kill()
- self.alimento_en_escenario.empty()
- self.contador += 1
- return
-
- else:
- # Si no hemos llegado al alimento
- posicion_alimento = alimento.rect.center
-
- # calcular la distancia al alimento
- distancia_x = posicion_alimento[0] - self.rect.x
- distancia_y = posicion_alimento[1] - self.rect.y
-
- self.dx, self.dy = self.get_vector(self.angulo)
-
- # calcular distancia si me muevo en el sentido actual
- futura_posicion_x = self.rect.x + self.dx
- futura_posicion_y = self.rect.y + self.dy
-
- # Verificar si al moverme me acerco o me alejo del alimento
- if ((futura_posicion_x - self.rect.x) <= distancia_x and (futura_posicion_y - self.rect.y) <= distancia_y):
- # Si me acerco, camino
- self.accion = "camina"
- self.decide()
- else:
- # si no me acerco, giro
- self.accion = "gira"
- self.decide()
-
- def decide(self):
- # gira, camina o se queda quieto
- if self.accion == "gira":
- self.gira()
- self.accion = "camina"
-
- if self.accion == "camina":
- self.dx, self.dy = self.get_vector(self.angulo)
- self.actualizar_posicion()
-
- if self.accion == "quieto":
- pass
-
- def gira(self, sent=0):
- # la cuca gira
- random.seed()
- if sent == 0: self.sent = random.randrange(1, 3, 1)
-
- if self.sent == 1:
- # hacia la izquierda
- self.angulo -= int(0.7 * INDICE_ROTACION)
- elif self.sent == 2:
- # hacia la derecha
- self.angulo += int(0.7 * INDICE_ROTACION)
-
- self.image = pygame.transform.rotate(self.imagen_original, -self.angulo)
-
- def actualizar_posicion(self):
- # La cuca se mueve
- x = self.x + self.dx
- y = self.y + self.dy
- posicion = (x,y)
- if self.area_visible.collidepoint(posicion):
- # Si no me salgo del area permitida
- if not self.verificar_colision_en_grupo(posicion):
- # Si no caminaré sobre otra cucaracha
- self.x += self.dx
- self.y += self.dy
- self.rect.centerx = int(self.x)
- self.rect.centery = int(self.y)
- else:
- self.gira(sent=self.sent)
- self.accion = "quieto"
- else:
- self.gira(sent=self.sent)
-
- def verificar_colision_en_grupo(self, posicion):
- # evita que caminen unas sobre otras
- grupo = self.groups()
- for group in grupo:
- for cuca in group.sprites():
- if cuca != self:
- if cuca.rect.collidepoint(posicion):
- return True
- return False
-
- def get_vector(self, angulo):
- # Recibe un ángulo que da orientación. Devuelve el incremento de puntos x,y
- x = int(cos(radians(angulo)) * self.velocidad)
- y = int(sin(radians(angulo)) * self.velocidad)
- return x,y
-
+ def __init__(self, juego_main):
+ pygame.sprite.Sprite.__init__(self)
+ self.juego= juego_main
+ self.alimento_en_escenario= self.juego.alimento
+ self.agua_en_escenario= self.juego.agua
+
+ self.velocidad = 8
+
+ self.anios = 0
+ self.dias = 0
+ self.horas = 0
+
+ self.hambre = 0
+ self.sed = 0
+
+ self.sonido_bicho = self.juego.sonido_bicho
+ self.area_visible = self.juego.area_visible
+
+ random.seed()
+ self.tipo = random.choice(self.juego.imagenes_bicho)
+ self.imagen_original = self.get_imagen_original()
+ if self.juego.imagenes_bicho.index(self.tipo) == 2 or self.juego.imagenes_bicho.index(self.tipo) == 3:
+ self.sexo = "F"
+ else:
+ self.sexo = "M"
+
+ self.image = self.imagen_original.copy()
+ self.rect = self.image.get_rect()
+
+ acciones = ["camina", "gira", "quieto"]
+ self.accion = random.choice(acciones)
+
+ self.sent = 0
+ self.angulo = 0
+
+ self.contador = 0
+
+ self.escalas_mudas = VG.ESCALASMUDAS
+ self.dias_mudas = VG.DIASMUDAS
+ self.control_mudas = self.dias_mudas[0]
+
+ self.x, self.y = (0,0)
+ self.dx = 0
+ self.dy = 0
+ self.posicionar_al_azar()
+
+ self.dias_repro = VG.DIASREPRO
+ self.control_repro = self.dias_repro[0]
+
+ # Tamaños
+ def get_imagen_original(self):
+ return pygame.transform.scale(self.tipo, (60,50))
+
+ def set_muda(self, escala=(63,50)):
+ # cuando crece, muda el exoesqueleto
+ self.imagen_original = pygame.transform.scale(self.tipo, escala)
+ self.image = pygame.transform.rotate(self.imagen_original, -self.angulo)
+ x,y = self.rect.x, self.rect.y
+ self.rect = self.image.get_rect()
+ self.rect.x, self.rect.y = x, y
+ self.juego.event_muda(posicion=(self.rect.x, self.rect.y), tamanio=escala)
+
+ def posicionar_al_azar(self):
+ # elige una posicion inicial al azar para el bicho
+ lista_de_rectangulos = []
+ for bicho in self.juego.Bichos.sprites():
+ # los rectangulos de los otros bichos
+ rectangulo = (bicho.rect.x, bicho.rect.y, bicho.rect.w, bicho.rect.h)
+ lista_de_rectangulos.append(rectangulo)
+
+ random.seed()
+ x = random.randrange(self.area_visible[0]+10, self.area_visible[0]+self.area_visible[2]-10, 1)
+ y = random.randrange(self.area_visible[1]+10, self.area_visible[1]+self.area_visible[3]-10, 1)
+ self.x, self.y = (x,y)
+ self.dx = 0
+ self.dy = 0
+ self.actualizar_posicion()
+
+ while self.rect.collidelist(lista_de_rectangulos) != -1:
+ x = random.randrange(self.area_visible[0]+10, self.area_visible[0]+self.area_visible[2]-10, 1)
+ y = random.randrange(self.area_visible[1]+10, self.area_visible[1]+self.area_visible[3]-10, 1)
+ self.x, self.y = (x,y)
+ self.dx = 0
+ self.dy = 0
+ self.actualizar_posicion()
+
+ def play_sonido_bicho(self):
+ self.sonido_bicho.play()
+
+ def set_tiempo_de_vida(self):
+ self.horas += 1
+ if self.horas == 24:
+ self.dias += 1
+ self.horas = 0
+
+ if self.dias == 365:
+ self.anios += 1
+ self.dias = 0
+
+ def update(self):
+ # Actualiza el sprite
+ # determinar condiciones de vida
+ if self.hambre <= VG.LIMITEHAMBRE or self.sed <= VG.LIMITESED or self.dias >= VG.LIMITEVIDA:
+ comportamiento = "muere"
+ else:
+ comportamiento = "vive"
+
+ # Si está viva
+ if comportamiento == "vive":
+ # Mudas de exoesqueleto
+ if self.dias == self.control_mudas and self.horas == 0:
+
+ indice = self.dias_mudas.index(self.dias)
+ self.set_muda(escala=self.escalas_mudas[indice])
+ self.velocidad += int(self.velocidad/3)
+
+ if indice+1 < len(self.dias_mudas):
+ self.control_mudas = self.dias_mudas[indice+1]
+ else:
+ self.control_mudas = self.dias_mudas[0]
+
+ # Reproducción
+ if self.dias == self.control_repro and self.horas == 0 and self.sexo == "F":
+ indice = self.dias_repro.index(self.dias)
+
+ if indice+1 < len(self.dias_repro):
+ self.control_repro = self.dias_repro[indice+1]
+ else:
+ self.control_repro = self.dias_repro[0]
+
+ if self.juego.machos:
+ self.juego.event_reproduccion(posicion=(self.rect.centerx, self.rect.centery))
+
+ comportamiento = "normal"
+
+ elif comportamiento == "muere":
+ # se muere
+ self.juego.event_morir(posicion=(self.rect.centerx, self.rect.centery), dias=self.dias)
+ self.kill()
+ return
+
+ if not self.agua_en_escenario.sprites() or self.sed >= 100:
+ # Si no hay alimento en el escenario o el bicho no tiene sed
+ comportamiento = "normal"
+ elif self.agua_en_escenario.sprites() and self.sed < 100:
+ # si hay alimento y tiene hambre
+ comportamiento = "buscar agua"
+
+ if comportamiento == "normal":
+ if not self.alimento_en_escenario.sprites() or self.hambre >= 100:
+ # Si no hay alimento en el escenario o el bicho no tiene hambre
+ comportamiento = "normal"
+ elif self.alimento_en_escenario.sprites() and self.hambre < 100:
+ # si hay alimento y tiene hambre
+ comportamiento = "buscar comida"
+
+ self.comportamiento(comportamiento)
+
+ def comportamiento(self, comportamiento):
+ # decide el tipo de comportamiento según necesidades
+ if comportamiento == "normal":
+ if self.contador == 30:
+ # cada 30 pasadas, cambia acción
+ acciones = ["camina", "gira", "quieto"]
+ random.seed()
+ self.accion = random.choice(acciones)
+ self.contador = 0
+ self.contador += 1
+ self.decide()
+ elif comportamiento == "buscar comida":
+ self.alimentarse()
+ elif comportamiento == "buscar agua":
+ self.beber()
+ else:
+ print "comportamiento sin tratar: ", comportamiento
+
+ def beber(self):
+ # Busca el alimento, cuando lo encuentra se alimenta
+ agua = self.agua_en_escenario.sprites()[0]
+
+ if self.rect.colliderect(agua.rect):
+ # si ya llegamos al agua no nos movemos
+ self.accion = "quieto"
+
+ if self.contador >= 30:
+ # cada treinta pasadas bebe
+ self.sed += VG.RINDEAGUA
+ agua.cantidad -= VG.CONSUMOAGUA
+ self.contador = 0
+ if self.sed >= 100: self.sed = 150
+ if agua.cantidad <= 0:
+ agua.kill()
+ self.agua_en_escenario.empty()
+ self.contador += 1
+ return
+
+ else:
+ # Si no hemos llegado al agua
+ posicion_agua = agua.rect.center
+
+ # calcular la distancia al alimento
+ distancia_x = posicion_agua[0] - self.rect.x
+ distancia_y = posicion_agua[1] - self.rect.y
+
+ self.dx, self.dy = self.get_vector(self.angulo)
+
+ # calcular distancia si me muevo en el sentido actual
+ futura_posicion_x = self.rect.x + self.dx
+ futura_posicion_y = self.rect.y + self.dy
+
+ # Verificar si al moverme me acerco o me alejo del alimento
+ if ((futura_posicion_x - self.rect.x) <= distancia_x and (futura_posicion_y - self.rect.y) <= distancia_y):
+ # Si me acerco, camino
+ self.accion = "camina"
+ self.decide()
+ else:
+ # si no me acerco, giro
+ self.accion = "gira"
+ self.decide()
+
+ def alimentarse(self):
+ # Busca el alimento, cuando lo encuentra se alimenta
+ alimento = self.alimento_en_escenario.sprites()[0]
+
+ if self.rect.colliderect(alimento.rect):
+ # si ya llegamos al alimento no nos movemos
+ self.accion = "quieto"
+
+ if self.contador >= 30:
+ # cada treinta pasadas come
+ self.hambre += VG.RINDEALIMENTO
+ alimento.cantidad -= VG.CONSUMOALIMENTO
+ self.contador = 0
+ if self.hambre >= 100: self.hambre = 150
+ if alimento.cantidad <= 0:
+ # el que come de último limpia :P
+ alimento.kill()
+ self.alimento_en_escenario.empty()
+ self.contador += 1
+ return
+
+ else:
+ # Si no hemos llegado al alimento
+ posicion_alimento = alimento.rect.center
+
+ # calcular la distancia al alimento
+ distancia_x = posicion_alimento[0] - self.rect.x
+ distancia_y = posicion_alimento[1] - self.rect.y
+
+ self.dx, self.dy = self.get_vector(self.angulo)
+
+ # calcular distancia si me muevo en el sentido actual
+ futura_posicion_x = self.rect.x + self.dx
+ futura_posicion_y = self.rect.y + self.dy
+
+ # Verificar si al moverme me acerco o me alejo del alimento
+ if ((futura_posicion_x - self.rect.x) <= distancia_x and (futura_posicion_y - self.rect.y) <= distancia_y):
+ # Si me acerco, camino
+ self.accion = "camina"
+ self.decide()
+ else:
+ # si no me acerco, giro
+ self.accion = "gira"
+ self.decide()
+
+ def decide(self):
+ # gira, camina o se queda quieto
+ if self.accion == "gira":
+ self.gira()
+ self.accion = "camina"
+
+ if self.accion == "camina":
+ self.dx, self.dy = self.get_vector(self.angulo)
+ self.actualizar_posicion()
+
+ if self.accion == "quieto":
+ pass
+
+ def gira(self, sent=0):
+ # la cuca gira
+ random.seed()
+ if sent == 0: self.sent = random.randrange(1, 3, 1)
+
+ if self.sent == 1:
+ # hacia la izquierda
+ self.angulo -= int(0.7 * INDICE_ROTACION)
+ elif self.sent == 2:
+ # hacia la derecha
+ self.angulo += int(0.7 * INDICE_ROTACION)
+
+ self.image = pygame.transform.rotate(self.imagen_original, -self.angulo)
+
+ def actualizar_posicion(self):
+ # La cuca se mueve
+ x = self.x + self.dx
+ y = self.y + self.dy
+ posicion = (x,y)
+ if self.area_visible.collidepoint(posicion):
+ # Si no me salgo del area permitida
+ if not self.verificar_colision_en_grupo(posicion):
+ # Si no caminaré sobre otra cucaracha
+ self.x += self.dx
+ self.y += self.dy
+ self.rect.centerx = int(self.x)
+ self.rect.centery = int(self.y)
+ else:
+ self.gira(sent=self.sent)
+ self.accion = "quieto"
+ else:
+ self.gira(sent=self.sent)
+
+ def verificar_colision_en_grupo(self, posicion):
+ # evita que caminen unas sobre otras
+ grupo = self.groups()
+ for group in grupo:
+ for cuca in group.sprites():
+ if cuca != self:
+ if cuca.rect.collidepoint(posicion):
+ return True
+ return False
+
+ def get_vector(self, angulo):
+ # Recibe un ángulo que da orientación. Devuelve el incremento de puntos x,y
+ x = int(cos(radians(angulo)) * self.velocidad)
+ y = int(sin(radians(angulo)) * self.velocidad)
+ return x,y
+ \ No newline at end of file
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
diff --git a/CucaraSims.py b/CucaraSims.py
index 603ee74..19c9d52 100644
--- a/CucaraSims.py
+++ b/CucaraSims.py
@@ -1,187 +1,214 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-import pygame, gtk, pygtk, os, gtk, pygtk, gobject, sys, socket
+# CucaraSims.py por:
+# Flavio Danesse <fdanesse@gmail.com>
+# CeibalJAM! - Uruguay
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# 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
+import gtk
+import os
+import gtk
+import gobject
+import sys
+import socket
+
from pygame.locals import *
+
from sugar.activity import activity
from Main import Main
class CucaraSims(activity.Activity):
- def __init__(self, handle):
- activity.Activity.__init__(self, handle, False)
- self.set_title('CucaraSims')
- #self.set_toolbox(activity.ActivityToolbox(self))
- self.eventbox= PygameCanvas()
- self.set_canvas(self.eventbox)
-
- self.add_events(gtk.gdk.ALL_EVENTS_MASK)
- self.connect("destroy", self.salir)
-
- self.show_all()
- self.realize()
-
- os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
- gobject.idle_add(self.get_run_game)
-
- def get_run_game(self):
- print "Lanzando CucaraSims."
- pygame.init()
- x, y, w, y= self.eventbox.get_allocation()
- Main( (w,y) )
- #Main()
- return False
-
- def salir(self, widget):
- lambda w: gtk.main_quit()
- sys.exit()
-
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle, False)
+ self.set_title('CucaraSims')
+ #self.set_toolbox(activity.ActivityToolbox(self))
+ self.eventbox= PygameCanvas()
+ self.set_canvas(self.eventbox)
+
+ self.add_events(gtk.gdk.ALL_EVENTS_MASK)
+ self.connect("destroy", self.salir)
+
+ self.show_all()
+ self.realize()
+
+ os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
+ gobject.idle_add(self.get_run_game)
+
+ def get_run_game(self):
+ print "Lanzando CucaraSims."
+ pygame.init()
+ x, y, w, y= self.eventbox.get_allocation()
+ Main( (w,y) )
+ #Main()
+ return False
+
+ def salir(self, widget):
+ lambda w: gtk.main_quit()
+ sys.exit()
+
class PygameCanvas(gtk.EventBox):
- def __init__(self):
- gtk.EventBox.__init__(self)
- self.set_flags(gtk.CAN_FOCUS)
- self.setup_events()
- self.socket = gtk.Socket()
- self.add(self.socket)
- self.button_state = [0,0,0]
- self.mouse_pos = (0,0)
-
- def setup_events(self):
- self.set_events(gtk.gdk.KEY_PRESS | gtk.gdk.EXPOSE | gtk.gdk.POINTER_MOTION_MASK | \
- gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_MOTION_MASK | \
- gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)
-
- self.connect("key-press-event", self.keypress)
- self.connect("button_press_event", self.mousedown)
- self.connect("motion-notify-event", self.mousemotion)
- self.connect('expose-event', self.expose)
- self.connect('configure-event', self.resize)
- self.connect("focus-in-event", self.set_focus)
-
- def keypress(self, selfmain, event, parametros= None):
- nombre= gtk.gdk.keyval_name(event.keyval)
- tipo= pygame.KEYDOWN
- unic= str.lower(nombre)
- valor= nombre
- try:
- valor= getattr(pygame, "K_%s" % (str.upper(nombre)))
- except:
- print "no has programado la traduccion de esta tecla: ", nombre
- return False
- evt = pygame.event.Event(tipo, key= valor, unicode= unic, mod=None)
- try:
- pygame.event.post(evt)
- except:
- pass
- return False
-
- def mousedown(self, widget, event):
- evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN, button= event.button, pos=(int(event.x), int(event.y)))
- try:
- pygame.event.post(evt)
- except:
- pass
- return False
-
- def mousemotion(self, widget, event):
- x, y, state = event.window.get_pointer()
- rel = (x - self.mouse_pos[0], y - self.mouse_pos[1])
- self.mouse_pos= (int(x), int(y))
- self.button_state = [
- state & gtk.gdk.BUTTON1_MASK and 1 or 0,
- state & gtk.gdk.BUTTON2_MASK and 1 or 0,
- state & gtk.gdk.BUTTON3_MASK and 1 or 0,
- ]
- evt = pygame.event.Event(pygame.MOUSEMOTION, pos= self.mouse_pos, rel=rel, buttons=self.button_state)
- try:
- pygame.event.post(evt)
- except:
- pass
- return False
-
- def expose(self, event, widget):
- if pygame.display.get_init():
- try:
- pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE))
- except:
- pass
- return False # continue processing
-
- def resize(self, widget, event):
- evt = pygame.event.Event(pygame.VIDEORESIZE, size=(event.width,event.height), width=event.width, height=event.height)
- try:
- pygame.event.post(evt)
- except:
- pass
- return False # continue processing
-
- def set_focus(self, container, widget):
- try:
- pygame.display.update()
- except:
- pass
- self.queue_draw()
- return False
-
+ def __init__(self):
+ gtk.EventBox.__init__(self)
+ self.set_flags(gtk.CAN_FOCUS)
+ self.setup_events()
+ self.socket = gtk.Socket()
+ self.add(self.socket)
+ self.button_state = [0,0,0]
+ self.mouse_pos = (0,0)
+
+ def setup_events(self):
+ self.set_events(gtk.gdk.KEY_PRESS | gtk.gdk.EXPOSE |
+ gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.POINTER_MOTION_HINT_MASK |
+ gtk.gdk.BUTTON_MOTION_MASK | gtk.gdk.BUTTON_PRESS_MASK |
+ gtk.gdk.BUTTON_RELEASE_MASK)
+
+ self.connect("key-press-event", self.keypress)
+ self.connect("button_press_event", self.mousedown)
+ self.connect("motion-notify-event", self.mousemotion)
+ self.connect('expose-event', self.expose)
+ self.connect('configure-event', self.resize)
+ self.connect("focus-in-event", self.set_focus)
+
+ def keypress(self, selfmain, event, parametros= None):
+ nombre= gtk.gdk.keyval_name(event.keyval)
+ tipo= pygame.KEYDOWN
+ unic= str.lower(nombre)
+ valor= nombre
+ try:
+ valor= getattr(pygame, "K_%s" % (str.upper(nombre)))
+ except:
+ print "no has programado la traduccion de esta tecla: ", nombre
+ return False
+ evt = pygame.event.Event(tipo, key= valor, unicode= unic, mod=None)
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False
+
+ def mousedown(self, widget, event):
+ evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN, button= event.button, pos=(int(event.x), int(event.y)))
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False
+
+ def mousemotion(self, widget, event):
+ x, y, state = event.window.get_pointer()
+ rel = (x - self.mouse_pos[0], y - self.mouse_pos[1])
+ self.mouse_pos= (int(x), int(y))
+ self.button_state = [
+ state & gtk.gdk.BUTTON1_MASK and 1 or 0,
+ state & gtk.gdk.BUTTON2_MASK and 1 or 0,
+ state & gtk.gdk.BUTTON3_MASK and 1 or 0,
+ ]
+ evt = pygame.event.Event(pygame.MOUSEMOTION, pos= self.mouse_pos, rel=rel, buttons=self.button_state)
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False
+
+ def expose(self, event, widget):
+ if pygame.display.get_init():
+ try:
+ pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE))
+ except:
+ pass
+ return False # continue processing
+
+ def resize(self, widget, event):
+ evt = pygame.event.Event(pygame.VIDEORESIZE, size=(event.width,event.height), width=event.width, height=event.height)
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False # continue processing
+
+ def set_focus(self, container, widget):
+ try:
+ pygame.display.update()
+ except:
+ pass
+ self.queue_draw()
+ return False
+
# -----------------------------------------------
# ******** El Juego en gtk ********
# -----------------------------------------------
class VentanaGTK(gtk.Window):
- def __init__(self):
- gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
- self.set_title("CucaraSims")
- self.fullscreen()
-
- #self.set_size_request(800,600)
- self.socket = gtk.Socket()
- self.add(self.socket)
-
- self.gtkplug= gtkplug()
- self.socket.add_id(self.gtkplug.get_id())
-
- self.add_events(gtk.gdk.ALL_EVENTS_MASK)
- self.connect("destroy", self.salir)
- self.connect("set-focus-child", self.refresh)
- self.show_all()
-
- def refresh(self, widget, datos):
- try:
- pygame.display.update()
- except:
- pass
- self.queue_draw()
- return True
-
- def salir(self, widget):
- pygame.quit()
- sys.exit()
-
+ def __init__(self):
+ gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
+ self.set_title("CucaraSims")
+ self.fullscreen()
+
+ #self.set_size_request(800,600)
+ self.socket = gtk.Socket()
+ self.add(self.socket)
+
+ self.gtkplug= gtkplug()
+ self.socket.add_id(self.gtkplug.get_id())
+
+ self.add_events(gtk.gdk.ALL_EVENTS_MASK)
+ self.connect("destroy", self.salir)
+ self.connect("set-focus-child", self.refresh)
+ self.show_all()
+
+ def refresh(self, widget, datos):
+ try:
+ pygame.display.update()
+ except:
+ pass
+ self.queue_draw()
+ return True
+
+ def salir(self, widget):
+ pygame.quit()
+ sys.exit()
+
class gtkplug(gtk.Plug):
- def __init__(self):
- gtk.Plug.__init__(self, 0L)
- self.set_title("CucaraSims")
- self.eventbox= PygameCanvas()
- self.add(self.eventbox)
- self.ventana= None
- self.show_all()
-
- self.connect("embedded", self.embed_event)
-
- os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
- gobject.idle_add(self.get_run_game)
-
- def get_run_game(self):
- self.eventbox.socket.window.set_cursor(None)
- print "Lanzando CucaraSims."
- pygame.init()
- #x, y, w, y= self.eventbox.get_allocation()
- #Main( (w,y) )
- Main()
- return False
-
- def embed_event(self, widget):
- print "Juego embebido"
-
+ def __init__(self):
+ gtk.Plug.__init__(self, 0L)
+ self.set_title("CucaraSims")
+ self.eventbox= PygameCanvas()
+ self.add(self.eventbox)
+ self.ventana= None
+ self.show_all()
+
+ self.connect("embedded", self.embed_event)
+
+ os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
+ gobject.idle_add(self.get_run_game)
+
+ def get_run_game(self):
+ self.eventbox.socket.window.set_cursor(None)
+ print "Lanzando CucaraSims."
+ pygame.init()
+ #x, y, w, y= self.eventbox.get_allocation()
+ #Main( (w,y) )
+ Main()
+ return False
+
+ def embed_event(self, widget):
+ print "Juego embebido"
+
if __name__=="__main__":
VentanaGTK()
gtk.main()
diff --git a/Ficha_Bicho.py b/Ficha_Bicho.py
index 19c0346..de6eb68 100644
--- a/Ficha_Bicho.py
+++ b/Ficha_Bicho.py
@@ -19,7 +19,9 @@
# 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
+import pygame
+import gc
+
from pygame.locals import *
gc.enable()
@@ -89,7 +91,7 @@ class Ficha_Bicho(pygame.sprite.OrderedUpdates):
hidratacion = "Hidratación: %s" % (self.bicho.sed)
if hidratacion != self.label_sed.get_text():
self.label_sed.set_text(texto= hidratacion)
- self.barra_hidratacion.set_valor(self.bicho.sed)
+ self.barra_hidratacion.set_valor(self.bicho.sed)
self.circulo.rect.center= self.bicho.rect.center
diff --git a/Interfaz.py b/Interfaz.py
index 82433ec..93c145d 100644
--- a/Interfaz.py
+++ b/Interfaz.py
@@ -19,7 +19,9 @@
# 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
+import pygame
+import gc
+
from pygame.locals import *
gc.enable()
@@ -87,7 +89,7 @@ class Interfaz(pygame.sprite.OrderedUpdates):
self.boton_musica= JAMButton("", self.imagenes_audio[0])
self.boton_musica.set_imagen(origen= self.imagenes_audio[0])
self.boton_musica.set_tamanios(tamanio= (ancho_botones, 70))
- y -= separador + self.boton_musica.get_tamanio()[1]
+ y -= separador + self.boton_musica.get_tamanio()[1]
self.boton_musica.set_posicion(punto=(x,y))
self.posicion_boton_audio = (x,y)
diff --git a/Libreta_de_Lectura.py b/Libreta_de_Lectura.py
index 905a07b..244ded1 100644
--- a/Libreta_de_Lectura.py
+++ b/Libreta_de_Lectura.py
@@ -19,7 +19,10 @@
# 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, subprocess
+import pygame
+import gc
+import subprocess
+
from pygame.locals import *
gc.enable()
diff --git a/Main.py b/Main.py
index 53835f5..042d318 100644
--- a/Main.py
+++ b/Main.py
@@ -19,7 +19,13 @@
# 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, sys, threading, random, gc, gtk, pygtk
+import pygame
+import sys
+import threading
+import random
+import gc
+import gtk
+
from pygame.locals import *
gc.enable()
@@ -36,559 +42,560 @@ from Archivos_y_Directorios import Archivos_y_Directorios
from Bicho import Bicho
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 Main():
- def __init__(self, res= None):
- self.resolucionreal= res
- # Variables para JAMatrix
- self.ventana= None
- self.name= "CucaraSims"
-
- # Variables del Juego
- self.fondo= None
- self.reloj= None
-
- # Escalado
- self.ventana_real= None
- self.VA= None
- self.VH= None
-
- self.sonido_select = None
- self.sprites = pygame.sprite.OrderedUpdates()
- self.Archivos_y_Directorios = None
- self.base_de_datos = None
- self.creditos = None
- self.dialog_cerrar = None
- self.menu = None
- self.mensaje = None
- self.Cria_Bichos= None
-
- self.interval = 0
- self.nivel = None
-
- self.Juegos_guardados = None
-
- self.preset()
- self.load()
- self.run()
-
- def run(self):
- self.nivel = "Menu"
- self.sprites= self.menu
- self.RunMenu()
-
- def RunMenu(self):
- pygame.mouse.set_visible(True)
- self.Cria_Bichos.set_musica()
- self.fondo= self.get_fondo2()
- self.ventana.blit(self.fondo, (0,0))
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
-
- while self.nivel == "Menu":
- self.reloj.tick(35)
- while gtk.events_pending():
- gtk.main_iteration(False)
- Traduce_posiciones(self.VA, self.VH)
- if self.mensaje: self.pause_menu()
- self.sprites.clear(self.ventana, self.fondo)
- self.sprites.update()
- self.handle_event()
- pygame.event.clear()
- self.sprites.draw(self.ventana)
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
-
- if self.nivel == "CucaraSims":
- self.Cria_Bichos.Run()
- if self.nivel == "Creditos":
- self.RunCreditos()
-
- def handle_event(self):
- if pygame.event.get(pygame.VIDEORESIZE): print "OK"
- for event in pygame.event.get(pygame.KEYDOWN):
- tecla= event.key
- if tecla== pygame.K_ESCAPE:
- if self.nivel == "Menu" and not self.mensaje:
- self.selecciona_mensaje_cerrar(None)
- elif self.nivel == "Creditos":
- self.nivel = "Menu"
- elif self.mensaje:
- self.deselecciona_mensaje(None)
-
- def pause_menu(self):
- self.ventana.blit(self.fondo, (0,0))
- while self.mensaje.sprites():
- self.reloj.tick(35)
- while gtk.events_pending():
- gtk.main_iteration(False)
- Traduce_posiciones(self.VA, self.VH)
- self.mensaje.clear(self.ventana, self.fondo)
- self.mensaje.update()
- self.handle_event()
- pygame.event.clear()
- self.mensaje.draw(self.ventana)
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
-
- def deselecciona_mensaje(self, button= None):
- self.mensaje= pygame.sprite.OrderedUpdates()
-
- def selecciona_mensaje_cerrar(self, button= None):
- self.mensaje= self.dialog_cerrar
-
- def selecciona_menu_cargar(self, button= None):
- self.deselecciona_mensaje(None)
- self.Juegos_guardados= Juegos_Guardados(self.Archivos_y_Directorios, self)
- self.mensaje= self.Juegos_guardados
-
- def cargar_juego(self, datos):
- # Carga el juegon Juego guardado seleccionado
- # poner todo a cero
- self.Cria_Bichos.Bichos.empty()
- self.Cria_Bichos.cadaveres.empty()
- self.Cria_Bichos.alimento.empty()
- self.Cria_Bichos.ootecas.empty()
- self.Cria_Bichos.agua.empty()
- self.Cria_Bichos.ficha = pygame.sprite.OrderedUpdates()
- self.Cria_Bichos.puntos = 0
- self.Cria_Bichos.tiempo_de_juego = 0
- self.Cria_Bichos.horas = 0
- self.Cria_Bichos.dias = 0
- self.Cria_Bichos.anios = 0
- self.Cria_Bichos.machos, self.Cria_Bichos.hembras = 0,0
-
- self.Cria_Bichos.secuencia_muda = 0
- self.Cria_Bichos.reproduccion = 0
- self.Cria_Bichos.nacimientos = 0
- self.Cria_Bichos.muertes = 0
- self.Cria_Bichos.plaga = 0
-
- # recuperar datos
- (base, datos_juego, cucas, ootecas) = datos # return (base, datos_juego, cucas, Ootecas)
-
- self.base_de_datos = base
-
- # datos generales del juego
- # datos 0 Tabla Juego [anios, dias, horas, puntos]
- self.Cria_Bichos.anios = int(datos_juego[1])
- self.Cria_Bichos.dias = int(datos_juego[2])
- self.Cria_Bichos.horas = int(datos_juego[3])
- self.Cria_Bichos.puntos = int(datos_juego[4])
-
- for cuca in cucas:
- # datos de cucarachas
- # datos 1 Tabla Cucas [sexo, anios, dias, horas, hambre, sed]
- contador, sexo, anios, dias, horas, hambre, sed = cuca
- tipo = None
- while tipo != sexo:
- bicho = Bicho(self.Cria_Bichos)
- tipo = bicho.sexo
- self.Cria_Bichos.Bichos.add(bicho)
-
- if bicho.sexo == "M":
- self.Cria_Bichos.machos += 1
- elif bicho.sexo == "F":
- self.Cria_Bichos.hembras += 1
-
- bicho.anios = int(anios)
- bicho.dias = int(dias)
- bicho.horas = int(horas)
- bicho.hambre = int(hambre)
- bicho.sed = int(sed)
-
- # escalar
- for dia in range (0, bicho.dias):
- # desde dia cero hasta los dias que tiene el bicho
- if dia == bicho.control_mudas: # bicho.control_mudas es una lista de dias de mudas
-
- indice = bicho.dias_mudas.index(dia)
- bicho.set_muda(escala=bicho.escalas_mudas[indice]) # se obtiene el tamaño
- bicho.velocidad += int(bicho.velocidad/3)
-
- if indice+1 < len(bicho.dias_mudas):
- bicho.control_mudas = bicho.dias_mudas[indice+1]
- else:
- bicho.control_mudas = bicho.dias_mudas[0]
-
- print "CUCA: ", bicho.anios, bicho.dias, bicho.horas, bicho.hambre, bicho.sed
-
- if self.Cria_Bichos.hembras + self.Cria_Bichos.machos != len(cucas):
- print "HAY INCOHERENCIAS DE CANTIDAD DE BICHOS ALMACENADOS/CARGADOS"
-
- for ooteca in ootecas:
- # datos de cucarachas
- # datos 2 Tabla ootecas [dias, horas, huevos]
- contador, dias, horas, huevos = ooteca
- ooteca = Ooteca(self.Cria_Bichos, posicion=(0,0))
- self.Cria_Bichos.ootecas.add(ooteca)
- ooteca.dias = int(dias)
- ooteca.horas = int(horas)
- ooteca.huevos = int(huevos)
- print "ooteca: ", ooteca.dias, ooteca.horas, ooteca.huevos
-
- self.deselecciona_mensaje(None)
- self.nivel = "CucaraSims"
-
- def get_new_game(self, button):
- self.base_de_datos= self.Archivos_y_Directorios.CrearBasededatos()
- self.Cria_Bichos.get_nuevo_Juego()
- if self.base_de_datos:
- self.nivel = "CucaraSims"
- else:
- print "Error al crear la base de datos"
- #self.nivel = "CucaraSims"
-
- def RunCreditos(self):
- pygame.mixer.music.load(VG.MUSICA2)
- pygame.mixer.music.play(-1, 0.0)
- self.ventana.blit(self.fondo, (0,0))
- pygame.display.update()
- while self.nivel == "Creditos":
- self.reloj.tick(35)
- while gtk.events_pending():
- gtk.main_iteration(False)
- Traduce_posiciones(self.VA, self.VH)
- self.creditos.clear(self.ventana, self.fondo)
- self.creditos.update()
- self.handle_event()
- pygame.event.clear()
- self.creditos.draw(self.ventana)
- self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
- pygame.display.update()
- if self.nivel == "Menu":
- self.RunMenu()
-
- def get_fondo2(self, tamanio=VG.RESOLUCION):
- superficie = pygame.transform.scale(pygame.image.load(VG.FONDO4), (VG.RESOLUCION))
- return superficie
-
- def get_creditos(self, button):
- self.nivel= "Creditos"
-
- def preset(self):
- pygame.mouse.set_visible(False)
- pygame.display.set_mode( (0,0), pygame.DOUBLEBUF | pygame.FULLSCREEN, 0)
- A, B= VG.RESOLUCION
- self.ventana= pygame.Surface( (A, B), flags=HWSURFACE )
- self.ventana_real= pygame.display.get_surface()
- C, D= (0, 0)
- if not self.resolucionreal:
- C= pygame.display.Info().current_w
- D= pygame.display.Info().current_h
- self.resolucionreal= (C,D)
- else:
- C, D= self.resolucionreal
- self.VA= float(C)/float(A)
- self.VH= float(D)/float(B)
- pygame.display.set_caption("CucaraSims")
- pygame.event.set_blocked([JOYAXISMOTION, JOYBALLMOTION, JOYHATMOTION, JOYBUTTONUP, JOYBUTTONDOWN,
- KEYUP, VIDEORESIZE, VIDEOEXPOSE, USEREVENT, QUIT, ACTIVEEVENT])
- pygame.event.set_allowed([MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN])
-
- def load(self):
- pygame.mixer.init()
- if not self.Archivos_y_Directorios: self.Archivos_y_Directorios= Archivos_y_Directorios(VG.DIRECTORIO_DATOS)
- if not self.sonido_select: self.sonido_select= JAMG.get_sound_select()
- if not self.reloj: self.reloj= pygame.time.Clock()
- if not self.fondo: self.fondo= self.get_fondo()
- if not self.menu:
- self.menu= Menu()
- self.menu.boton_nuevo.connect(callback= self.get_new_game, sonido_select= self.sonido_select)
- self.menu.boton_cargar.connect(callback= self.selecciona_menu_cargar, sonido_select= self.sonido_select)
- self.menu.boton_creditos.connect(callback= self.get_creditos, sonido_select= self.sonido_select)
- self.menu.boton_salir.connect(callback= self.selecciona_mensaje_cerrar, sonido_select= self.sonido_select)
-
- if not self.creditos: self.creditos= Creditos(self)
-
- if not self.dialog_cerrar:
- a,b,c= JAMG.get_estilo_naranja()
- self.dialog_cerrar= JAMDialog(mensaje= "¿Deseas Salir del Juego?",
- funcion_ok= self.salir, funcion_cancel= self.deselecciona_mensaje)
- 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.Cria_Bichos: self.Cria_Bichos= Cria_Bichos_Main(self)
-
- def get_fondo(self, color=(0,0,0,1), tamanio=VG.RESOLUCION):
- superficie = pygame.Surface( tamanio, flags=HWSURFACE )
- superficie.fill(color)
- return superficie
-
- def salir(self, button):
- pygame.quit()
- sys.exit()
-
+ def __init__(self, res= None):
+ self.resolucionreal= res
+ # Variables para JAMatrix
+ self.ventana= None
+ self.name= "CucaraSims"
+
+ # Variables del Juego
+ self.fondo= None
+ self.reloj= None
+
+ # Escalado
+ self.ventana_real= None
+ self.VA= None
+ self.VH= None
+
+ self.sonido_select = None
+ self.sprites = pygame.sprite.OrderedUpdates()
+ self.Archivos_y_Directorios = None
+ self.base_de_datos = None
+ self.creditos = None
+ self.dialog_cerrar = None
+ self.menu = None
+ self.mensaje = None
+ self.Cria_Bichos= None
+
+ self.interval = 0
+ self.nivel = None
+
+ self.Juegos_guardados = None
+
+ self.preset()
+ self.load()
+ self.run()
+
+ def run(self):
+ self.nivel = "Menu"
+ self.sprites= self.menu
+ self.RunMenu()
+
+ def RunMenu(self):
+ pygame.mouse.set_visible(True)
+ self.Cria_Bichos.set_musica()
+ self.fondo= self.get_fondo2()
+ self.ventana.blit(self.fondo, (0,0))
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ while self.nivel == "Menu":
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ Traduce_posiciones(self.VA, self.VH)
+ if self.mensaje: self.pause_menu()
+ self.sprites.clear(self.ventana, self.fondo)
+ self.sprites.update()
+ self.handle_event()
+ pygame.event.clear()
+ self.sprites.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ if self.nivel == "CucaraSims":
+ self.Cria_Bichos.Run()
+ if self.nivel == "Creditos":
+ self.RunCreditos()
+
+ def handle_event(self):
+ if pygame.event.get(pygame.VIDEORESIZE): print "OK"
+ for event in pygame.event.get(pygame.KEYDOWN):
+ tecla= event.key
+ if tecla== pygame.K_ESCAPE:
+ if self.nivel == "Menu" and not self.mensaje:
+ self.selecciona_mensaje_cerrar(None)
+ elif self.nivel == "Creditos":
+ self.nivel = "Menu"
+ elif self.mensaje:
+ self.deselecciona_mensaje(None)
+
+ def pause_menu(self):
+ self.ventana.blit(self.fondo, (0,0))
+ while self.mensaje.sprites():
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ Traduce_posiciones(self.VA, self.VH)
+ self.mensaje.clear(self.ventana, self.fondo)
+ self.mensaje.update()
+ self.handle_event()
+ pygame.event.clear()
+ self.mensaje.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ def deselecciona_mensaje(self, button= None):
+ self.mensaje= pygame.sprite.OrderedUpdates()
+
+ def selecciona_mensaje_cerrar(self, button= None):
+ self.mensaje= self.dialog_cerrar
+
+ def selecciona_menu_cargar(self, button= None):
+ self.deselecciona_mensaje(None)
+ self.Juegos_guardados= Juegos_Guardados(self.Archivos_y_Directorios, self)
+ self.mensaje= self.Juegos_guardados
+
+ def cargar_juego(self, datos):
+ # Carga el juegon Juego guardado seleccionado
+ # poner todo a cero
+ self.Cria_Bichos.Bichos.empty()
+ self.Cria_Bichos.cadaveres.empty()
+ self.Cria_Bichos.alimento.empty()
+ self.Cria_Bichos.ootecas.empty()
+ self.Cria_Bichos.agua.empty()
+ self.Cria_Bichos.ficha = pygame.sprite.OrderedUpdates()
+ self.Cria_Bichos.puntos = 0
+ self.Cria_Bichos.tiempo_de_juego = 0
+ self.Cria_Bichos.horas = 0
+ self.Cria_Bichos.dias = 0
+ self.Cria_Bichos.anios = 0
+ self.Cria_Bichos.machos, self.Cria_Bichos.hembras = 0,0
+
+ self.Cria_Bichos.secuencia_muda = 0
+ self.Cria_Bichos.reproduccion = 0
+ self.Cria_Bichos.nacimientos = 0
+ self.Cria_Bichos.muertes = 0
+ self.Cria_Bichos.plaga = 0
+
+ # recuperar datos
+ (base, datos_juego, cucas, ootecas) = datos # return (base, datos_juego, cucas, Ootecas)
+
+ self.base_de_datos = base
+
+ # datos generales del juego
+ # datos 0 Tabla Juego [anios, dias, horas, puntos]
+ self.Cria_Bichos.anios = int(datos_juego[1])
+ self.Cria_Bichos.dias = int(datos_juego[2])
+ self.Cria_Bichos.horas = int(datos_juego[3])
+ self.Cria_Bichos.puntos = int(datos_juego[4])
+
+ for cuca in cucas:
+ # datos de cucarachas
+ # datos 1 Tabla Cucas [sexo, anios, dias, horas, hambre, sed]
+ contador, sexo, anios, dias, horas, hambre, sed = cuca
+ tipo = None
+ while tipo != sexo:
+ bicho = Bicho(self.Cria_Bichos)
+ tipo = bicho.sexo
+ self.Cria_Bichos.Bichos.add(bicho)
+
+ if bicho.sexo == "M":
+ self.Cria_Bichos.machos += 1
+ elif bicho.sexo == "F":
+ self.Cria_Bichos.hembras += 1
+
+ bicho.anios = int(anios)
+ bicho.dias = int(dias)
+ bicho.horas = int(horas)
+ bicho.hambre = int(hambre)
+ bicho.sed = int(sed)
+
+ # escalar
+ for dia in range (0, bicho.dias):
+ # desde dia cero hasta los dias que tiene el bicho
+ if dia == bicho.control_mudas: # bicho.control_mudas es una lista de dias de mudas
+
+ indice = bicho.dias_mudas.index(dia)
+ bicho.set_muda(escala=bicho.escalas_mudas[indice]) # se obtiene el tamaño
+ bicho.velocidad += int(bicho.velocidad/3)
+
+ if indice+1 < len(bicho.dias_mudas):
+ bicho.control_mudas = bicho.dias_mudas[indice+1]
+ else:
+ bicho.control_mudas = bicho.dias_mudas[0]
+
+ print "CUCA: ", bicho.anios, bicho.dias, bicho.horas, bicho.hambre, bicho.sed
+
+ if self.Cria_Bichos.hembras + self.Cria_Bichos.machos != len(cucas):
+ print "HAY INCOHERENCIAS DE CANTIDAD DE BICHOS ALMACENADOS/CARGADOS"
+
+ for ooteca in ootecas:
+ # datos de cucarachas
+ # datos 2 Tabla ootecas [dias, horas, huevos]
+ contador, dias, horas, huevos = ooteca
+ ooteca = Ooteca(self.Cria_Bichos, posicion=(0,0))
+ self.Cria_Bichos.ootecas.add(ooteca)
+ ooteca.dias = int(dias)
+ ooteca.horas = int(horas)
+ ooteca.huevos = int(huevos)
+ print "ooteca: ", ooteca.dias, ooteca.horas, ooteca.huevos
+
+ self.deselecciona_mensaje(None)
+ self.nivel = "CucaraSims"
+
+ def get_new_game(self, button):
+ self.base_de_datos= self.Archivos_y_Directorios.CrearBasededatos()
+ self.Cria_Bichos.get_nuevo_Juego()
+ if self.base_de_datos:
+ self.nivel = "CucaraSims"
+ else:
+ print "Error al crear la base de datos"
+ #self.nivel = "CucaraSims"
+
+ def RunCreditos(self):
+ pygame.mixer.music.load(VG.MUSICA2)
+ pygame.mixer.music.play(-1, 0.0)
+ self.ventana.blit(self.fondo, (0,0))
+ pygame.display.update()
+ while self.nivel == "Creditos":
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ Traduce_posiciones(self.VA, self.VH)
+ self.creditos.clear(self.ventana, self.fondo)
+ self.creditos.update()
+ self.handle_event()
+ pygame.event.clear()
+ self.creditos.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+ if self.nivel == "Menu":
+ self.RunMenu()
+
+ def get_fondo2(self, tamanio=VG.RESOLUCION):
+ superficie = pygame.transform.scale(pygame.image.load(VG.FONDO4), (VG.RESOLUCION))
+ return superficie
+
+ def get_creditos(self, button):
+ self.nivel= "Creditos"
+
+ def preset(self):
+ pygame.mouse.set_visible(False)
+ pygame.display.set_mode( (0,0), pygame.DOUBLEBUF | pygame.FULLSCREEN, 0)
+ A, B= VG.RESOLUCION
+ self.ventana= pygame.Surface( (A, B), flags=HWSURFACE )
+ self.ventana_real= pygame.display.get_surface()
+ C, D= (0, 0)
+ if not self.resolucionreal:
+ C= pygame.display.Info().current_w
+ D= pygame.display.Info().current_h
+ self.resolucionreal= (C,D)
+ else:
+ C, D= self.resolucionreal
+ self.VA= float(C)/float(A)
+ self.VH= float(D)/float(B)
+ pygame.display.set_caption("CucaraSims")
+ pygame.event.set_blocked([JOYAXISMOTION, JOYBALLMOTION,
+ JOYHATMOTION, JOYBUTTONUP, JOYBUTTONDOWN,
+ KEYUP, VIDEORESIZE, VIDEOEXPOSE, USEREVENT, QUIT, ACTIVEEVENT])
+ pygame.event.set_allowed([MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN])
+
+ def load(self):
+ pygame.mixer.init()
+ if not self.Archivos_y_Directorios: self.Archivos_y_Directorios= Archivos_y_Directorios(VG.DIRECTORIO_DATOS)
+ if not self.sonido_select: self.sonido_select= JAMG.get_sound_select()
+ if not self.reloj: self.reloj= pygame.time.Clock()
+ if not self.fondo: self.fondo= self.get_fondo()
+ if not self.menu:
+ self.menu= Menu()
+ self.menu.boton_nuevo.connect(callback= self.get_new_game, sonido_select= self.sonido_select)
+ self.menu.boton_cargar.connect(callback= self.selecciona_menu_cargar, sonido_select= self.sonido_select)
+ self.menu.boton_creditos.connect(callback= self.get_creditos, sonido_select= self.sonido_select)
+ self.menu.boton_salir.connect(callback= self.selecciona_mensaje_cerrar, sonido_select= self.sonido_select)
+
+ if not self.creditos: self.creditos= Creditos(self)
+
+ if not self.dialog_cerrar:
+ a,b,c= JAMG.get_estilo_naranja()
+ self.dialog_cerrar= JAMDialog(mensaje= "¿Deseas Salir del Juego?",
+ funcion_ok= self.salir, funcion_cancel= self.deselecciona_mensaje)
+ 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.Cria_Bichos: self.Cria_Bichos= Cria_Bichos_Main(self)
+
+ def get_fondo(self, color=(0,0,0,1), tamanio=VG.RESOLUCION):
+ superficie = pygame.Surface( tamanio, flags=HWSURFACE )
+ superficie.fill(color)
+ return superficie
+
+ def salir(self, button):
+ pygame.quit()
+ sys.exit()
+
class Menu(pygame.sprite.OrderedUpdates):
- def __init__(self):
- pygame.sprite.OrderedUpdates.__init__(self)
-
- separador = 40
- ancho = 500
- alto = 100
-
- a,b,c= JAMG.get_estilo_celeste()
- self.boton_nuevo = JAMButton("Juego Nuevo", None)
- self.boton_cargar = JAMButton("Cargar Juego", None)
- self.boton_creditos = JAMButton("Creditos", None)
- self.boton_salir = JAMButton("Salir", None)
-
- self.boton_nuevo.set_text(tamanio= 50)
- self.boton_cargar.set_text(tamanio= 50)
- self.boton_creditos.set_text(tamanio= 50)
- self.boton_salir.set_text(tamanio= 50)
-
- self.boton_nuevo.set_tamanios(tamanio= (ancho,alto))
- self.boton_cargar.set_tamanios(tamanio= (ancho,alto))
- self.boton_creditos.set_tamanios(tamanio= (ancho,alto))
- self.boton_salir.set_tamanios(tamanio= (ancho,alto))
-
- self.boton_nuevo.set_colores(colorbas= a, colorbor= b, colorcara= c)
- self.boton_cargar.set_colores(colorbas= a, colorbor= b, colorcara= c)
- self.boton_creditos.set_colores(colorbas= a, colorbor= b, colorcara= c)
- self.boton_salir.set_colores(colorbas= a, colorbor= b, colorcara= c)
-
- y = 150
- x = VG.RESOLUCION[0]/2 - self.boton_nuevo.get_tamanio()[0]/2
- self.boton_nuevo.set_posicion(punto=(x,y))
-
- y += self.boton_nuevo.get_tamanio()[1] + separador
- x = VG.RESOLUCION[0]/2 - self.boton_cargar.get_tamanio()[0]/2
- self.boton_cargar.set_posicion(punto=(x,y))
-
- y += self.boton_cargar.get_tamanio()[1] + separador
- x = VG.RESOLUCION[0]/2 - self.boton_creditos.get_tamanio()[0]/2
- self.boton_creditos.set_posicion(punto=(x,y))
-
- y += self.boton_creditos.get_tamanio()[1] + separador
- x = VG.RESOLUCION[0]/2 - self.boton_salir.get_tamanio()[0]/2
- self.boton_salir.set_posicion(punto=(x,y))
-
- self.add(self.boton_nuevo)
- self.add(self.boton_cargar)
- self.add(self.boton_creditos)
- self.add(self.boton_salir)
-
+ def __init__(self):
+ pygame.sprite.OrderedUpdates.__init__(self)
+
+ separador = 40
+ ancho = 500
+ alto = 100
+
+ a,b,c= JAMG.get_estilo_celeste()
+ self.boton_nuevo = JAMButton("Juego Nuevo", None)
+ self.boton_cargar = JAMButton("Cargar Juego", None)
+ self.boton_creditos = JAMButton("Creditos", None)
+ self.boton_salir = JAMButton("Salir", None)
+
+ self.boton_nuevo.set_text(tamanio= 50)
+ self.boton_cargar.set_text(tamanio= 50)
+ self.boton_creditos.set_text(tamanio= 50)
+ self.boton_salir.set_text(tamanio= 50)
+
+ self.boton_nuevo.set_tamanios(tamanio= (ancho,alto))
+ self.boton_cargar.set_tamanios(tamanio= (ancho,alto))
+ self.boton_creditos.set_tamanios(tamanio= (ancho,alto))
+ self.boton_salir.set_tamanios(tamanio= (ancho,alto))
+
+ self.boton_nuevo.set_colores(colorbas= a, colorbor= b, colorcara= c)
+ self.boton_cargar.set_colores(colorbas= a, colorbor= b, colorcara= c)
+ self.boton_creditos.set_colores(colorbas= a, colorbor= b, colorcara= c)
+ self.boton_salir.set_colores(colorbas= a, colorbor= b, colorcara= c)
+
+ y = 150
+ x = VG.RESOLUCION[0]/2 - self.boton_nuevo.get_tamanio()[0]/2
+ self.boton_nuevo.set_posicion(punto=(x,y))
+
+ y += self.boton_nuevo.get_tamanio()[1] + separador
+ x = VG.RESOLUCION[0]/2 - self.boton_cargar.get_tamanio()[0]/2
+ self.boton_cargar.set_posicion(punto=(x,y))
+
+ y += self.boton_cargar.get_tamanio()[1] + separador
+ x = VG.RESOLUCION[0]/2 - self.boton_creditos.get_tamanio()[0]/2
+ self.boton_creditos.set_posicion(punto=(x,y))
+
+ y += self.boton_creditos.get_tamanio()[1] + separador
+ x = VG.RESOLUCION[0]/2 - self.boton_salir.get_tamanio()[0]/2
+ self.boton_salir.set_posicion(punto=(x,y))
+
+ self.add(self.boton_nuevo)
+ self.add(self.boton_cargar)
+ self.add(self.boton_creditos)
+ self.add(self.boton_salir)
+
class Creditos(pygame.sprite.OrderedUpdates):
- def __init__(self, main):
- pygame.sprite.OrderedUpdates.__init__(self)
- self.grupo1 = {}
- self.grupo2 = {}
- self.get_sprites()
- self.seleccion = 1
- self.velocidad = 4
-
- self.main= main
- self.cerrar= JAMButton("", None)
- self.cerrar.set_imagen(origen= JAMG.get_icon_exit())
- self.cerrar.set_tamanios(grosorbor= 1, espesor= 1)
- self.cerrar.set_posicion(punto= (VG.RESOLUCION[0] - self.cerrar.get_tamanio()[0], 0) )
- self.cerrar.connect(callback= self.salir, sonido_select= None)
- a,b,c= JAMG.get_estilo_celeste()
- self.cerrar.set_colores(colorbas= a, colorbor= b, colorcara= c)
- self.add(self.cerrar)
-
- def salir(self, button):
- self.main.nivel = "Menu"
-
- def update(self):
- if self.seleccion == 1:
- for num in self.grupo1.keys():
- etiqueta, (x,y) = self.grupo1[num]
- x, y= etiqueta.get_posicion()
- y -= self.velocidad
- etiqueta.set_posicion((x,y))
- if y < -50:
- self.seleccion = 2
- for num in self.grupo1.keys():
- etiqueta, (x,y) = self.grupo1[num]
- etiqueta.set_posicion((x,y))
-
- if self.seleccion == 2:
- for num in self.grupo2.keys():
- etiqueta, (x,y) = self.grupo2[num]
- x, y= etiqueta.get_posicion()
- y -= self.velocidad
- etiqueta.set_posicion((x,y))
- if y < -50:
- self.seleccion = 1
- for num in self.grupo2.keys():
- etiqueta, (x,y) = self.grupo2[num]
- etiqueta.set_posicion((x,y))
- self.cerrar.update()
-
- def get_sprites(self):
- Textos1 = ["CucaraSims.",
- "El Sims de las Cucarachas.",
- "Para Aprender Jugando y Jugar Aprendiendo.",
- "Dedicado con Cariño a mis Compañeros Voluntarios de",
- "CeibalJAM!, RAP Ceibal y a Todos los Niños y Jóvenes",
- "del Uruguay y demás comunidades Sugar."]
-
- Textos2 = ["Idea Original, Edición de Audio y Video,",
- "Diseño Gráfico, Desarrollo y Contenidos:",
- "Flavio Danesse - fdanesse@gmail.com",
- "Imágenes e Información: Wikipedia - Wikiespecies",
- "Música: MATI - ARUAL - http://www.jamendo.com"]
-
- color= JAMG.get_celeste1()
- contador= 1
-
- #logo= JAMLabel("")
- #logo.set_imagen(origen= VG.LOGO)
- logo= Logo()
- x, y = VG.RESOLUCION[0]/2 - logo.get_tamanio()[0]/2, VG.RESOLUCION[1]
- logo.set_posicion((x,y))
- self.add(logo)
- self.grupo1[contador]= logo, (x,y)
-
- y += 95
- contador += 1
- # textos1
- for texto in Textos1:
- etiqueta= JAMLabel(texto)
- etiqueta.set_text(tamanio= 40, color= color)
-
- x = VG.RESOLUCION[0]/2 - etiqueta.get_tamanio()[0]/2
- etiqueta.set_posicion((x,y))
- self.add(etiqueta)
- self.grupo1[contador] = etiqueta, (x,y)
- y += 100
- contador += 1
-
- contador = 1
- y = VG.RESOLUCION[1]
- for texto in Textos2:
- etiqueta= JAMLabel(texto)
- etiqueta.set_text(tamanio= 40, color= color)
- x = VG.RESOLUCION[0]/2 - etiqueta.get_tamanio()[0]/2
- etiqueta.set_posicion((x,y))
- self.add(etiqueta)
- self.grupo2[contador] = etiqueta, (x,y)
- y += 100
- contador += 1
-
+ def __init__(self, main):
+ pygame.sprite.OrderedUpdates.__init__(self)
+ self.grupo1 = {}
+ self.grupo2 = {}
+ self.get_sprites()
+ self.seleccion = 1
+ self.velocidad = 4
+
+ self.main= main
+ self.cerrar= JAMButton("", None)
+ self.cerrar.set_imagen(origen= JAMG.get_icon_exit())
+ self.cerrar.set_tamanios(grosorbor= 1, espesor= 1)
+ self.cerrar.set_posicion(punto= (VG.RESOLUCION[0] - self.cerrar.get_tamanio()[0], 0) )
+ self.cerrar.connect(callback= self.salir, sonido_select= None)
+ a,b,c= JAMG.get_estilo_celeste()
+ self.cerrar.set_colores(colorbas= a, colorbor= b, colorcara= c)
+ self.add(self.cerrar)
+
+ def salir(self, button):
+ self.main.nivel = "Menu"
+
+ def update(self):
+ if self.seleccion == 1:
+ for num in self.grupo1.keys():
+ etiqueta, (x,y) = self.grupo1[num]
+ x, y= etiqueta.get_posicion()
+ y -= self.velocidad
+ etiqueta.set_posicion((x,y))
+ if y < -50:
+ self.seleccion = 2
+ for num in self.grupo1.keys():
+ etiqueta, (x,y) = self.grupo1[num]
+ etiqueta.set_posicion((x,y))
+
+ if self.seleccion == 2:
+ for num in self.grupo2.keys():
+ etiqueta, (x,y) = self.grupo2[num]
+ x, y= etiqueta.get_posicion()
+ y -= self.velocidad
+ etiqueta.set_posicion((x,y))
+ if y < -50:
+ self.seleccion = 1
+ for num in self.grupo2.keys():
+ etiqueta, (x,y) = self.grupo2[num]
+ etiqueta.set_posicion((x,y))
+ self.cerrar.update()
+
+ def get_sprites(self):
+ Textos1 = ["CucaraSims.",
+ "El Sims de las Cucarachas.",
+ "Para Aprender Jugando y Jugar Aprendiendo.",
+ "Dedicado con Cariño a mis Compañeros Voluntarios de",
+ "CeibalJAM!, RAP Ceibal y a Todos los Niños y Jóvenes",
+ "del Uruguay y demás comunidades Sugar."]
+
+ Textos2 = ["Idea Original, Edición de Audio y Video,",
+ "Diseño Gráfico, Desarrollo y Contenidos:",
+ "Flavio Danesse - fdanesse@gmail.com",
+ "Imágenes e Información: Wikipedia - Wikiespecies",
+ "Música: MATI - ARUAL - http://www.jamendo.com"]
+
+ color= JAMG.get_celeste1()
+ contador= 1
+
+ #logo= JAMLabel("")
+ #logo.set_imagen(origen= VG.LOGO)
+ logo= Logo()
+ x, y = VG.RESOLUCION[0]/2 - logo.get_tamanio()[0]/2, VG.RESOLUCION[1]
+ logo.set_posicion((x,y))
+ self.add(logo)
+ self.grupo1[contador]= logo, (x,y)
+
+ y += 95
+ contador += 1
+ # textos1
+ for texto in Textos1:
+ etiqueta= JAMLabel(texto)
+ etiqueta.set_text(tamanio= 40, color= color)
+
+ x = VG.RESOLUCION[0]/2 - etiqueta.get_tamanio()[0]/2
+ etiqueta.set_posicion((x,y))
+ self.add(etiqueta)
+ self.grupo1[contador] = etiqueta, (x,y)
+ y += 100
+ contador += 1
+
+ contador = 1
+ y = VG.RESOLUCION[1]
+ for texto in Textos2:
+ etiqueta= JAMLabel(texto)
+ etiqueta.set_text(tamanio= 40, color= color)
+ x = VG.RESOLUCION[0]/2 - etiqueta.get_tamanio()[0]/2
+ etiqueta.set_posicion((x,y))
+ self.add(etiqueta)
+ self.grupo2[contador] = etiqueta, (x,y)
+ y += 100
+ contador += 1
+
class Logo(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.image= pygame.image.load(VG.LOGO)
- self.rect= self.image.get_rect()
- def get_tamanio(self):
- return (self.rect.w, self.rect.h)
- def set_posicion(self, punto= (0,0)):
- self.rect.x, self.rect.y= punto
- def get_posicion(self, punto= (0,0)):
- return (self.rect.x, self.rect.y)
-
+ def __init__(self):
+ pygame.sprite.Sprite.__init__(self)
+ self.image= pygame.image.load(VG.LOGO)
+ self.rect= self.image.get_rect()
+ def get_tamanio(self):
+ return (self.rect.w, self.rect.h)
+ def set_posicion(self, punto= (0,0)):
+ self.rect.x, self.rect.y= punto
+ def get_posicion(self, punto= (0,0)):
+ return (self.rect.x, self.rect.y)
+
class Juegos_Guardados(pygame.sprite.OrderedUpdates):
- def __init__(self, archivosydirectorios, main):
- pygame.sprite.OrderedUpdates.__init__(self)
- self.juego_base= main
- self.Archivos_y_Directorios= archivosydirectorios
- lista_juegos_guardados= self.Archivos_y_Directorios.get_juegos()
- self.directorio= lista_juegos_guardados[0] # string
- self.juegos= lista_juegos_guardados[1] # lista
-
- y = 50
- self.items = []
- w, h= (0,0)
- for juego in self.juegos:
- item= Item_Juego(self.Archivos_y_Directorios, juego, self)
- item.agregate(self)
- if item.etiqueta_juego.get_tamanio()[1] > h: h= item.etiqueta_juego.get_tamanio()[1]
- if item.etiqueta_juego.get_tamanio()[0] > w: w= item.etiqueta_juego.get_tamanio()[0]
- self.items.append(item)
- for item in self.items:
- x= VG.RESOLUCION[0]/2 - w/2
- item.set_posicion(punto= (x, y))
- y+= h+ 30
-
- self.cerrar= JAMButton("", None)
- self.cerrar.set_imagen(origen= JAMG.get_icon_exit())
- self.cerrar.set_tamanios(grosorbor= 1, espesor= 1)
- self.cerrar.set_posicion(punto= (VG.RESOLUCION[0] - self.cerrar.get_tamanio()[0], 0) )
- self.cerrar.connect(callback= self.salir, sonido_select= None)
- a,b,c= JAMG.get_estilo_celeste()
- self.cerrar.set_colores(colorbas= a, colorbor= b, colorcara= c)
-
- self.add(self.cerrar)
-
- def salir(self, button= None):
- self.juego_base.deselecciona_mensaje(None)
-
- def reordenar_juegos(self, item):
- self.items.remove(item)
- #y= 50
- #for item in self.items:
- # x = VG.RESOLUCION[0]/2 - item.etiqueta_juego.rect.w/2
- # item.set_posicion(punto= (x, y))
- # y += item.etiqueta_juego.get_tamanio()[1] + 30
-
+ def __init__(self, archivosydirectorios, main):
+ pygame.sprite.OrderedUpdates.__init__(self)
+ self.juego_base= main
+ self.Archivos_y_Directorios= archivosydirectorios
+ lista_juegos_guardados= self.Archivos_y_Directorios.get_juegos()
+ self.directorio= lista_juegos_guardados[0] # string
+ self.juegos= lista_juegos_guardados[1] # lista
+
+ y = 50
+ self.items = []
+ w, h= (0,0)
+ for juego in self.juegos:
+ item= Item_Juego(self.Archivos_y_Directorios, juego, self)
+ item.agregate(self)
+ if item.etiqueta_juego.get_tamanio()[1] > h: h= item.etiqueta_juego.get_tamanio()[1]
+ if item.etiqueta_juego.get_tamanio()[0] > w: w= item.etiqueta_juego.get_tamanio()[0]
+ self.items.append(item)
+ for item in self.items:
+ x= VG.RESOLUCION[0]/2 - w/2
+ item.set_posicion(punto= (x, y))
+ y+= h+ 30
+
+ self.cerrar= JAMButton("", None)
+ self.cerrar.set_imagen(origen= JAMG.get_icon_exit())
+ self.cerrar.set_tamanios(grosorbor= 1, espesor= 1)
+ self.cerrar.set_posicion(punto= (VG.RESOLUCION[0] - self.cerrar.get_tamanio()[0], 0) )
+ self.cerrar.connect(callback= self.salir, sonido_select= None)
+ a,b,c= JAMG.get_estilo_celeste()
+ self.cerrar.set_colores(colorbas= a, colorbor= b, colorcara= c)
+
+ self.add(self.cerrar)
+
+ def salir(self, button= None):
+ self.juego_base.deselecciona_mensaje(None)
+
+ def reordenar_juegos(self, item):
+ self.items.remove(item)
+ #y= 50
+ #for item in self.items:
+ # x = VG.RESOLUCION[0]/2 - item.etiqueta_juego.rect.w/2
+ # item.set_posicion(punto= (x, y))
+ # y += item.etiqueta_juego.get_tamanio()[1] + 30
+
class Item_Juego():
- def __init__(self, archivosydirectorios, juego, grupo):
- self.grupo= grupo
- self.Archivos_y_Directorios= archivosydirectorios
- self.juego= juego
- self.separador= 10
-
- a,b,c= JAMG.get_estilo_celeste()
- self.etiqueta_juego= JAMLabel(juego)
- self.etiqueta_juego.set_text(tamanio= 40)
- self.etiqueta_juego.set_text(color= c)
-
- self.boton_borrar= JAMButton("Borrar", None)
- self.boton_borrar.set_text(tamanio= 30)
- self.boton_borrar.set_tamanios(tamanio= (50, self.etiqueta_juego.get_tamanio()[1]), grosorbor= 1, espesor= 1)
- self.boton_borrar.set_colores(colorbas= a, colorbor= b, colorcara= c)
-
- self.boton_load= JAMButton("Cargar", None)
- self.boton_load.set_text(tamanio= 30)
- self.boton_load.set_tamanios(tamanio= (50, self.etiqueta_juego.get_tamanio()[1]), grosorbor= 1, espesor= 1)
- self.boton_load.set_colores(colorbas= a, colorbor= b, colorcara= c)
-
- self.boton_borrar.connect(callback= self.delete_game, sonido_select= None)
- self.boton_load.connect(callback= self.carga_game, sonido_select= None)
-
- def agregate(self, grupo):
- grupo.add(self.etiqueta_juego)
- grupo.add(self.boton_borrar)
- grupo.add(self.boton_load)
-
- def set_posicion(self, punto= (0,0)):
- (x,y)= punto
- self.etiqueta_juego.set_posicion((x,y))
- a= x - self.separador - self.boton_borrar.get_tamanio()[0]
- self.boton_borrar.set_posicion((a,y))
- b= x + self.separador + self.etiqueta_juego.get_tamanio()[0]
- self.boton_load.set_posicion((b,y))
-
- def delete_game(self, button= None):
- self.Archivos_y_Directorios.borrar_tabla(self.juego)
- self.etiqueta_juego.kill()
- self.boton_borrar.kill()
- self.boton_load.kill()
- self.grupo.reordenar_juegos(self)
- return
-
- def carga_game(self, button= None):
- self.grupo.juego_base.cargar_juego(self.Archivos_y_Directorios.Leer_Base_de_Datos(self.juego))
-
+ def __init__(self, archivosydirectorios, juego, grupo):
+ self.grupo= grupo
+ self.Archivos_y_Directorios= archivosydirectorios
+ self.juego= juego
+ self.separador= 10
+
+ a,b,c= JAMG.get_estilo_celeste()
+ self.etiqueta_juego= JAMLabel(juego)
+ self.etiqueta_juego.set_text(tamanio= 40)
+ self.etiqueta_juego.set_text(color= c)
+
+ self.boton_borrar= JAMButton("Borrar", None)
+ self.boton_borrar.set_text(tamanio= 30)
+ self.boton_borrar.set_tamanios(tamanio= (50, self.etiqueta_juego.get_tamanio()[1]), grosorbor= 1, espesor= 1)
+ self.boton_borrar.set_colores(colorbas= a, colorbor= b, colorcara= c)
+
+ self.boton_load= JAMButton("Cargar", None)
+ self.boton_load.set_text(tamanio= 30)
+ self.boton_load.set_tamanios(tamanio= (50, self.etiqueta_juego.get_tamanio()[1]), grosorbor= 1, espesor= 1)
+ self.boton_load.set_colores(colorbas= a, colorbor= b, colorcara= c)
+
+ self.boton_borrar.connect(callback= self.delete_game, sonido_select= None)
+ self.boton_load.connect(callback= self.carga_game, sonido_select= None)
+
+ def agregate(self, grupo):
+ grupo.add(self.etiqueta_juego)
+ grupo.add(self.boton_borrar)
+ grupo.add(self.boton_load)
+
+ def set_posicion(self, punto= (0,0)):
+ (x,y)= punto
+ self.etiqueta_juego.set_posicion((x,y))
+ a= x - self.separador - self.boton_borrar.get_tamanio()[0]
+ self.boton_borrar.set_posicion((a,y))
+ b= x + self.separador + self.etiqueta_juego.get_tamanio()[0]
+ self.boton_load.set_posicion((b,y))
+
+ def delete_game(self, button= None):
+ self.Archivos_y_Directorios.borrar_tabla(self.juego)
+ self.etiqueta_juego.kill()
+ self.boton_borrar.kill()
+ self.boton_load.kill()
+ self.grupo.reordenar_juegos(self)
+ return
+
+ def carga_game(self, button= None):
+ self.grupo.juego_base.cargar_juego(self.Archivos_y_Directorios.Leer_Base_de_Datos(self.juego))
+ \ No newline at end of file
diff --git a/activity/activity.info b/activity/activity.info
index ddfc4ff..d1fd0a6 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,7 +1,8 @@
[Activity]
name = CucaraSims
-activity_version = 2
-service_name = org.laptop.CucaraSims
+activity_version = 3
+bundle_id = org.laptop.CucaraSims
icon = CucaraSims
show_launcher = yes
-class = CucaraSims.CucaraSims
+exec = sugar-activity CucaraSims.CucaraSims
+license = GPLv2+