¿Cómo hacer un Game en Python?

¿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()

 
Ahora iniciaremos la ventana o superficie del dibujo con el tamaño de

640 por 480 el cual puedes cambiarlo a tu gusto:
 
ventana = pygame.display.set_mode((640,480))
 
Le ponemos un nombre a nuestra venta con la propiedad

set_caption:
 
pygame.display.set_caption(«Juego Pared»)
 
Nos toca adentrarnos un poco en la programación, crear un bucle while:

 
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»). 
 
jugando = True

while jugando:

    #Comprobamos los eventos

    #Comprobamos si se ha pulsado el botón de cierre de la ventana

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            jugando = False
 
 

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:  

ball = pygame.image.load(«beach-ball.png»)
 
La bola va a ser una imagen que tenemos en nuestro directorio raíz con el nombre ball.png 
que podemos crear o descargar, yo la descargue de una página, aquí el  link:
 
 
Hante tenemos que saber  como posicionamos y movemos un objeto dentro de nuestra ventana. Cada objeto se representa por el rectángulo que ocupa, y se posiciona en la ventana indicando la ordenada X (posición horizontal) y la coordenada Y (posición vertical). Tenemos que saber que el origen de coordenadas (0,0) se encuentra en la esquina superior izquierda.
 
 
Referencia de la imagen:  Gráficos-en-pygame
 
 
vamos a posicionar el rectángulo que ocupa la imagen que está almacenada en la variable ball para obtener el rectángulo creamos una nueva variable
ballrect que almacena la Clase  get_rect()
 
ballrect = ball.get_rect()
 

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)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

ventana.blit(ball, ballrect)
 
 
 

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.

flaticon.com

¡Ya tenemos nuestro Juego Pared!

Alguna sugerencia déjamela en los comentarios: 

Referencia de este artículo:

code.intef.es

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:

 if baterect.right > WIDTH:
    baterect.right = WIDTH
 if baterect.left < 0:
    baterect.left = 0

 

Hasta aquí dejo por cerrado este proyecto, si quieren que termine el juego dejame un comentarios.

  1. En cada ejecución la pelota tiene una velocidad distinta.
  2. Ahora la pelota al rebotar, puede cambiar el ángulo de rebote.
  3. Al tocar el borde inferior has perdido el juego.
  4. 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