Accueil Technologie

Comment déplacer des ennemis de différentes manières avec PyGame


L’un des éléments clés d’un bon jeu vidéo est la présence d’ennemis. Qu’il s’agisse de zombies, d’extraterrestres ou d’autres joueurs, les ennemis peuvent rendre un jeu plus difficile et plus excitant.


Dans PyGame, vous pouvez facilement programmer une variété de comportements de mouvement des ennemis, comme suivre le joueur, se déplacer de manière aléatoire ou prendre des chemins spécifiques.

Créer un jeu simple

Commencez par créer un jeu simple dans lequel un joueur se déplace horizontalement et verticalement. Si le joueur touche un ennemi, il meurt.

Vous pouvez trouver le code complet dans ce repo GitHub.

Commencez par importer le module PyGame nécessaire et initialisez-le.

 import pygame

pygame.init()

Ensuite, configurez l’écran et créez les objets joueur et ennemi à l’aide de la fonction pygame.Rect() fonction.

 # Set up the screen
screen = pygame.display.set_mode((800, 600))

# Set up the colors
black = (0, 0, 0)
white = (255, 255, 255)

# Set up the player rectangle and the enemy object
player = pygame.Rect(350, 500, 50, 50)
enemy = pygame.Rect(350, 0, 50, 50)

Ensuite, créez une boucle de jeu qui s’exécute jusqu’à ce que le joueur entre en collision avec l’ennemi ou quitte le jeu. Vérifiez également qu’il n’y a pas de collision entre le joueur et l’ennemi, et dessinez les objets du jeu sur l’écran.

 # Set up the game loop
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Fill the screen with white
    screen.fill(white)

    # Move the player rectangle
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        player.x -= 5

    if keys[pygame.K_RIGHT]:
        player.x += 5

   if keys[pygame.K_UP]:
       player.y -= 5

   if keys[pygame.K_DOWN]:
       player.y += 5

    # Check for collision between player and enemy
    if player.colliderect(enemy):
        running = False

    # Draw the player rectangle and the enemy object on the screen
    pygame.draw.rect(screen, black, player)
    pygame.draw.rect(screen, black, enemy)

    # Update the screen
    pygame.display.update()

# Quit the game
pygame.quit()

Diriger les ennemis vers le joueur

Pour déplacer l’ennemi vers le joueur, vous devez calculer la distance entre les deux, ce que vous pouvez faire en utilisant le théorème de Pythagore. Vous pouvez ensuite utiliser cette distance pour déterminer la vitesse de déplacement de l’ennemi et sa direction vers le joueur.

Pour mettre cela en œuvre, créez une variable de vitesse et utilisez-la pour mettre à jour la position de l’ennemi vers le joueur.

 # Calculate the distance between the enemy and the player
distance_x = player.x - enemy.x
distance_y = player.y - enemy.y
distance = (distance_x ** 2 + distance_y ** 2) ** 0.5

# Move the enemy toward the player
speed = 2

if distance != 0:
    enemy.x += speed * distance_x / distance
    enemy.y += speed * distance_y / distance

Randomiser le mouvement de l’ennemi à l’écran

Vous pouvez également faire en sorte que l’ennemi se déplace de manière aléatoire sur l’écran pour rendre le jeu plus difficile.

Pour ce faire, générez une direction aléatoire pour le déplacement de l’ennemi à l’aide du module random de Python. Utilisez le module choice() pour sélectionner une direction aléatoire dans une liste de directions dans lesquelles l’ennemi peut se déplacer. La position de l’ennemi est ensuite mise à jour en fonction de la direction choisie.

 import random

# Move the enemy randomly on the screen
direction = random.choice(['left', 'right', 'up', 'down'])

if direction == 'left':
    enemy.x -= 5
elif direction == 'right':
    enemy.x += 5
elif direction == 'up':
    enemy.y -= 5
elif direction == 'down':
    enemy.y += 5

Mouvement ennemi basé sur la proximité

Dans certains jeux, l’ennemi ne se déplace que lorsque le joueur est proche de lui. Pour ce faire, vous pouvez calculer la distance entre l’ennemi et le joueur.

Si la distance est inférieure à une certaine valeur, l’ennemi se déplace vers le joueur. Cela rend le jeu plus stratégique et oblige le joueur à être plus prudent dans ses mouvements.

 # Move the enemy toward the player if the player is close
speed = 2

if distance < 300:
    if distance != 0:
        enemy.x += speed * distance_x / distance
        enemy.y += speed * distance_y / distance

L’ennemi évite les attaques du joueur

Vous pouvez également faire en sorte que l’ennemi évite les mouvements du joueur. L’ennemi essaiera d’éviter le joueur en se déplaçant perpendiculairement à sa position.

Pour ce faire, calculez le vecteur unitaire vers le joueur en utilisant la distance_x et la distance_y calculées précédemment. Ensuite, calculez le vecteur perpendiculaire pour déplacer l’ennemi perpendiculairement au vecteur unitaire. Enfin, calculez le produit du point du vecteur perpendiculaire et du vecteur unitaire pour déterminer la direction du mouvement de l’ennemi.

Pour mettre en œuvre cette méthode, ajoutez l’extrait de code ci-dessous après le calcul de la distance.

 speed = 2

if distance < 400:
    if distance != 0:
        # Calculate the unit vector toward the player
        unit_vector_x = distance_x / distance
        unit_vector_y = distance_y / distance

        # Calculate the perpendicular vector
        perpendicular_vector_x = -unit_vector_y
        perpendicular_vector_y = unit_vector_x

        # Calculate the dot product of the perpendicular vector and the
        # unit vector
        dot_product = perpendicular_vector_x * unit_vector_x
           + perpendicular_vector_y * unit_vector_y

        # Move the enemy perpendicular to the unit vector
        if dot_product > 0:
            enemy.x += speed * perpendicular_vector_x
            enemy.y += speed * perpendicular_vector_y
        else:
            enemy.x -= speed * perpendicular_vector_x
            enemy.y -= speed * perpendicular_vector_y

Avec ces modifications, l’ennemi essaiera d’éviter de s’approcher trop près du joueur. Cela rend le jeu plus difficile et plus amusant.

Ajout de fonctionnalités supplémentaires

Vous pouvez également ajouter des fonctions supplémentaires à votre jeu pour le rendre plus stimulant. Par exemple, vous pouvez ajouter plusieurs ennemis qui se déplacent aléatoirement sur l’écran, des obstacles que le joueur doit éviter en se déplaçant, des bonus qui améliorent les capacités du joueur, etc.

Vous pouvez utiliser le module Clock pour définir la fréquence d’images de votre jeu et le rendre plus fluide. Voici l’implémentation :

 # Add multiple enemies that move randomly on the screen
enemies = []

for i in range(5):
    enemy = pygame.Rect(random.randint(0, 750), random.randint(0, 550), 50,
       50)

    enemies.append(enemy)

# Add obstacles that the player needs to avoid
obstacle = pygame.Rect(200, 250, 50, 50)

# Set up the game loop
clock = pygame.time.Clock()
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Fill the screen with white
    screen.fill(white)

    # Move the player rectangle
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        player.x -= 5
    if keys[pygame.K_RIGHT]:
        player.x += 5
    if keys[pygame.K_UP]:
        player.y -= 5
    if keys[pygame.K_DOWN]:
        player.y += 5

    # Move the enemies randomly on the screen
    for enemy in enemies:
        direction = random.choice(['left', 'right', 'up', 'down'])

        if direction == 'left':
            enemy.x -= 5
        elif direction == 'right':
            enemy.x += 5
        elif direction == 'up':
            enemy.y -= 5
        elif direction == 'down':
            enemy.y += 5

        # Check for collision between player and enemy
        if player.colliderect(enemy):
            running = False

    # Draw the player rectangle, the enemy objects, and the obstacle on
   # the screen
    pygame.draw.rect(screen, black, player)

    for enemy in enemies:
        pygame.draw.rect(screen, black, enemy)

    pygame.draw.rect(screen, black, obstacle)

    # Update the screen
    pygame.display.update()

    # Set the frame rate of the game
    clock.tick(60)

# Quit the game
pygame.quit()

Améliorez votre expérience de jeu avec Enemies

En ajoutant des ennemis aux mouvements, comportements et capacités uniques, vous pouvez rendre vos jeux plus attrayants et plus stimulants pour les joueurs. Les joueurs devront élaborer des stratégies et adapter leur jeu pour vaincre les différents types d’ennemis. Cela peut accroître l’engagement, améliorer la valeur de relecture et inciter les joueurs à revenir.

Leave your vote

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires

Log In

Forgot password?

Don't have an account? Register

Forgot password?

Enter your account data and we will send you a link to reset your password.

Your password reset link appears to be invalid or expired.

Log in

Privacy Policy

Add to Collection

No Collections

Here you'll find all collections you've created before.

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x

Newsletter

inscrivez vous pour recevoir nos actualités

Actualités, astuces, bons plans et cadeaux !