distintas (que no se superpongan), investigar sus métodos con el comando help y cambiar los tipos de fondos. Tipos de actores posibles: • Aceituna • Banana • Bomba • Manzana • Nave • Ovni • Pacman • Pingu • Pelota • Shaolin • Tortuga • Zanahoria Tipos de fondos posibles: • Césped • Galaxia • Nubes • Noche • Pasto • Tarde
que queramos realizar alguna operación matemática, unir textos o simplemente validar con un si o con un no o un cierto o falso, necesitamos distintos tipos de datos y formas de operar con ellos.
Cadena “Hola Mundo” float Flotante 3.141592 bool Booleano True o False list Lista [4,”Hola”,3.14] dict Diccionario {“10 del Barsa”:”Messi”,”5 del Real”:”Kroos”}
b? r = 5 == 3 # r es False != ¿Son distintos a y b? r = 5 != 4 # es True < ¿Es a menor que b? r = 5 <3 # r es False > ¿Es a mayor que ? r = 5 > 3 # r es True
datos y operadores. ¿De que forma los podríamos utilizar? Sí un numero es menor a cero (numero<0), es negativo y si no lo es, es cero o positivo. Sí tu nombre es Juan (nombre == “Juan”), entonces tu nota es 7 Sí la bomba está encendida (bomba.encendid a==true), entonces explotará.
algo más complicado. ¿Qué haríamos si quisiéramos que se ejecutaran unas ciertas órdenes en el caso de que la condición no se cumpliera? Ejemplo: if numero < 0: print “Negativo” else: print “Positivo”
construcción más que ver, que es la que hace uso del elif. ¿Qué pasa en los ejemplos anteriores si queremos saber si es un cero? Ejemplo: if numero < 0: print “Negativo” elif numero > 0: print “Positivo” else: print “Cero”
de código dependiendo de ciertas condiciones, los bucles nos permiten ejecutar un mismo fragmento de código un cierto número de veces, mientras se cumpla una determinada condición. • while (mientras) • for … in
por lo que vamos a utilizar un tipo secuencia, como es la lista, para nuestro ejemplo. Ejemplo: secuencia = [“uno”, “dos”, “tres”] for elemento in secuencia: print elemento
realizando una animación en donde aparezcan en pantalla 10 monos que aumenten el doble de su tamaño y vuelvan a su tamaño original, unas 2 veces en 2 segundos cada uno, sin superponerse uno con otro. El método del mono para aumentar su tamaño es: mono.escala = [valor escala inicial, valor escala final], tiempo Nota: No te limites al enunciado prueba cosas, usa tu imaginación, diviértete.
grupo de actores al mismo, como por ejemplo un grupo de bombas, que podemos hacer explotar al mismo tiempo, un puñado de cajas que caigan encima de algún actor, etc..
referencia bombas nos servirá para controlar a todas las bombas al mismo tiempo. • Esta referencia es parecida a una lista de python normal. Así que podríamos contar cuantas bombas hay en la escena, o recorrer el grupo haciendo algo: >>> print "hay", len(bombas), "bombas" hay 5 bombas >>> for una_bomba in bombas: . print una_bomba.x, una_bomba.y
un poquito diferente a los grupos de las listas de python, es que los grupos te permiten alterar a varios actores al mismo tiempo con mas facilidad. • Por ejemplo, imagina que quieres hacer que todas las bombas aparezcan en el centro de la ventana. Podrías hacer algo cómo esto: >>>bombas.x = 0
las bombas a reaccionar como si fueran pelotas, es decir, que reboten e interactúen con la aceleración gravitatoria: bombas.aprender(pilas.habilidades.RebotarComoPelota) • Ahora tendrás algo mucho mas interesante, un montón de actores rebotando entre sí. **Un consejo, la gravedad del escenario se puede modificar usando una sentencia como la que sigue: pilas.atajos.definir_gravedad(200, 0) donde el primer argumento es la gravedad horizontal, en este caso 200 es hacia la derecha, y el segundo argumento es la gravedad vertical, que suele ser de -90 en general.
un grupo desde cero e ir agregando actores en él. • Esto se puede hacer fácilmente, e incluso abre las puertas a que puedas mezclar actores de distintas especies. • Para crear un grupo vacío tienes que crear un objeto de la clase Grupo: mi_grupo = pilas.grupo.Grupo() • y luego, para añadir actores al grupo puedes usar el método append e indicar la referencia del actor que quieres agregar: bomba = pilas.actores.Bomba() pelota = pilas.actores.Pelota() mi_grupo.append(bomba) mi_grupo.append(pelota)
tocar una bomba con el puntero del mouse y darle clic explotan todas juntas. Nota: No te limites al enunciado prueba cosas, usa tu imaginación, diviértete.
asociado que realiza una serie de tareas y devuelve un valor. • Las funciones se declaran de la siguiente forma: def mi_funcion(param1, param2): print param1 print param2 • Es decir, la palabra clave def seguida del nombre de la función y entre paréntesis los argumentos separados por comas. • A continuación, después de los dos puntos tendríamos las líneas de código que conforman el código a ejecutar por la función.
escribiría: mi_funcion(“hola”, 2) • Es decir, el nombre de la función a la que queremos llamar seguido de los valores que queramos pasar como parámetros entre paréntesis. • La asociación de los parámetros y los valores pasados a la función se hace normalmente de izquierda a derecha: como a param1 le hemos dado un valor “hola” y param2 vale 2, mi_funcion imprimiría hola en una línea, y a continuación 2.
al llamar a la función tiene que coincidir con el número de parámetros que la función acepta según la declaración de la función. En caso contrario Python se quejará: >>> mi_funcion(“hola”) Traceback (most recent call last): File “<stdin>”, line 1, in <module> TypeError: mi_funcion() takes exactly 2 arguments (1 given)
situando un signo igual después del nombre del parámetro y a continuación el valor por defecto: def imprimir(texto, veces = 1): print veces * texto • Si no indicamos un valor para el segundo parámetro se imprimirá una sola vez la cadena que le pasamos como primer parámetro: >>> imprimir(“hola”) Hola • Si se le indica otro valor, será este el que se utilice: >>> imprimir(“hola”, 2) holahola
colocamos un último parámetro para la función cuyo nombre debe precederse de un signo *: def varios(param1, param2, *otros): for val in otros: print otros varios(1, 2) varios(1, 2, 3) varios(1, 2, 3, 4) **Esta sintaxis funciona creando una tupla (de nombre otros en el ejemplo).
con **, en cuyo caso en lugar de una tupla se utilizaría un diccionario. Las claves de este diccionario serían los nombres de los parámetros indicados al llamar a la función y los valores del diccionario, los valores asociados a estos parámetros. • En el siguiente ejemplo se utiliza la función items de los diccionarios, que devuelve una lista con sus elementos, para imprimir los parámetros que contiene el diccionario. def varios(param1, param2, **otros): for i in otros.items(): print i varios(1, 2, tercero = 3)
se utiliza la palabra clave return: def sumar(x, y): return x + y print sumar(3, 2) • Como vemos esta función tan sencilla no hace otra cosa que sumar los valores pasados como parámetro y devolver el resultado como valor de retorno. • También podríamos pasar varios valores que retornar a return. def f(x, y): return x * 2, y * 2 a, b = f(1, 2)
se comporte de distintas formas dependiendo lo que reciba por parámetros. Ejemplo hacer que el mono, grite, hable o salte, dependiendo si recibe, comida, un reto o un saludo. Nota: No utilices el ejemplo del enunciado prueba cosas se creativo, ten en cuenta que esto lo usaras siempre de una forma similar a la planteada en este punto.
contacto. • Por ejemplo, cuando un personaje como Pacman toca a un Fantasma se produce una colisión. Para programar colisiones en pilas tienes seguir unos pocos pasos. • Tienes que pensar “qué” quieres hacer cuando se produce una colisión. • Escribir una función de respuesta a la colisión. • y, por último, decirle a pilas qué actores son colisionables entre sí. **Ten en cuenta que cada actor tiene un atributo llamado radio_de_colision, que se representa como un círculo de color verde cuando pulsas la tecla F12 sobre la ventana.
la pantalla de su juego: banana = pilas.actores.Banana() banana.x = 100 mono = pilas.actores.Mono() • Ahora, para poder mover al mono, podemos enseñarle una habilidad: mono.aprender(pilas.habilidades.Arrastrable)
queremos que hagan los dos actores al entrar en contacto: def el_mono_come(mono, banana): mono.sonreir() banana.eliminar() y por último crear dos listas de actores y decirle a pilas que asocie la función de mas arriba con la colisión: bananas = [banana] pilas.escena_actual().colisiones.agregar(mono, bananas, el_mono_come) Perfecto. Ahora, si mueves al mono por la pantalla con el mouse, podrá comer bananas.
agregarlos a la lista que usamos antes, por ejemplo: b = pilas.actores.Banana() b.x = -100 bananas.append(b) • Ahora intenta nuevamente mover al mono... sí, las colisiones seguirán funcionando, cualquier objeto que agregues a la lista de bananas será alimento del mono... • Bien, ¿y si queremos llenar la pantalla de comida?, una forma sencilla es ejecutar lo siguiente: bananas += pilas.atajos.fabricar(pilas.actores.Banana, 20)
donde un mono se alimente de las bananas en pantalla y sonría cada vez que se coma una, moviéndolo al mono con el teclado y las bananas estén en suspensión por la pantalla. Nota: No te limites al enunciado prueba cosas, usa tu imaginación, diviértete.
muy importante tener en algunos conceptos importantes: • Si bien uno observa pelotas y cajas, en realidad, internamente son solo cuadrados y circunferencias. • Lo que ocurre en pantalla son dos cosas, por una lado vemos imágenes con aspecto de caja o pelota, y por el otro se nos oculta una simulación entre polígonos mucho mas primitiva y simple. • Cada uno de esos actores está asociado a una figura geométrica, la física en realidad se da en un nivel muy primitivo de figuras (círculos y cuadrados). **Intenta lo siguiente, agrega actores de todo tipo y pulsa la tecla F11 y observarás varias lineas de color rojo indicando las figuras de los cuerpos. Las lineas rojas indican polígonos que el motor de física puede controlar.
no estén contenidos en la pantalla, y sean un poco mas libres, podrías eliminar las paredes: pilas.escena_actual().fisica.eliminar_paredes() • o incluso podrías eliminar el suelo: pilas.escena_actual().fisica.eliminar_suelo() **Pero recuerda que los objetos que no se ven en la pantalla de todas maneras estarán ahí. Una buena idea es eliminarlos ni bien los dejas de usar.
es de (0, -90), esto significa que los objetos “caen” hacia abajo, y lo hacen con una aceleración de 90 mts/s^2 (metros sobre segundos cuadrados). Hay dos formas de cambiar la gravedad del escenario. • Podrías cambiar la gravedad en cualquier momento invocando a la función definir_gravedad indicando la nueva gravedad, por ejemplo: pilas.atajos.definir_gravedad(200, 0) • O directamente especificar la gravedad cuando inicias pilas, por ejemplo: pilas.fisica.definir_gravedad(90, 90) **Ten en cuenta que el primer argumento es la aceleración horizontal y la segunda componente es la aceleración vertical.
en el motor de pilas engine modifica los radios de colisión de los distintos actores (vaca, bomba y estrella) juega con esto y relaciónalo con los niveles de dificultad generalmente incluidos en los juegos que tu conoces. Nota: No te limites al enunciado prueba cosas, usa tu imaginación, diviértete.