From dbd89c7514edc93915cc12b535d875f94e4f3109 Mon Sep 17 00:00:00 2001 From: flavio Date: Sun, 12 Aug 2012 20:26:04 +0000 Subject: Correcciones y actualizacion a sugar 0.94 --- 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 +# 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+ -- cgit v0.9.1