1
2
3
4
5
6
7
8
9 mundo = None
10 bg = None
11
12 import sys
13 import utils
14 from mundo import Mundo
15 import actores
16 import grupo
17 import escena
18 import escenas
19 import fondos
20 import habilidades
21 import sonidos
22 import musica
23 import colores
24 import demos
25 import atajos
26 import interfaz
27 import interprete
28 import municion
29 from pilas.escena import Normal
30
31
32 import signal
33 signal.signal(signal.SIGINT, signal.SIG_DFL)
34
35 __doc__ = """
36 Módulo pilas
37 ============
38
39 Pilas es una biblioteca para facilitar el desarrollo
40 de videojuegos. Es útil para programadores
41 principiantes o para el desarrollo de juegos casuales.
42
43 Este módulo contiene las funciones principales
44 para iniciar y ejecutar la biblioteca.
45 """
46
47 -def iniciar(ancho=640, alto=480, titulo='Pilas', usar_motor='qtgl',
48 rendimiento=60, modo='detectar', gravedad=(0, -90), pantalla_completa=False,
49 permitir_depuracion=True, audio='phonon'):
50 """
51 Inicia la ventana principal del juego con algunos detalles de funcionamiento.
52
53 Ejemplo de invocación:
54
55 >>> pilas.iniciar(ancho=320, alto=240)
56
57 .. image:: images/iniciar_320_240.png
58
59 Parámetros:
60
61 :ancho: el tamaño en pixels para la ventana.
62 :alto: el tamaño en pixels para la ventana.
63 :titulo: el titulo a mostrar en la ventana.
64 :usar_motor: el motor multimedia a utilizar, puede ser 'qt', 'qtgl', 'qtsugar' o 'qtsugargl'.
65 :rendimiento: cantidad de cuadros por segundo a mostrar.
66 :modo: si se utiliza modo interactivo o no.
67 :gravedad: el vector de aceleracion para la simulacion de fisica.
68 :pantalla_completa: si debe usar pantalla completa o no.
69 :permitir_depuracion: si se desea tener habilidatas las funciones de depuracion de las teclas F5 a F12
70
71 """
72
73 global mundo
74
75 if not esta_inicializada():
76 motor = _crear_motor(usar_motor, permitir_depuracion, audio)
77
78 if motor:
79 mundo = Mundo(motor, ancho, alto, titulo, rendimiento, gravedad, pantalla_completa)
80 mundo.gestor_escenas.cambiar_escena(Normal())
81
82 if _usa_interprete_lanas():
83 mundo.motor.ventana.show()
84 else:
85 mundo.motor.modificar_ventana(ancho, alto, titulo, pantalla_completa)
86 escena_actual().fisica.definir_gravedad(*gravedad)
87
88
90 "Indica si la biblioteca pilas ha sido inicializada con pilas.iniciar()"
91 global mundo
92 return isinstance(mundo, Mundo)
93
94
95 -def iniciar_con_lanzador(ancho=640, alto=480, titulo='Pilas',
96 rendimiento=60, modo='detectar', gravedad=(0, -90), imagen="asistente.png",
97 permitir_depuracion=True):
98 """Identica a la función iniciar, solo que permite al usuario seleccionar
99 el motor multimedia y el modo de video a utilizar.
100
101 Esta función es útil cuando se quiere distribuir un juego y no se conoce
102 exáctamente el equipo del usuario.
103 """
104 import lanzador
105
106 usar_motor, pantalla_completa, audio = lanzador.ejecutar(imagen, titulo)
107 iniciar(ancho, alto, titulo, usar_motor, rendimiento, modo, gravedad, pantalla_completa, permitir_depuracion, audio)
108
109
111 """Abre una ventana que permite iniciar pilas graficamente.
112
113 Las opciones que ofrece son "leer el manual" (si esta disponible),
114 "abrir un interprete", "explorar los ejemplos" etc.
115
116 Esta ventana se ha diseñado para mostrarse a los nuevos usuarios
117 de pilas, por ejemplo cuando eligen abrir pilas desde el icono principal.
118 """
119 import asistente
120 asistente.ejecutar()
121
123 """Pone en funcionamiento las actualizaciones y dibujado.
124
125 Esta función es necesaria cuando se crea un juego
126 en modo ``no-interactivo``."""
127 mundo.ejecutar_bucle_principal(ignorar_errores)
128
130 """Finaliza la ejecución de pilas y cierra la ventana principal."""
131 mundo.terminar()
132
133 -def ver(objeto, imprimir=True, retornar=False):
134 """Imprime en pantalla el codigo fuente asociado a un objeto."""
135 return utils.ver_codigo(objeto, imprimir, retornar)
136
141
143 """Genera instancia del motor multimedia en base a un nombre.
144
145 Esta es una función interna y no debe ser ejecutada
146 excepto por el mismo motor pilas."""
147
148 if usar_motor in ['qt', 'qtgl', 'qtwidget', 'qtsugar', 'qtsugargl']:
149 from motores import motor_qt
150
151 if _usa_interprete_lanas():
152 usar_motor = 'qtsugar'
153
154 motor = motor_qt.Motor(usar_motor, permitir_depuracion, audio)
155 else:
156 print "El motor multimedia seleccionado (%s) no esta disponible" %(usar_motor)
157 print "Las opciones de motores que puedes probar son 'qt', 'qtgl', 'qtwidget', 'qtsugar' y 'qtsugargl'."
158 motor = None
159
160 return motor
161
163 "Retorna True si se ha iniciado pilas desde lanas"
164 import os
165 return os.environ.has_key('lanas')
166
168 """Elimina todos los actores y vuelve al estado inicial."""
169 mundo.reiniciar()
170
171 -def avisar(mensaje, retraso=5):
172 """Emite un mensaje en la ventana principal.
173
174 Este mensaje aparecerá en la parte inferior de la pantalla durante
175 5 segundo, por ejemplo:
176
177 >>> pilas.avisar("Use la tecla <esc> para terminar el programa")
178 """
179 actores.TextoInferior(mensaje, autoeliminar=True, retraso=retraso)
180
182 """Abre un cargador de ejemplos con varios códigos de prueba.
183
184 Ejemplo:
185
186 >>> pilas.abrir_cargador()
187
188 El cargador de ejemplos se ve de esta forma:
189
190 .. image:: images/cargador.png
191 """
192
193 try:
194 import ejemplos
195 ejemplos.ejecutar()
196 except ImportError:
197 print "Lo siento, no tienes instalada la extesion de ejemplos."
198 print "Instale el paquete 'pilas-examples' para continuar."
199
200 return []
201
203 """Abre un intérprete interactivo de python con una ventana.
204
205 Esta función se ejecuta cuando un usuario escribe::
206
207 pilas -i
208
209 en una consola del sistema.
210 """
211 interprete.main(parent, do_raise)
212
213 -def log(*parametros):
215
216 interpolar = utils.interpolar
217
220
223
226
229
230
231
232 from evento import ProxyEventos
233 eventos = ProxyEventos()
234