Zak Chaudhary
Zak Chaudhary

Reputation: 81

How would I fix the problems I am having when trying to fire a bullet?

I am getting an error message when trying to shoot a bullet relating to init() missing a positional argument 'shots'

I am clueless on how to fix this (new to pygame), help would definitely be appreciated.

import pygame
pygame.init()

window = pygame.display.set_mode((650, 630))

pygame.display.set_caption("PeaShooters")

avatar = pygame.image.load('Sprite 1 Red.png')
background = pygame.image.load('Bg.jpg')
white = (255, 255, 255)

class player(object):
    def __init__(self, x, y, width, height, shots):
        self.x = 300
        self.y = 500
        self.width = 40
        self.height = 60
        self.vel = 9



def drawGrid():
    window.blit(background, (0,0))
    window.blit(avatar, (av.x, av.y))
    pygame.draw.line(window, white, [50,50], [50, 600], 5)
    pygame.draw.line(window, white, [50,50], [600, 50], 5)
    pygame.draw.line(window, white, [600,600], [600, 50], 5)
    pygame.draw.line(window, white, [50,600], [600, 600], 5)
    pygame.draw.line(window, white, [50,450], [600, 450], 5)
    for bullet in bullets:
        bullet.draw(window)
    pygame.display.update()


class shots(object):
    def __init__(self, x, y, radius, colour):
        self.x = x
        self.y = y
        self.radius = radius
        self.colour = colour
        self.vel = 8

    def draw(self, win):
        pygame.draw.circle(win, self.colour, (self.x,self.y), self.radius)

av = player(300, 500, 40, 60)
bullets = []
running = True
while running:
    pygame.time.delay(100) 

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

    for bullet in bullets:
        if bullet.x < 500 and bullet.x > 0:
            bullet.x += bullet.vel
        else:
            bullets.pop(bullets.index(bullet))

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w] and av.y > 440:
        av.y -= av.vel

    if keys[pygame.K_a] and av.x > 65:
        av.x -= av.vel

    if keys[pygame.K_s] and av.y < 535:
        av.y += av.vel

    if keys[pygame.K_d] and av.x < 530:
        av.x += av.vel

    if keys[pygame.K_SPACE]:
        if len(bullets) < 5:
            bullets.append(shots(round(av.x + av.width//2)), round(av.y + av.height//2), 6, (0,0,0))


    drawGrid()

window.blit(avatar, (x,y))

pygame.quit()

Bullet expected to be fired, it is not, also I want to have my bullet fired vertically, I am guessing I just have to switch the x's into y's but just making sure.

Upvotes: 1

Views: 33

Answers (1)

Mahmoud Elshahat
Mahmoud Elshahat

Reputation: 1959

regarding your error, you have your player class should take 5 arguments and you gave it 4 args while initializing:

your class should be:

class player(object):
    def __init__(self, x, y, width, height, shots):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = shots

and your instance should be:

av = player(300, 500, 40, 60, 9)

Upvotes: 2

Related Questions