0

I am making a zombie shooter game - I want to make player shoot multiple bullets at once but in my code I can only get it to shoot 1 bullet until it comes back. how do I make it so it keep shooting bullets if i am holding space bar?

here's the code till now:-

# ---------  Zombie Shooter Game --------- #
import pygame
from pygame.locals import *
import math

#variabls / constants
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

#pygame initialization!
pygame.init()

clock = pygame.time.Clock()
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))

pygame.display.set_caption('Zombie invader')

BACKGROUND_COLOR = (30,30,30)
screen.fill(BACKGROUND_COLOR)

class Bullet():
    def __init__(self,surface) -> None:
        self.screen = surface

        # -- bullet stats -- 
        self.color = (255,255,255)
        self.width = 5
        self.height = 5
        self.x = player.x
        self.y = player.y
        
        # -- bullet var --
        self.ready = True
        self.speed = 10
        self.ammo = 10
    
    def run(self):
        self.draw()
        self.update()
    
    def draw2(self):
        pass
    
    def reset(self):
        self.ready = True
        self.ammo += 1

    def draw(self):
        self.bullet = pygame.draw.rect(self.screen,self.color,pygame.Rect(self.x,self.y,self.width,self.height))
    
    def update(self):
        if self.ready == True:
            self.x = player.x + player.width/2 - self.width/2
            self.y = player.y + player.height/2 - self.height/2
        else:
            self.x += self.moveX
            self.y += self.moveY

        if "space" in main.keysPressed:
            self.shoot()
        
        if self.x > SCREEN_WIDTH or self.x < 0 or self.y > SCREEN_HEIGHT or self.y < 0:
            self.reset()
    
    def shoot(self):
        if self.ready == True:
            self.ready = False
            self.ammo -= 1
            self.targetX,self.targetY = main.mouseX,main.mouseY
            self.distanceX,self.distanceY = self.targetX - self.x,self.targetY - self.y
            self.angle = math.atan2(self.distanceX,self.distanceY)
            self.moveX,self.moveY = math.sin(self.angle) * self.speed,math.cos(self.angle) * self.speed
class Player():
    def __init__(self,surface) -> None:
        self.screen = surface

        # -- Player Stats --
        self.color = pygame.Color('dodgerblue1')
        self.width = 20
        self.height = 20
        self.x = SCREEN_WIDTH/2 - self.width/2
        self.y = SCREEN_HEIGHT/2 - self.height/2
    
    def run(self):
        #running all the Player function
        self.draw()
        self.move()
    def draw(self):
        #drawing player on the screen
        self.player = pygame.draw.rect(self.screen,self.color,pygame.Rect(self.x,self.y,self.width,self.height))
    
    def move(self):
        #moving player
        if "right" in main.keysPressed:
            self.x += 4
        if "left" in main.keysPressed:
            self.x -= 4
        if "up" in main.keysPressed:
            self.y -= 4
        if "down" in main.keysPressed:
            self.y += 4

class Main():
    def __init__(self,surface):
        self.screen = surface

        self.keysPressed = []
        self.mouseX, self.mouseY = pygame.mouse.get_pos()
    
    def run(self):
        #main loop
        running = True
        while running:

            self.screen.fill(BACKGROUND_COLOR)

            for event in pygame.event.get():
                if event.type == KEYDOWN:
                    if event.key == K_ESCAPE:
                        running = False

                    if event.key == K_RIGHT or event.key == K_d:
                        self.keysPressed.append("right")
                    if event.key == K_LEFT or event.key == K_a:
                        self.keysPressed.append("left")
                    if event.key == K_UP or event.key == K_w:
                        self.keysPressed.append("up")
                    if event.key == K_DOWN  or event.key == K_s:
                        self.keysPressed.append("down")
                    if event.key == K_SPACE:
                        self.keysPressed.append("space")
                        
                
                if event.type == KEYUP:
                    if event.key == K_RIGHT or event.key == K_d:
                        self.keysPressed.remove("right")
                    if event.key == K_LEFT or event.key == K_a:
                        self.keysPressed.remove("left")
                    if event.key == K_UP or event.key == K_w:
                        self.keysPressed.remove("up")
                    if event.key == K_DOWN  or event.key == K_s:
                        self.keysPressed.remove("down")
                    if event.key == K_SPACE:
                        self.keysPressed.remove("space")

                if event.type == pygame.QUIT:
                    running = False
            self.mouseX, self.mouseY = pygame.mouse.get_pos()
            clock.tick(60)

            player.run()
            bullet.run()
            pygame.display.update()

if __name__ == '__main__':
    player = Player(screen)
    bullet = Bullet(screen)
    main = Main(screen)

    main.run()

I have tried different way that were given but couldn't understand how they did it

0 Answers0