дописать функцию shot(), произвести "выстрел"

я хочу создать "пулю", которая будет появляться в координатах равным координатам user_x, user_y и устремляться вверх.

import pygame 
import random 

pygame.init() 

display_width = 594 #ширина 
display_height = 600 #высота 

display = pygame.display.set_mode((display_width, display_width)) 

user_width = 56 
user_height = 60 
user_x = 269 
user_y = display_height - user_height - 25 
speed = 3

"""set_mode = режим работы"""

display = pygame.display.set_mode((display_width, display_width))# 2 скобки

bullet = pygame.image.load("bullet.jpg") 

def run_game(): 
game = True 
land = pygame.image.load("disp.jpg")
hero = pygame.image.load("ship_img.jpg")
bullet = pygame.image.load("bullet.jpg")
"""выход из игры"""
while game:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    keys = pygame.key.get_pressed()
    if keys[pygame.K_a]:
        left_swipe()
    if keys[pygame.K_d]:
        right_swipe()
    if keys[pygame.K_SPACE]:
        shot()
    """blit вставление"""
    """fill заполнение"""
    bullet_y = user_y - user_width
    display.blit(land, (0, 0))
    display.blit(hero, (user_x, user_y))
    return_to()

    pygame.display.update()


"""движениe""" 

def left_swipe(): 
    global user_x 
    user_x -= speed

def right_swipe(): 
    global user_x 
    user_x += speed

"""выход за экран""" 

def return_to(): 
    global user_x 
    if user_x > display_width:
        user_x = -54 
    if user_x < - 55:
        user = display width 

def shot():
"""должен производить выстрел"""

run_game()

Ответы (1 шт):

Автор решения: IgorG

Я предлагаю вам создать класс этих самых пуль и добавить метод, отвечающий за их движение:

class Bullet(pygame.sprite.Sprite):
    def __init__(self, image_file, location, speed):
        self.image = pygame.image.load(image_file)
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = location
        self.speed = speed

    def move(self):
        self.rect = self.rect.move(self.speed)

Затем нужно создать группу этих самых снарядов с помощью pygame.sprite.Group(), вот так:

bullets = pygame.sprite.Group()

Затем в функции shot() создавать новый объект-пулю и добавлять его в группу:

bullet = Bullet(pygame.image.load("ваш_спрайт"), [user_x, user_y], [0, -2]) #сюда можно любую скорость
bullets.add(bullet)

И наконец, в главном цикле, отрисовывать и двигать их:

for b in bullets:
    display.blit(b.image, b.rect)
    b.move()
→ Ссылка