¿Cómo hacer un juego en Python?
Este post se lo dedico a mi primo Ernestico que es un crack jugando videojuegos, creo que desde los 3 años ya jugaba en la consola de Nintendo y ahora está a punto de terminar el instituto y no sabe qué estudiar, quizás este tutorial le pueda servir para que estudie programación y pueda crear los juegos que tanto le gustan.
Crearemos un juego clásico unos de los más conocidos, que estoy seguro que muchos han jugado cuando eran niño, al menos yo “Pared” usaremos el lenguaje de programación Python y la librería Pygame.
Lo primero debemos tener instalado en nuestro ordenador Python si nos es así, aquí te dejo el link para que te lo descargues:
https://www.python.org/downloads
También un editor de código como Visual Studio Code o Anaconda que los puedes descargar en los siguientes link e instalar:
https://code.visualstudio.com/download
https://www.anaconda.com
¡Todo listo, manos al teclado!.
Creamos una carpeta en nuestro escritorio con el nombre Mis juegos dentro de ella creamos un fichero y le ponemos como nombre Pared.py y lo guardamos con extensión .py que por los general son tipo de archivos de Python, pero para ir probando el código por partes, yo voy a usar Jupiter Lab guardes ese archivo como Pared.ipynb y VSC detecta que es un tipo de archivo de ipynb y te da la opción para instalarlo:
https://jupyter.org
Comenzamos instalando la librería de PyGame
Con el comando:
pip install pygame
importamos la librería pygame
import pygame
También necesitamos importar la librería del sistema operativo y random
import sys, random
Iniciaremos el módulo de pygame
pygame.init()
Nota: “Un bucle while permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición (es decir, mientras la condición tenga el valor True”).
La parte central del programa el bucle que repite las siguientes instrucciones:
El método pygame.event.get() nos devuelve una lista con los posibles eventos que han sucedido en el juego. Usamos una instrucción for para comprobar esta lista de eventos.
En este ejemplo, comprobamos el evento de pulsar el botón de cierre de la ventana. Esto ocurre cuando el tipo de evento (event.type) es igual al valor pygame.QUIT. Si esta condición ocurre se modificará la variable jugando que hará que el bucle principal del juego termine.
En el bucle principal se actúa sobre los elementos de la ventana. En nuestro caso no tenemos ninguno.
Se borran los posibles elementos que tengamos, pintando la pantalla de un color: ventana.fill((0, 0, 255)). en este caso usando la notación RGB lo pintamos de azul.
Volvemos a pintar los elementos en su nueva posición: pygame.display.flip(), controlando en todo momento que la frecuencia de refresco de la imagen sea de 60 fps.
Salimos del bucle principal se ha terminado el programa: pygame.quit().
Ahora vamos a comprobar si lo que hemos hecho esta bien, ejecutando la celda. Si logras que te muestre la ventana, ya tienes el 50 % de tu juego.
Añadimos la pelota a nuestro juego
Vamos a crear una variable en python que almacena nuestra bola o pelota, en realidad puedes ponerle el nombre que tu quieras, yo le puese ball:

Inicializamos una lista con dos valores, que llamamos speed. El primer valor representa el desplazamiento horizontal, y el segundo el desplazamiento vertical. Lo utilizaremos para mover la pelota.
Posicionamos la pelota en el origen de coordenadas:
ballrect.move_ip(0,0).
Dentro del bucle del juego: movemos la pelota con los datos guardados en la lista speed
ballrect = ballrect.move(speed)
Y comprobamos si ha llegado a algún borde:
Podemos obtener la posición del rectángulo que representa la pelota con ballrect.left (posición izquierda), ballrect.rigth (posición derecha), ballrect.top (posición superior) y ballrect.bottom (posición inferior).
Si la posición izquierda es menor que 0 o la posición derecha es mayor que la anchura de la ventana ventana.get_width() habremos tocado los bordes laterales.
En esta situación cambiamos el signo del primer dato guardado en speed, es decir, si se movía a la derecha ahora se moverá a la izquierda, y al contrario.
Si la posición superior es menor que cero (0) la posición inferior es mayor que la altura de la ventana ventana.get_height() habremos tocado los bordes superior o inferior.
En esta situación cambiamos el signo del segundo dato guardado en speed, es decir, si se movía hacía abajo ahora se moverá hacia arriba, y al contrario.
Finalmente volvemos a pintar la pelota en la ventana

Añadimos el bate a nuestro juego
Vamos a añadir otro objeto a nuestro juego: un bate, que controlaremos con el cursor derecho e izquierdo. La pelota al tocar el bate rebotará.
Ahora el objeto bate se crea a partir de otra imagen:
bate = pygame.image.load(“bate.png”)
Obtenemos el rectángulo que ocupa:
baterect = bate.get_rect()
Lo colocamos en su posición inicial:
baterect.move_ip(240,450)
Dentro del bucle, comprobamos si hemos pulsado alguna tecla.
keys = pygame.key.get_pressed()
Obtenemos una lista con las teclas que se han pulsado.
Si hemos pulsado el cursor izquierdo
if keys[pygame.K_LEFT]
Movemos el bate tres posiciones a la izquierda
baterect = baterect.move(-3,0)
Si hemos pulsado el cursor derecho
if keys[pygame.K_RIGHT]
Movemos el bate tres posiciones a la derecha
baterect = baterect.move(3,0)
Finalmente, volvemos a pintar el bate en la ventana
ventana.blit(bate, baterect)
Referencia del bate, pero lo que encontré fue un ladrillo, pero sirve igual.
¡Ya tenemos nuestro Juego Pared!
Alguna sugerencia déjamela en los comentarios:
Referencia de este artículo:
Después estar unos días estudiando, como hacer juegos con pygame casi que me hecho un experto, si viste el video Demo más arriba podrás apreciar que el ladrillo se pasa de los bordes de la venta, el código lo copie tal cual de la referencia code.intef.es solo agreque mi pelota y mi ladrillo.
Este error se puede resolver agregando unas pocos lineas de código después de la instrucción que comprobamos si hemos pulsado alguna tecla:
keys = pygame.key.get_pressed()
aquí te dejos el código que resuelve el problema, que el ladrillo no se salga de los bordes de la ventana:
Hasta aquí dejo por cerrado este proyecto, si quieren que termine el juego dejame un comentarios.
- En cada ejecución la pelota tiene una velocidad distinta.
- Ahora la pelota al rebotar, puede cambiar el ángulo de rebote.
- Al tocar el borde inferior has perdido el juego.
- Al perder el juego se pone el texto “Game Over”.
El video en YouTube:
Todo el código lo dejo en el siguiente link: Demo juego Pared Moneytoday.es y en Github