Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/conozcouy.py
diff options
context:
space:
mode:
Diffstat (limited to 'conozcouy.py')
-rwxr-xr-xconozcouy.py379
1 files changed, 335 insertions, 44 deletions
diff --git a/conozcouy.py b/conozcouy.py
index 3c8bb09..e528759 100755
--- a/conozcouy.py
+++ b/conozcouy.py
@@ -1,6 +1,6 @@
#! /usr/bin/env python
-# Conozco
-# Copyright (C) 2010 Gabriel Eirea
+# Conozco Uruguay
+# Copyright (C) 2008,2009,2010 Gabriel Eirea
#
# 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
@@ -35,26 +35,36 @@ DXBICHO = 218
DYBICHO = 268
XBICHO = 1200-DXBICHO
YBICHO = 900-DYBICHO
+XNAVE = 800
+YNAVE = 650
+DXNAVE = 100
+DYNAVE = 200
CAMINORECURSOS = "recursos"
-CAMINOLAMINA = "lamina"
CAMINOCOMUN = "comun"
CAMINOFUENTES = "fuentes"
-ARCHIVOINFO = "info.txt"
CAMINODATOS = "datos"
+ARCHIVOINFO = "info.txt"
ARCHIVONIVELES = "niveles.txt"
+ARCHIVONOMBRE = "nombre.txt"
ARCHIVOZONAS = "zonas.txt"
+ARCHIVOEXPLORACIONES = "exploraciones.txt"
ARCHIVOCREDITOS = "creditos.txt"
-ARCHIVONOMBRE = "nombre.txt"
CAMINOIMAGENES = "imagenes"
CAMINOSONIDOS = "sonidos"
-COLORNOMBREDEPTO = (200,60,60)
+COLORNOMBRE = (10,10,10)
COLORPREGUNTAS = (80,80,155)
COLORPANEL = (156,158,172)
TOTALAVANCE = 7
EVENTORESPUESTA = pygame.USEREVENT+1
TIEMPORESPUESTA = 2300
-EVENTOREFRESCO = EVENTORESPUESTA+1
+EVENTODESPEGUE = EVENTORESPUESTA+1
+TIEMPODESPEGUE = 40
+EVENTOREFRESCO = EVENTODESPEGUE+1
TIEMPOREFRESCO = 250
+ESTADONORMAL = 1
+ESTADOPESTANAS = 2
+ESTADOFRENTE = 3
+ESTADODESPEGUE = 4
# variables globales para adaptar la pantalla a distintas resoluciones
scale = 1
@@ -72,12 +82,12 @@ def wait_events():
class Zona():
- """Clase para zonas de una imagen.
+ """Clase para objetos geograficos que se pueden definir como una zona.
La posicion esta dada por una imagen bitmap pintada con un color
especifico, dado por la clave (valor 0 a 255 del componente rojo).
"""
-
+################ tipo?????????????
def __init__(self,mapa,nombre,claveColor,tipo,posicion,rotacion):
self.mapa = mapa
self.nombre = nombre
@@ -90,7 +100,11 @@ class Zona():
def estaAca(self,pos):
"""Devuelve True si la coordenada pos esta en la zona"""
if pos[0] < XMAPAMAX*scale+shift_x:
- colorAca = self.mapa.get_at((pos[0]-shift_x, pos[1]-shift_y))
+ try:
+ colorAca = self.mapa.get_at((pos[0]-shift_x,
+ pos[1]-shift_y))
+ except: # probablemente click fuera de la imagen
+ return False
if colorAca[0] == self.claveColor:
return True
else:
@@ -192,6 +206,23 @@ class ConozcoUy():
linea = f.readline()
f.close()
+ def cargarListaDirectorios(self):
+ """Carga la lista de directorios con los distintos mapas"""
+ self.listaDirectorios = list()
+ self.listaNombreDirectorios = list()
+ listaTemp = os.listdir(CAMINORECURSOS)
+ listaTemp.sort()
+ for d in listaTemp:
+ if d == "comun":
+ pass
+ else:
+ self.listaDirectorios.append(d)
+ f = open(os.path.join(CAMINORECURSOS,d,ARCHIVONOMBRE),"r")
+ linea = f.readline()
+ self.listaNombreDirectorios.append(\
+ unicode(linea.strip(),'iso-8859-1'))
+ f.close()
+
def cargarNiveles(self):
"""Carga los niveles del archivo de configuracion"""
self.listaNiveles = list()
@@ -259,7 +290,7 @@ class ConozcoUy():
self.pantalla.blit(self.terron,
(int(20*scale+shift_x),
int(20*scale+shift_y)))
- self.mostrarTexto("Acerca de Conozco Uruguay",
+ self.mostrarTexto("Acerca de Conozco",
self.fuente40,
(int(600*scale+shift_x),
int(100*scale+shift_y)),
@@ -285,7 +316,8 @@ class ConozcoUy():
pygame.display.flip()
while 1:
for event in wait_events():
- if event.type == pygame.KEYDOWN:
+ if event.type == pygame.KEYDOWN or \
+ event.type == pygame.MOUSEBUTTONDOWN:
self.click.play()
self.pantalla.blit(self.pantallaTemp,(0,0))
pygame.display.flip()
@@ -297,25 +329,31 @@ class ConozcoUy():
"""Pantalla con el menu principal del juego"""
global scale, shift_x, shift_y
self.pantalla.fill((0,0,0))
- self.mostrarTexto("CONOZCO NUMEROS",
+ self.mostrarTexto("CONOZCO",
self.fuente48,
(int(600*scale+shift_x),
int(80*scale+shift_y)),
(255,255,255))
- self.mostrarTexto("Juego",
- self.fuente48,
- (int(300*scale+shift_x), int(220*scale+shift_y)),
+ self.mostrarTexto("Has elegido la lamina "+\
+ self.listaNombreDirectorios\
+ [self.indiceDirectorioActual],
+ self.fuente40,
+ (int(600*scale+shift_x), int(140*scale+shift_y)),
+ (200,100,100))
+ self.mostrarTexto("Selecciona el nivel",
+ self.fuente40,
+ (int(600*scale+shift_x), int(220*scale+shift_y)),
(200,100,100))
yLista = int(300*scale+shift_y)
for n in self.listaNiveles:
self.pantalla.fill((20,20,20),
- (int(10*scale+shift_x),
+ (int(310*scale+shift_x),
yLista-int(24*scale),
int(590*scale),
int(48*scale)))
self.mostrarTexto(n.nombre,
self.fuente40,
- (int(300*scale+shift_x), yLista),
+ (int(600*scale+shift_x), yLista),
(200,100,100))
yLista += int(50*scale)
self.pantalla.fill((20,20,20),
@@ -330,7 +368,7 @@ class ConozcoUy():
(int(610*scale+shift_x),
int(801*scale+shift_y),
int(590*scale),int(48*scale)))
- self.mostrarTexto("Salir",
+ self.mostrarTexto("Volver",
self.fuente40,
(int(900*scale+shift_x),int(825*scale+shift_y)),
(100,200,100))
@@ -345,26 +383,189 @@ class ConozcoUy():
elif event.type == pygame.MOUSEBUTTONDOWN:
self.click.play()
pos = event.pos
- if pos[1] > 275*scale + shift_y: # zona de opciones
- if pos[0] < 600*scale + shift_x: # primera columna
- if pos[1] < 275*scale + shift_y + \
- len(self.listaNiveles)*50*scale: # nivel
- self.indiceNivelActual = \
- int((pos[1]-int(275*scale+shift_y))//\
- int(50*scale))
- self.jugar = True
- return
- elif pos[1] > 800*scale + shift_y and \
- pos[1] < 850*scale + shift_y: # acerca de
+ if pos[1] > 275*scale + shift_y and \
+ pos[1] < 800*scale +shift_y and \
+ pos[0] > 300*scale + shift_x and \
+ pos[0] < 900*scale + shift_x: # zona de opciones
+ if pos[1] < 275*scale + shift_y + \
+ len(self.listaNiveles)*50*scale: # nivel
+ self.indiceNivelActual = \
+ int((pos[1]-int(275*scale+shift_y))//\
+ int(50*scale))
+ return
+ elif pos[1] > 800*scale + shift_y and \
+ pos[1] < 850*scale + shift_y and \
+ pos[0] > shift_x and \
+ pos[0] < 600*scale + shift_x: # acerca de
self.pantallaAcercaDe()
- else: # segunda columna
- if pos[1] > 800*scale + shift_y and \
- pos[1] < 850*scale+shift_y: # volver
- self.elegir_directorio = True
- return
+ elif pos[1] > 800*scale + shift_y and \
+ pos[1] < 850*scale+shift_y and \
+ pos[0] > 600*scale + shift_x and \
+ pos[0] < 1200*scale + shift_x: # volver
+ self.elegir_directorio = True
+ return
elif event.type == EVENTOREFRESCO:
pygame.display.flip()
+ def pantallaDirectorios(self):
+ """Pantalla con el menu de directorios"""
+ global scale, shift_x, shift_y
+ self.pantalla.fill((0,0,0))
+ self.mostrarTexto("CONOZCO",
+ self.fuente48,
+ (int(600*scale+shift_x),int(80*scale+shift_y)),
+ (255,255,255))
+ self.mostrarTexto("Elige la lamina a utilizar",
+ self.fuente40,
+ (int(600*scale+shift_x),int(140*scale+shift_y)),
+ (200,100,100))
+ nDirectorios = len(self.listaNombreDirectorios)
+ paginaDirectorios = self.paginaDir
+ while 1:
+ yLista = int(200*scale+shift_y)
+ self.pantalla.fill((0,0,0),
+ (int(shift_x),yLista-int(24*scale),
+ int(1200*scale),int(600*scale)))
+ if paginaDirectorios == 0:
+ paginaAnteriorActiva = False
+ else:
+ paginaAnteriorActiva = True
+ paginaSiguienteActiva = False
+ if paginaAnteriorActiva:
+ self.pantalla.fill((20,20,20),
+ (int(10*scale+shift_x),yLista-int(24*scale),
+ int(590*scale),int(48*scale)))
+ self.mostrarTexto("<<< Pagina anterior",
+ self.fuente40,
+ (int(300*scale+shift_x),yLista),
+ (100,100,200))
+ yLista += int(50*scale)
+ indiceDir = paginaDirectorios * 20
+ terminar = False
+ while not terminar:
+ self.pantalla.fill((20,20,20),
+ (int(10*scale+shift_x),yLista-int(24*scale),
+ int(590*scale),int(48*scale)))
+ self.mostrarTexto(self.listaNombreDirectorios[indiceDir],
+ self.fuente40,
+ (int(300*scale+shift_x),yLista),
+ (200,100,100))
+ yLista += int(50*scale)
+ indiceDir = indiceDir + 1
+ if indiceDir == nDirectorios or \
+ indiceDir == paginaDirectorios * 20 + 10:
+ terminar = True
+ if indiceDir == paginaDirectorios * 20 + 10 and \
+ not indiceDir == nDirectorios:
+ nDirectoriosCol1 = 10
+ yLista = int(250*scale+shift_y)
+ terminar = False
+ while not terminar:
+ self.pantalla.fill((20,20,20),
+ (int(610*scale+shift_x),
+ yLista-int(24*scale),
+ int(590*scale),int(48*scale)))
+ self.mostrarTexto(self.listaNombreDirectorios[indiceDir],
+ self.fuente40,
+ (int(900*scale+shift_x),yLista),
+ (200,100,100))
+ yLista += int(50*scale)
+ indiceDir = indiceDir + 1
+ if indiceDir == nDirectorios or \
+ indiceDir == paginaDirectorios * 20 + 20:
+ terminar = True
+ if indiceDir == paginaDirectorios * 20 + 20:
+ if indiceDir < nDirectorios:
+ self.pantalla.fill((20,20,20),
+ (int(610*scale+shift_x),
+ yLista-int(24*scale),
+ int(590*scale),int(48*scale)))
+ self.mostrarTexto("Pagina siguiente >>>",
+ self.fuente40,
+ (int(900*scale+shift_x),yLista),
+ (100,100,200))
+ paginaSiguienteActiva = True
+ nDirectoriosCol2 = 10
+ else:
+ nDirectoriosCol2 = indiceDir - paginaDirectorios * 20 - 10
+ else:
+ nDirectoriosCol1 = indiceDir - paginaDirectorios * 20
+ nDirectoriosCol2 = 0
+ self.pantalla.fill((20,20,20),
+ (int(10*scale+shift_x),int(801*scale+shift_y),
+ int(590*scale),int(48*scale)))
+ self.mostrarTexto("Sobre este juego",
+ self.fuente40,
+ (int(300*scale+shift_x),int(825*scale+shift_y)),
+ (100,200,100))
+ self.pantalla.fill((20,20,20),
+ (int(610*scale+shift_x),int(801*scale+shift_y),
+ int(590*scale),int(48*scale)))
+ self.mostrarTexto("Salir",
+ self.fuente40,
+ (int(900*scale+shift_x),int(825*scale+shift_y)),
+ (100,200,100))
+ pygame.display.flip()
+ cambiarPagina = False
+ while not cambiarPagina:
+ for event in wait_events():
+ if event.type == pygame.KEYDOWN:
+ if event.key == 27: # escape: salir
+ self.click.play()
+ sys.exit()
+ elif event.type == pygame.MOUSEBUTTONDOWN:
+ self.click.play()
+ pos = event.pos
+ if pos[1] > 175*scale+shift_y: # zona de opciones
+ if pos[0] < 600*scale+shift_x: # primera columna
+ if pos[1] < 175*scale + shift_y + \
+ (nDirectoriosCol1+1)*50*scale: # mapa
+ self.indiceDirectorioActual = \
+ int((pos[1]-int(175*scale+shift_y))//\
+ int(50*scale)) - 1 + \
+ paginaDirectorios*20
+ if self.indiceDirectorioActual == \
+ paginaDirectorios*20-1 and \
+ paginaAnteriorActiva: # pag. ant.
+ paginaDirectorios = paginaDirectorios-1
+ paginaSiguienteActiva = True
+ cambiarPagina = True
+ elif self.indiceDirectorioActual>\
+ paginaDirectorios*20-1:
+ self.paginaDir = paginaDirectorios
+ return
+ elif pos[1] > 800*scale + shift_y and \
+ pos[1] < 850*scale + shift_y: # acerca
+ self.pantallaAcercaDe()
+ else:
+ if pos[1] < 225*scale + shift_y + \
+ nDirectoriosCol2*50*scale or \
+ (paginaSiguienteActiva and \
+ pos[1]<775*scale+shift_y): # mapa
+ self.indiceDirectorioActual = \
+ int((pos[1]-int(225*scale+shift_y))//\
+ int(50*scale)) + \
+ paginaDirectorios*20 + 10
+ if self.indiceDirectorioActual == \
+ paginaDirectorios*20+9:
+ pass # ignorar; espacio vacio
+ elif self.indiceDirectorioActual == \
+ paginaDirectorios*20+20 and \
+ paginaSiguienteActiva: # pag. sig.
+ paginaDirectorios = \
+ paginaDirectorios + 1
+ paginaAnteriorActiva = True
+ cambiarPagina = True
+ elif self.indiceDirectorioActual<\
+ paginaDirectorios*20+20:
+ self.paginaDir = paginaDirectorios
+ return
+ elif pos[1] > 800*scale+shift_y and \
+ pos[1] < 850*scale+shift_y: # salir
+ sys.exit()
+ elif event.type == EVENTOREFRESCO:
+ pygame.display.flip()
+
def cargarImagen(self,nombre):
"""Carga una imagen y la escala de acuerdo a la resolucion"""
global scale, xo_resolution
@@ -409,8 +610,21 @@ class ConozcoUy():
CAMINOCOMUN,
CAMINOIMAGENES)
self.bicho = self.cargarImagen("bicho.png")
+ self.bichopestanas = self.cargarImagen("bichopestanas.png")
+ self.bichofrente = self.cargarImagen("bichofrente.png")
self.globito = self.cargarImagen("globito.png")
self.terron = self.cargarImagen("terron.png")
+
+#################### premio
+ self.nave = list()
+ self.nave.append(self.cargarImagen("nave1.png"))
+ self.nave.append(self.cargarImagen("nave2.png"))
+ self.nave.append(self.cargarImagen("nave3.png"))
+ self.nave.append(self.cargarImagen("nave4.png"))
+ self.nave.append(self.cargarImagen("nave5.png"))
+ self.nave.append(self.cargarImagen("nave6.png"))
+ self.nave.append(self.cargarImagen("nave7.png"))
+###################
# cargar sonidos
self.camino_sonidos = os.path.join(CAMINORECURSOS,
CAMINOCOMUN,
@@ -418,6 +632,8 @@ class ConozcoUy():
self.click = pygame.mixer.Sound(os.path.join(\
self.camino_sonidos,"junggle_btn045.wav"))
self.click.set_volume(0.2)
+ # cargar directorios
+ self.cargarListaDirectorios()
# cargar fuentes
self.fuente48 = pygame.font.Font(os.path.join(CAMINORECURSOS,\
CAMINOCOMUN,\
@@ -465,13 +681,49 @@ class ConozcoUy():
" XXX..XXX XXXXXXXX ",
" XXXXXX XXXXXX ",
" XXXX XXXX ")
- cursor = pygame.cursors.compile(datos_cursor)
- pygame.mouse.set_cursor((32,32), (1,1), *cursor)
+ self.cursor = pygame.cursors.compile(datos_cursor)
+ pygame.mouse.set_cursor((32,32), (1,1), *self.cursor)
+ datos_cursor_espera = (
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " XXXXXX XXXXXX XXXXXX ",
+ " XXXXXXXX XXXXXXXX XXXXXXXX ",
+ "XXXX..XXXX XXXX..XXXX XXXX..XXXX",
+ "XXX....XXX XXX....XXX XXX....XXX",
+ "XXX....XXX XXX....XXX XXX....XXX",
+ "XXX....XXX XXX....XXX XXX....XXX",
+ "XXXX..XXXX XXXX..XXXX XXXX..XXXX",
+ " XXXXXXXX XXXXXXXX XXXXXXXX ",
+ " XXXXXX XXXXXX XXXXX ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ")
+ self.cursor_espera = pygame.cursors.compile(datos_cursor_espera)
def cargarDirectorio(self):
"""Carga la informacion especifica de un directorio"""
- self.camino_imagenes = os.path.join(CAMINORECURSOS,CAMINOLAMINA)
- self.camino_datos = os.path.join(CAMINORECURSOS,CAMINOLAMINA)
+ self.camino_imagenes = os.path.join(CAMINORECURSOS,
+ self.directorio)
+ self.camino_datos = os.path.join(CAMINORECURSOS,
+ self.directorio)
self.fondo = self.cargarImagen("lamina.png")
self.cargarZonas()
self.cargarNiveles()
@@ -502,6 +754,9 @@ class ConozcoUy():
def correcto(self):
"""Muestra texto en el globito cuando la respuesta es correcta"""
global scale, shift_x, shift_y
+ self.pantalla.blit(self.nave[self.avanceNivel],
+ (int(XNAVE*scale+shift_x),
+ int(YNAVE*scale+shift_y)))
self.correctoActual = random.randint(1,self.numeroCorrecto)-1
self.mostrarGlobito([self.listaCorrecto[self.correctoActual]])
self.esCorrecto = True
@@ -522,10 +777,14 @@ class ConozcoUy():
respCorrecta = nivel.preguntaActual[1]
encontrado = False
for d in self.listaZonas:
- if d.nombre.startswith(respCorrecta):
+ if d.nombre == respCorrecta:
encontrado = True
break
if d.estaAca(pos):
+ d.mostrarNombre(self.pantalla,
+ self.fuente32,
+ COLORNOMBRE,
+ True)
return True
else:
return False
@@ -585,8 +844,8 @@ class ConozcoUy():
random.randint(1,self.numeroDespedidas)-1]\
.split("\\")
self.mostrarGlobito(self.lineasPregunta)
- pygame.time.set_timer(
- EVENTORESPUESTA,TIEMPORESPUESTA)
+ pygame.time.set_timer(EVENTORESPUESTA,
+ TIEMPORESPUESTA)
else: # pregunta siguiente
self.lineasPregunta = \
self.nivelActual.siguientePregunta(\
@@ -603,20 +862,51 @@ class ConozcoUy():
else: # volver a preguntar
self.mostrarGlobito(self.lineasPregunta)
elif event.type == EVENTOREFRESCO:
+ if self.estadobicho == ESTADONORMAL:
+ if random.randint(1,15) == 1:
+ self.estadobicho = ESTADOPESTANAS
+ self.pantalla.blit(self.bichopestanas,
+ (int(XBICHO*scale+shift_x),
+ int(YBICHO*scale+shift_y)))
+ elif random.randint(1,20) == 1:
+ self.estadobicho = ESTADOFRENTE
+ self.pantalla.blit(self.bichofrente,
+ (int(XBICHO*scale+shift_x),
+ int(YBICHO*scale+shift_y)))
+
+ elif self.estadobicho == ESTADOPESTANAS:
+ self.estadobicho = ESTADONORMAL
+ self.pantalla.blit(self.bicho,
+ (int(XBICHO*scale+shift_x),
+ int(YBICHO*scale+shift_y)))
+ elif self.estadobicho == ESTADOFRENTE:
+ if random.randint(1,10) == 1:
+ self.estadobicho = ESTADONORMAL
+ self.pantalla.blit(self.bicho,
+ (int(XBICHO*scale+shift_x),
+ int(YBICHO*scale+shift_y)))
+ elif self.estadobicho == ESTADODESPEGUE:
+ pass
pygame.display.flip()
def principal(self):
"""Este es el loop principal del juego"""
global scale, shift_x, shift_y
pygame.time.set_timer(EVENTOREFRESCO,TIEMPOREFRESCO)
+ self.paginaDir = 0
while 1:
+ self.pantallaDirectorios() # seleccion de mapa
+ pygame.mouse.set_cursor((32,32), (1,1), *self.cursor_espera)
+ self.directorio = self.listaDirectorios\
+ [self.indiceDirectorioActual]
self.cargarDirectorio()
+ pygame.mouse.set_cursor((32,32), (1,1), *self.cursor)
while 1:
# pantalla inicial de juego
self.elegir_directorio = False
self.pantallaInicial()
if self.elegir_directorio: # volver a seleccionar mapa
- sys.exit()
+ break
# dibujar fondo y panel
self.pantalla.blit(self.fondo, (shift_x, shift_y))
self.pantalla.fill(COLORPANEL,
@@ -625,11 +915,12 @@ class ConozcoUy():
self.pantalla.blit(self.bicho,
(int(XBICHO*scale+shift_x),
int(YBICHO*scale+shift_y)))
+ self.estadobicho = ESTADONORMAL
# mostrar pantalla
pygame.display.flip()
# ir al juego
self.jugarNivel()
-
+
def main():
juego = ConozcoUy()