Programar Juegos Arcade
con Python y PygameLab 14: Desplazando Sprites
En este taller practicaremos el uso de Pygame sprites, y separaremos las clases en archivos distintos, tal como vimos en los Capítulo 13 y Capítulo 14, respectivamente.
- Asegúrate de crear este programa dentro de su propia carpeta. Si lo empiezas a partir de la plantilla que tengo en BitBucket, entonces asegúrate de comenzar en la carpeta “Lab 14 - Sprite Collecting” y colocar todo dentro de ella.
- Comienza con una copia del programa que hiciste para el Taller 13: Recogiendo Sprites.Copia esos archivos dentro de la carpeta de este taller.
- Mueve la clase Bloque a un archivo nuevo. Mucha gente se econfunde entre el nombre de la biblioteca, el de la clase, y con el de la variable que apunta a la instancia del objeto. Los archivos de biblioteca deben estar siempre en minúsculas. Yo recomendaría llamar al archivo nuevo, el que colocaste en la clase Bloque, como bloque_biblioteca.py.
- Asegúrate de que tu programa se ejecuta normalmente. Ajusta las declaraciones import a tus necesidades. Recuerda que has antepuesto el nombre de la biblioteca al de la clase, no a la variable que apunta a la instancia de la clase. Por ejemplo: mi_perro = perro_biblioteca.Perro() y NO perro_biblioteca.mi_perro = Perro(),debido a que Perro es lo que está en la biblioteca, y no mi_perro.
- Define un clase BloqueBueno en un archivo nuevo, y haz que herede desde tu clase Bloque. Yo recomendaría usar como nombre de archivo bloquebueno_biblioteca.py para continuar con el estilo que iniciamos arriba. Recuerda, define la clase, no vayas a crear una instancia de ella. El bucle for que crea las instancias no se mueve.
- Añade un nuevo método update. (Probablemente no necesites el método __init__.) Haz que en cada actualización, el bloque bueno se desplace aleatoriamente hacia arriba, abajo, derecha o izquierda. (Cambia aleatoriamente self.rect.x y self.rect.y cada vez que la función update sea llamada. No es necesario un nuevo número cada vez, tan solo añade un número aleatorio entre -3 y 3, por ejemplo. Recuerda que random.randrange(-3,3) no generará un número aleatorio entre -3 y 3.)
- Modifica tu bucle for de forma que cree instancias de la clase BloqueBueno y no de la clase original, Bloque.
- Modifica el update en la lista de todos los sprites que tengas. Hazlo dentro del bucle principal de forma que los bloques de mantengan en movimiento, y no una sola vez en el comienzo del programa.
- Ejecuta el programa y comprueba que funciona correctamente.
- No pasa nada si los sprites se salen de la pantalla. Pero un error común es que los sprites se salgan por arriba y por la izquierda solamente. Si sucede esto, vuelve cuatro pasos hacia atrás y comprueba tu rango aleatorio.
- Haz una doble comprobación; asegúrate de que BloqueBueno hereda desde la clase Bloque. Si se hace correctamente, BloqueBueno no necesitará un método __init__ ya que lo obtendrá desde Bloque.
- Crea una clase BloqueMalo en un archivo nuevo y haz que herede desde la clase Bloque.
- Escribe una función update que haga que los bloques malos se desplacen hacia abajo de la pantalla, algo similar a lo que hicimos al final del Capítulo 13, sección 2. Vuelve a situar el bloque arriba cuando se haya caído de la ventana. Probablemente necesites un tipo de movimiento diferente. Mírate los ejemplos para que puedas obtener algunas ideas.
- Ejecuta el programa y comprueba que funciona correctamente.
- Comprueba doblemente que cada clase se encuentra dentro de su propio archivo.
- Si te sobra algo de tiempo, puedes pasarte por la sección de ejemplos de sprites, que hay en la página web del curso, y observar cómo rebotan o se mueven en círculos los sprites.
You are not logged in. Log in here and track your progress.
Copyright © 2017
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin