Desarrollo de videojuegos con Python y Pygame

  • Nivel:
    • Bachillerato
  • Edición:
    • 2021 / 2022

Docente: Antonio Camps Camps

Curso: 2º de Bachillerato

Asignatura: Tecnologías de la Información y la Comunicación II

Objetivos de la propuesta

Se parte de un proyecto a nivel de Centro que se ha titulado La máquina del tiempo. Cada nivel educativo trabajará un momento histórico: Prehistoria, Edad Antigua, Edad Media, Moderna y Contemporánea. En este documento, se presenta la parte relativa a la Edad Antigua, más concretamente, Egipto.

Con esta propuesta se han desarrollado algunos de los objetivos específicos y estándares de aprendizaje de la asignatura Tecnologías de la Información y la Comunicación II, descritos a continuación 

Objetivos específicos: 

  1. Valorar las posibilidades que ofrecen las tecnologías de la información y la comunicación y las repercusiones que supone usarlas. 
  2. Identificar en cada momento la información y los recursos que se necesitan, así como el lugar donde encontrarlos sabiendo que la sociedad del conocimiento es cambiante, y por tanto saber adaptarse a nuevas herramientas y modelos. 
  3. Buscar y seleccionar recursos disponibles en la red para incorporarlos a las producciones propias, valorando la importancia de respetar la autoría de estos recursos y la conveniencia de recurrir a fuentes que autorizan expresamente su uso. 
  4. Utilizar periféricos para capturar y digitalizar imágenes, textos y sonidos y utilizar las principales funcionalidades de los programas de tratamiento digital de la imagen fija, el sonido y la imagen en movimiento y su integración para crear pequeñas producciones multimedia con finalidad expresiva, comunicativa o ilustrativa. 

Estándares de aprendizaje: 

  1. Conocer y entender la sintaxis y la semántica de la construcción de un lenguaje de programación. 
  2. Elaborar programas en un lenguaje de programación determinado.
  3. Utilizar entornos de programación para diseñar que resuelvan problemas concretos.
  4. Conocer y utilizar las estructuras de almacenamiento. 
  5. Depurar programas informáticos y optimizarlos. 

Desarrollo de las sesiones

Sesión 1:

Introducción a Pygame y creación de la ventana. Se ha explicado y analizado la librería, su instalación y su uso creando la ventada y bucle principal del juego, para proceder a crear las constantes principales del juego. 

Estudiando creando una ventana en Pygame.

Sesión 2:

Introducción a los sprites: creación, posicionamiento y movimiento. Se han explicado los conceptos relativos a los sprites en Pygame y se han creado los sprites de la nave y el disparo de la nave. Además, se ha programado el movimiento de la nave con el teclado. 

Estudiante programando los sprites

Sesión 3:

Movimientos automáticos: se ha programado el movimiento automático del disparo de la nave. 

Grupo de sprites: se ha explicado el objeto sprite.Group y con él se han creado 10 alienígenas como enemigos. Estos se han colocado de manera dinámica con un bucle for y calculando su posición y espacio entre ellos. De esta manera se pueden añadir más “enemigos” de una manera fácil. 

Sesión 4:

Se ha programado el movimiento de los alienígenas en horizontal y vertical, respetando el diseño del juego original donde los enemigos se mueven en bloque hacia un lado (horizontalmente) hasta llegar al límite de la pantalla, momento en que hacen un movimiento en vertical hacia abajo e invierten el movimiento horizontal. 

Colisiones entre sprites. Se ha desarrollado la parte de código necesario para controlar las colisiones entre un sprite (el disparo de la nave) y un grupo de sprites (los alienígenas), eliminando el alienígena colisionado y ubicando el disparo a su posición original (fuera de zona de juego). 

Estudiante programando el movimiento de los alienígenas en horizontal y las colisiones entre sprites.

Sesión 5  

1.¿Qué dificultades has encontrado durante la implementación de tu propuesta? ¿Qué ha funcionado mejor? 

Definición de los estados del juego. Mediante constantes y variables se definen los diferentes estados del juego: jugando, ganado o perdido. Con el uso de expresiones condicionales se controlan los diferentes estados del juego. 

Textos en el juego. Se incluye el texto de puntuación en el juego, así como los mensajes finales al haber ganado el juego o producirse un Game Over. 

Pantalla de Game Over

Sesión 6 

Se agregan alienígenas al juego, en concreto cuatro filas formadas por diez alienígenas diferentes cada una, empleando las cuatro imágenes proporcionadas.  

Disparos alienígenas. Cada cierto tiempo, un alienígena escogido de forma aleatoria efectuará un disparo. 

Imagen en la que se muestra la pantalla con las cuatro filas de alienígenas.

Sesión 7 

Control de niveles. Al matar a todos los alienígenas se sube de nivel, volviendo a dibujar todos los enemigos y aumentado su velocidad de movimiento. 

Sesión 8 

Música y sonidos. Se agrega una música para todo el juego, y algunos sonidos (disparo, alienígena muerto, …) 

Sesión 9 

Escudos. Se han creado cuatro escudos para proteger a la nave. Cada escudo está formado por cuatro partes que se van rompiendo cuando los disparos de los alienígenas colisionan con ellos. 

Imagen de la pantalla en la que se muestran los alienígenas y los escudos creados,

Evaluación

Se ha realizado una sola evaluación final, puntuando cada juego por el desarrollo de sus partes. Desde el inicio de la propuesta se han establecido los siguientes objetivos y su puntuación: 

Tabla en la que se presentan los diferentes objetivos y su puntuación correspondiente.

Reflexión sobre las dificultades encontradas

La propuesta se ha desarrollado sin problemas.  Esta, se ha desarrollado con un grupo de cuatro estudiantes de 2º de Bachillerato con intenciones de estudiar grados relacionados con la informática (ciencia de datos, desarrollo de videojuegos, etc), que ya tenían conocimientos previos de programación y con los que durante todo el curso hemos dedicado dos horas semanales de la asignatura a la algoritmia y programación con Python. La propuesta se ha planteado como un proyecto final, donde los únicos nuevos conceptos eran los relacionados con el desarrollo de videojuegos y la librería PyGame. No han tenido ningún problema en aprender los nuevos conceptos y con pequeñas explicaciones, resolución de dudas, y la documentación oficial de la librería ha sido suficiente.Los objetivos de plantear como proyecto final el desarrollo de videojuegos eran dos: la motivación de los estudiantes y trabajar la complejidad algorítmica propia de los videojuegos mediante la abstracción y descomposición. Estos dos objetivos se han logrado de forma exitosa. La motivación de los alumnos ha sido excelente y han disfrutado mucho con este proyecto final. Se ha trabajado muy bien estableciendo un desarrollo por partes, investigando y desarrollando de manera individual y autónoma, planteando las dudas que han surgido y resolviéndolas entre todo el grupo. 

Para mejorar la implementación de esta actividad, se podrían dedicar más horas al desarrollo de videojuegos dentro de la asignatura, haciendo algunas prácticas conjuntas más sencillas, como el aprendizaje de la librería PyGame o el desarrollo en general de videojuegos y de un proyecto final donde cada alumno desarrollaría de manera libre y autónoma su propio juego, estableciendo unas pautas mínimas. De esta forma, cada estudiante podría desarrollar un juego diferente elegido por el mismo. Teniendo en cuenta que los videojuegos tienen bastante complejidad algorítmica y suelen requerir de la mayoría de los elementos de programación, se podría plantear como elemento principal de la asignatura. 

Para profundizar

Código base de la primera versión desarrollada por el docente para explicar todos los conceptos básicos de la librería Pygame y el desarrollo de videojuegos. Cada alumno ha ido modificando el código y desarrollando su propia versión: https://github.com/tcamps/spaceinvaders_v0 

Vídeo resumen del juego desarrollado por los cuatro alumnos: 

https://www.youtube.com/watch?v=HSlQrSHlAA4&feature=youtu.be