Python Arcade: agregar enemigos

En este artículo, aprenderemos cómo podemos agregar enemigos en arcade.

Agregar enemigos

Para agregar enemigos a nuestro juego vamos a seguir los siguientes pasos:

  • Primero, crearemos una variable para almacenar el sprite enemigo.

Sintaxis:

 self.enemy = None
  • Después de eso, crearemos una variable más para almacenar la velocidad del enemigo.

Sintaxis:

self.enemy_move = velocity
  • Guarda nuestro sprite enemigo en la variable enemigo.

Sintaxis:

self.enemy = arcade.Sprite("path",1)
  • Establecer las coordenadas iniciales.

Sintaxis:

self.enemy.center_x = value
self.enemy.center_y = value
  • Agrega el sprite enemigo en la escena.

Sintaxis:

self.scene.add_sprite("Enemy", self.enemy)
  • Mueve al enemigo cambiando la coordenada x.

Sintaxis:

self.enemy.center_x += self.enemy_move
  • Comprueba si hay colisiones entre el jugador y el enemigo.

Sintaxis:

enemigo_colisión = arcade.check_for_collision_with_list(

            self.player_sprite, self.scene.get_sprite_list(“Enemigo”)

        )

  • Si están chocando, elimine el sprite del jugador.

Sintaxis:

para el enemigo en enemigo_collide:

      self.player_sprite.remove_from_sprite_lists()

Funciones utilizadas:

  • draw_text(): esta función se usa para dibujar texto en la pantalla usando la etiqueta de Pyglet.

Sintaxis: arcade.draw_text(texto, x, y, color, tamaño, ancho, alineación, nombre_fuente)

Parámetros:

texto: Texto que queremos mostrar

x : coordenada x

y : coordenada y

color : color del texto

tamaño : Tamaño de la fuente

ancho : Ancho del texto

align : Alineación del texto

font_name : Nombre de la fuente

  • Camera(): la clase Camera se usa para controlar la ventana gráfica visible.

Sintaxis: arcade.Camera(ancho, alto, ventana)

Parámetros:

ancho: ancho de la ventana gráfica

altura: altura de la ventana gráfica

ventana: Ventana para asociar con esta cámara

  • Escena(): una clase que representa un objeto de escena.

Sintaxis: arcade.Scene(sprite_lists, name_mapping)

Parámetros:

sprite_lists: una lista de objetos SpriteList

name_mapping: un diccionario de objetos SpriteList

  • PhysicsEnginePlatformer(): motor de física simplista, utilizado para la plataforma.

Sintaxis: arcade.PhysicsEnginePlatformer(player_sprite, plataformas, gravedad, escaleras)

Parámetros:

player_sprite: sprite del jugador

plataformas: los sprites por los que no puede moverse

gravedad: aceleración hacia abajo por cuadro

ladders: Escaleras en las que el usuario puede subir

Sprites usados:

PLATAFORMA

JUGADOR

ENEMIGO

En el siguiente ejemplo, vamos a crear una clase MainGame(). Dentro de esta clase primero, vamos a inicializar algunas variables para velocidad, cámara, puntaje, nivel, enemigo, sprite enemigo y sprite del jugador, luego crearemos 6 funciones dentro de esta clase.

  • on_draw(): Dentro de esta función, usaremos nuestra cámara y dibujaremos la escena y el texto de nuestra partitura en la pantalla.
  • setup(): en esta función, inicializaremos nuestra cámara y el objeto de escena, luego cargaremos los sprites de nuestro reproductor y plataforma, luego cargaremos nuestro sprite enemigo e inicializaremos las coordenadas x e y iniciales. Después de eso, llamaremos a la función PhysicsEnginePlatformer().
  • on_update(): en esta función, actualizaremos las coordenadas x del sprite, la cámara y el motor de física del jugador. También agregaremos nuestra variable agent_move en las coordenadas x del sprite enemigo. Luego comprobaremos la colisión entre el enemigo y el jugador. Y si el jugador choca con el enemigo, eliminaremos el sprite del jugador.
  • on_key_press() y on_key_release(): En esta función cambiaremos el valor de la variable velocidad según la tecla del teclado que se presione o se suelte.
  • camera_move(): En esta función, moveremos nuestra cámara de acuerdo a la posición actual de nuestro jugador.

Ejemplo: Agregar enemigo

Python3

# Importing arcade module
import arcade
  
# Creating MainGame class
class MainGame(arcade.Window):
    def __init__(self):
        super().__init__(600, 600,
                         title="Player Movement")
  
        # Initializing a variable to store
        # the velocity of the player
        self.vel_x = 0
  
        # Creating variable for Camera
        self.camera = None
  
        # Creating variable to store current score
        self.score = 0
  
        # Creating variable to move the enemy
        self.enemy_move = 5
  
        # Creating variable for enemy sprite
        self.enemy = None
  
        # Creating scene object
        self.scene = None
  
        # Creating variable to store player sprite
        self.player = None
  
        # Creating variable for our game engine
        self.physics_engine = None
  
    # Creating on_draw() function to draw on the screen
    def on_draw(self):
        arcade.start_render()
  
        # Drawing the text
        arcade.draw_text('Score :- '+str(self.score), 
                         self.player_sprite.center_x - 500 / 2,
                         self.player_sprite.center_y + 200,
                         arcade.color.WHITE, 30, 5000, 'left')
  
        # Using the camera
        self.camera.use()
          
        # Drawing our scene
        self.scene.draw()
  
    def setup(self):
         # Initialize Scene object
        self.scene = arcade.Scene()
          
        # Using Camera() function
        self.camera = arcade.Camera(600, 600)
  
        # Loading enemy sprite
        self.enemy = arcade.Sprite("Enemy.png", 1)
  
        # Initializing the starting coordinates
        self.enemy.center_x = 500
        self.enemy.center_y = 110
  
        # Adding the enemy sprite in the scene
        self.scene.add_sprite("Enemy", self.enemy)
  
        # Creating different sprite lists
        self.scene.add_sprite_list("Player")
        self.scene.add_sprite_list("Platforms",
                                   use_spatial_hash=True)
  
        # Adding player sprite
        self.player_sprite = arcade.Sprite("Player.png", 1)
  
        # Adding coordinates for the center of the sprite
        self.player_sprite.center_x = 64
        self.player_sprite.center_y = 90
  
        # Adding Sprite in our scene
        self.scene.add_sprite("Player", self.player_sprite)
  
        # Adding platform sprite according to level
        platform = arcade.Sprite(f"Platform.png", 1)
          
        # Adding coordinates for the center of the platform
        platform.center_x = 300
        platform.center_y = 32
        self.scene.add_sprite("Platforms", platform)
  
        # Creating Physics engine
        self.physics_engine = arcade.PhysicsEnginePlatformer(
            self.player_sprite, self.scene.get_sprite_list("Platforms"), 0.5
        )
  
    # Creating on_update function to
    # update the x coordinate
    def on_update(self, delta_time):
  
        # Moving the position of enemy
        self.enemy.center_x += self.enemy_move
  
        # Changing the direction of enemy movement
        if self.enemy.center_x > 500 or self.enemy.center_x < 160:
            self.enemy_move *= -1
  
        # Checking if the enemy is colliding with player or not
        enemy_collide = arcade.check_for_collision_with_list(
            self.player_sprite, self.scene.get_sprite_list("Enemy")
        )
  
        # Looping through each enemy and removing the player
        # if colliding
        for enemy in enemy_collide:
            # Remove the coin
            self.player_sprite.remove_from_sprite_lists()
  
        # Changing x coordinate of player
        self.player_sprite.center_x += self.vel_x * delta_time
          
        # Updating the physics engine to move the player
        self.physics_engine.update()
  
        # Calling the camera_move function
        self.camera_move()
  
    # Creating function to change the velocity
    # when button is pressed
    def on_key_press(self, symbol, modifier):
  
        # Checking the button pressed
        # and changing the value of velocity
        if symbol == arcade.key.LEFT:
            self.vel_x = -300
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 300
        elif symbol == arcade.key.UP:
            if self.physics_engine.can_jump():
                self.player_sprite.change_y = 15
  
    # Creating function to change the velocity
    # when button is released
    def on_key_release(self, symbol, modifier):
  
        # Checking the button released
        # and changing the value of velocity
        if symbol == arcade.key.LEFT:
            self.vel_x = 0
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 0
  
    def camera_move(self):
  
        # Getting the x coordinate for the center of camera
        screen_x = self.player_sprite.center_x - \
            (self.camera.viewport_width / 2)
  
        # Getting the y coordinate for the center of camera
        screen_y = self.player_sprite.center_y - \
            (self.camera.viewport_height / 2)
  
        # Moving the camera
        self.camera.move_to([screen_x, screen_y])
  
  
# Calling MainGame class
game = MainGame()
game.setup()
arcade.run()

Producción:

Matar al enemigo

Ahora queremos matar al enemigo cuando el jugador salte encima de él. Para ello, comprobaremos si el otro jugador inferior es igual al superior del enemigo o no. Si es igual, eliminaremos el sprite de capa.

  • Para esto primero, almacenaremos la coordenada de la parte inferior del jugador en una variable.

Sintaxis:

x = int(self.player_sprite.center_y – 14)

  • Del mismo modo la coordenada de la parte superior del enemigo en una variable diferente.

Sintaxis:

y = int(self.enemy.center_y + 25)

  • Luego, si x e y son iguales y el enemigo y el jugador chocan, eliminaremos nuestro sprite enemigo.

Sintaxis:

si x == y:

  self.enemy.remove_from_sprite_lists()

Ejemplo: Matar a un enemigo usando Arcade

Python3

# Importing arcade module
import arcade
  
# Creating MainGame class
class MainGame(arcade.Window):
    def __init__(self):
        super().__init__(600, 600,
                         title="Player Movement")
  
        # Initializing a variable to store
        # the velocity of the player
        self.vel_x = 0
  
        # Creating variable for Camera
        self.camera = None
  
        # Creating variable to store current score
        self.score = 0
  
        # Creating variable to move the enemy
        self.enemy_move = 2
  
        # Creating variable for enemy sprite
        self.enemy = None
  
        # Creating scene object
        self.scene = None
  
        # Creating variable to store player sprite
        self.player = None
  
        # Creating variable for our game engine
        self.physics_engine = None
  
    # Creating on_draw() function to draw on the screen
    def on_draw(self):
        arcade.start_render()
  
        # Drawing the text
        arcade.draw_text('Score :- '+str(self.score), 
                         self.player_sprite.center_x - 500 / 2,
                         self.player_sprite.center_y + 200,
                         arcade.color.WHITE, 30, 5000, 'left')
  
        # Using the camera
        self.camera.use()
          
        # Drawing our scene
        self.scene.draw()
  
    def setup(self):
        
         # Initialize Scene object
        self.scene = arcade.Scene()
          
        # Using Camera() function
        self.camera = arcade.Camera(600, 600)
  
        # Loading enemy sprite
        self.enemy = arcade.Sprite("Enemy.png", 1)
  
        # Initializing the starting coordinates
        self.enemy.center_x = 500
        self.enemy.center_y = 110
  
        # Adding the enemy sprite in the scene
        self.scene.add_sprite("Enemy", self.enemy)
  
        # Creating different sprite lists
        self.scene.add_sprite_list("Player")
        self.scene.add_sprite_list("Platforms",
                                   use_spatial_hash=True)
  
        # Adding player sprite
        self.player_sprite = arcade.Sprite("Player.png", 1)
  
        # Adding coordinates for the center of the sprite
        self.player_sprite.center_x = 64
        self.player_sprite.center_y = 90
  
        # Adding Sprite in our scene
        self.scene.add_sprite("Player", self.player_sprite)
  
        # Adding platform sprite according to level
        platform = arcade.Sprite(f"Platform.png", 1)
          
        # Adding coordinates for the center of the platform
        platform.center_x = 300
        platform.center_y = 32
        self.scene.add_sprite("Platforms", platform)
  
        # Creating Physics engine
        self.physics_engine = arcade.PhysicsEnginePlatformer(
            self.player_sprite, self.scene.get_sprite_list("Platforms"), 0.5
        )
  
    # Creating on_update function to
    # update the x coordinate
  
    def on_update(self, delta_time):
  
        # Moving the position of enemy
        self.enemy.center_x += self.enemy_move
  
        # Changing the direction of enemy movement
        if self.enemy.center_x > 500 or self.enemy.center_x < 160:
            self.enemy_move *= -1
  
        # Checking if the enemy is colliding with player or not
        enemy_collide = arcade.check_for_collision_with_list(
            self.player_sprite, self.scene.get_sprite_list("Enemy")
        )
  
        # Looping through each enemy and removing the player if colliding
        for enemy in enemy_collide:
  
            # Checking the top of enemy and bottom of player
            x = int(self.player_sprite.center_y - 14)
            y = int(self.enemy.center_y + 25)
            if x == y:
                self.enemy.remove_from_sprite_lists()
            else:
                # Remove the coin
                self.player_sprite.remove_from_sprite_lists()
  
        # Changing x coordinate of player
        self.player_sprite.center_x += self.vel_x * delta_time
          
        # Updating the physics engine to move the player
        self.physics_engine.update()
  
        # Calling the camera_move function
        self.camera_move()
  
    # Creating function to change the velocity
    # when button is pressed
    def on_key_press(self, symbol, modifier):
  
        # Checking the button pressed
        # and changing the value of velocity
        if symbol == arcade.key.LEFT:
            self.vel_x = -300
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 300
        elif symbol == arcade.key.UP:
            if self.physics_engine.can_jump():
                self.player_sprite.change_y = 15
  
    # Creating function to change the velocity
    # when button is released
    def on_key_release(self, symbol, modifier):
  
        # Checking the button released
        # and changing the value of velocity
        if symbol == arcade.key.LEFT:
            self.vel_x = 0
        elif symbol == arcade.key.RIGHT:
            self.vel_x = 0
  
    def camera_move(self):
  
        # Getting the x coordinate for the center of camera
        screen_x = self.player_sprite.center_x - \
            (self.camera.viewport_width / 2)
  
        # Getting the y coordinate for the center of camera
        screen_y = self.player_sprite.center_y - \
            (self.camera.viewport_height / 2)
  
        # Moving the camera
        self.camera.move_to([screen_x, screen_y])
  
  
# Calling MainGame class
game = MainGame()
game.setup()
arcade.run()

Producción:

Publicación traducida automáticamente

Artículo escrito por imranalam21510 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *