
Múltiples enemigos y aleatorios (random)
Capítulo 10: Creación de enemigos aleatorios, instanciación múltiple y random
En el capítulo de hoy vamos a ver cómo añadir enemigos o cualquier otro elemento de forma aleatoria.
Lo primero, para hacer cosas aleatorias necesitamos importar el módulo random
:
Creando la clase para instanciar enemigos
import random
Y creamos la clase de los enemigos.
Por cierto, aquí tienes la imagen de la nave enemiga: enemigo.png
class Enemigo(pygame.sprite.Sprite):
# Sprite del enemigo
def __init__(self):
# Heredamos el init de la clase Sprite de Pygame
super().__init__()
# Rectángulo (enemigos)
self.image = pygame.image.load("principal/enemigo.png").convert()
# Obtiene el rectángulo (sprite)
self.rect = self.image.get_rect()
Instanciamos un objeto de la clase Enemigo
.
enemigos = Enemigo()
También hay que añadirlo al grupo de sprites.
Si no sabes como hacerlo, en el vídeo puedes verlo.
sprites.add(enemigos)
Con esto ya aparecerá el primer enemigo del juego, el cuál, todavía no tiene ni movimiento ni nada, se instancia en la esquina superior izquierda, ya que no hemos especificado nada aún.

Ya sabes como hacer que aparezca en una posición determinada de la pantalla como hemos hecho con la clase Jugador
en capítulos anteriores.
Veamos cómo hacer que un enemigo se instancie en cualquier lugar de la pantalla aleatoriamente.
Esto lo podemos hacer utilizando el módulo random
de Python.
Ves a la clase Enemigo
, en ella, en el __init__
especifica la posición en 'x' e 'y'. Solo que en lugar de especificar un valor numérico con una posición fija, le vas a dar el siguiente valor:
self.rect.x = random.randrange(ANCHO - self.rect.width)
self.rect.y = random.randrange(ALTO - self.rect.height)
Se le ha especificado un randrange
de todo el ANCHO
y todo el ALTO
de la pantalla menos el propio tamaño del objeto, con lo que evitamos que aparezca algunas veces un trozo fuera de la pantalla.
Instanciación múltiple
Ahora cada enemigo que quieras que aparezca en el juego, te basta con crear el objeto y añadirlo al grupo de sprites.
El problema entra cuando tienes muchos enemigos, puede ser que quieras que se instancien varios objetos de una vez y no tener que repetir tanto código.
Esto es muy fácil de hacer con un bucle for
.
for x in range(50):
enemigo = Enemigo()
sprites.add(enemigo)
Con este bucle generaremos tantos enemigos iguales como los que le indiquemos al range
.

Instanciación aleatoria (random)
También podemos utilizar el módulo random
para crear instanciaciones aleatorias:
for x in range(random.randrange(5)):
enemigos = Enemigo()
sprites.add(enemigos)
Comentarios
Si te quedan dudas sobre el temario, sobre Python, Pygame o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.