Maison  >  Article  >  développement back-end  >  Comment implémenter le tir de balles à l'aide de la barre d'espace dans Pygame ?

Comment implémenter le tir de balles à l'aide de la barre d'espace dans Pygame ?

DDD
DDDoriginal
2024-10-31 20:47:29617parcourir

How do I implement Bullet Firing Using the Spacebar in Pygame?

Tir une balle avec la barre d'espace

Pour mettre en œuvre le tir avec la barre d'espace, nous suivons quelques étapes essentielles :

  1. Créer une liste de balles :Établissez une liste pour stocker les instances de balles, car il s'agira de plusieurs projectiles tirés à la fois.
  2. Initialisation des balles : Initialiser puces en créant des instances dans la liste, en spécifiant leur position et d'autres attributs.
  3. Mettre à jour la position de la balle : Dans chaque image, mettez à jour la position de chaque balle en fonction de sa vitesse et de sa direction.
  4. Supprimer les puces hors écran : Déterminez si des puces ont quitté l'écran et éliminez-les de la liste car elles ne sont plus visibles.
  5. Gérer l'événement clé de la barre d'espace : Lorsque la touche de la barre d'espace est enfoncée, déclenchez le mécanisme de tir en ajoutant une nouvelle puce à la liste.

Voici à quoi ressemble le code mis à jour avec ces modifications :

import pygame, os

os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.init()

win = pygame.display
d = win.set_mode((1200, 600))
clock = pygame.time.Clock()

class Player:
    def __init__(self, x, y, height, width):
        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.speed = 2

    def draw(self):
        pygame.draw.rect(d, (0, 0, 0), (self.x, self.y, self.width, self.height))

    def move_left(self):
        self.x -= self.speed

    def move_right(self):
        self.x += self.speed


class Bullet:
    def __init__(self, x, y):
        self.radius = 10
        self.speed = 10
        self.x = x
        self.y = y

    def update(self):
        self.y -= self.speed#
    
    def draw(self):
        pygame.draw.circle(d, (255, 0, 0), (self.x, self.y), self.radius)


bullets = []
p = Player(600, 500, 50, 30) 

run = True
while run:
    clock.tick(100)
        
    # Handel events
    for event in pygame.event.get():
        if event.type ==  pygame.QUIT:
            run = False
        if event.type ==  pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullets.append(Bullet(p.x+p.width//2, p.y))

    # Update objects
    keys = pygame.key.get_pressed()        
    if keys[pygame.K_LEFT]:
        p.move_left()
    if keys[pygame.K_RIGHT]:
        p.move_right()
    for b in bullets:
        b.update()
        if b.y < 0:
            bullets.remove(b)

    # Clear display
    d.fill((98, 98, 98))

    # Draw scene
    for b in bullets:
        b.draw()
    p.draw()

    # Update display
    win.update()

Ce code gère le tir de balle déclenché par la barre d'espace en douceur et résout les problèmes mentionnés dans la demande d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn