Curso de videojuegos con Pygame

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.

Sprite de enemigo en Pygame

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.

Múltiples enemigos

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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.