0

So I been trying make bullets that every time my player press'es the space bar key, a bullet will shoot out but it is not working out for me. every time I run the code, something will not be working, like the bullets won't come back to me. I have tried following this tutorial but it is not working for me: https://techwithtim.net/tutorials/game-development-with-python/pygame-tutorial/projectiles/

Here is a short clip on what is going on: https://gyazo.com/a7d758d54cf52c8623efdf86f47d92d5

It does not look like anything, but I am pressing my space bar and nothing is happening. This is the error I get:

herog.append(herogun(playerman.x + playerman.width //2, round(playerman.y + playerman.height//2,(255,255,255))))
TypeError: 'tuple' object cannot be interpreted as an integer

This is were I am getting my problems:

if keys[pygame.K_SPACE]:
    if len(herog) <5:
        herogun.append(herogun(playerman.x + playerman.width //2, 
                               round(playerman.y + playerman.height//2,(255,255,255))))

This is my full code:

import pygame
pygame.init()

# Build The Screen
window = pygame.display.set_mode((700,500))

# Name Screen
pygame.display.set_caption("Noobs first Game")

bg = pygame.image.load("skybg1.png")
bg_shift = 0


# Class Player
class player:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.speed = 5
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("heroplane1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft=(self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        player_rect = self.ss1.get_rect(center = self.rect.center)
        player_rect.centerx += -7
        player_rect.centery += -6
        window.blit(self.ss1,player_rect)

# Class Enemy
class enemy:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.speed = 4
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemyplane1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy_rect = self.ss1.get_rect(center = self.rect.center)
        enemy_rect.centerx += -2
        enemy_rect.centery += -6
        window.blit(self.ss1,enemy_rect)


# Class Enemy2
class enemy2:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemyplane2.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy2_rect = self.ss1.get_rect(center = self.rect.center)
        enemy2_rect.centerx += -4
        enemy2_rect.centery += -6
        window.blit(self.ss1,enemy2_rect)


# Class Enemy3
class enemy3:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemyplane3.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy3_rect = self.ss1.get_rect(center = self.rect.center)
        enemy3_rect.centerx += -4
        enemy3_rect.centery += -6
        window.blit(self.ss1,enemy3_rect)



class herogun:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.speed = 2
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("herogun1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//11,self.ss1.get_height()//11))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy3_rect = self.ss1.get_rect(center = self.rect.center)
        enemy3_rect.centerx += -7
        enemy3_rect.centery += -2
        window.blit(self.ss1,enemy3_rect)


class enemygun:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemygun1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//11,self.ss1.get_height()//11))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy3_rect = self.ss1.get_rect(center = self.rect.center)
        enemy3_rect.centerx += -7
        enemy3_rect.centery += -2
        window.blit(self.ss1,enemy3_rect)




# Color
white = (255,255,255)

# Draw Player
playerman = player(5,250,90,40,white)

# For Enemy
enemy1 = enemy(400,100,90,40,white)
enemy4 = enemy(400,400,90,40,white)

# For Enemy2
enemy21 = enemy2(400,300,90,40,white)

# For Enemy3
ememy31 = enemy3(400,400,90,40,white)

gun1 = herogun(250,250,30,20,white)
gun2 = herogun(250,250,30,20,white)

egun1 = enemygun(250,300,30,20,white)

enemys = [enemy1,enemy4]
herog = [gun1,gun2]

# enemys
enemyGroup = pygame.sprite.Group()
level1 = [
"                     1",
"                     1",
"                     1",
"                     1",
"                     1",
"                     1",
"                     1",]


for iy, row in enumerate(level1):
    for ix, col in enumerate(row):
        if col == "1":
            new_enemy = enemy(ix*70,iy*70,90,40,(255,255,255))
            enemys.append(new_enemy)



# Redrawwinodw
def redrawwindow():
    window.fill((0,0,0))

    bg_width = bg.get_width()
    bg_offset = bg_shift % bg_width

    window.blit(bg, (-bg_offset, 0))
    window.blit(bg, (bg_width - bg_offset, 0))


    # Draw playerman
    playerman.draw()

    # Draw enemy
    for enemy in enemys:
        enemy.draw()

    # Draw enemy2
    enemy21.draw()

    # Draw enemy3
    ememy31.draw()

    # Draw herogun
    gun1.draw()

    # Draw enemygun
    egun1.draw()






# FPS Cnd Clock
fps = (30)
clock = pygame.time.Clock()


# Main Loop
run = True
while run:
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    for herogun in herog:
        if herogun.x < 700 and herogun.x > 0:
            herogun.x += herogun.speed
        else:
            herog.pop(herog.index(herogun))




    for enemy in enemys:
        enemy.x -= enemy.speed



    bg_shift += round(3/2)




    # Keys For Playerman
    keys = pygame.key.get_pressed()

    if keys[pygame.K_a] and playerman.x > playerman.speed:
        playerman.x -= playerman.speed


    if keys[pygame.K_d] and playerman.x < 260 - playerman.width - playerman.speed:
        playerman.x += playerman.speed

    if keys[pygame.K_w] and playerman.y > playerman.speed:
        playerman.y -= playerman.speed

    if keys[pygame.K_s] and playerman.y < 500 - playerman.height - playerman.speed:
        playerman.y += playerman.speed

    if keys[pygame.K_SPACE]:
        if len(herog) <5:
            herogun.append(herogun(playerman.x + playerman.width //2, round(playerman.y + playerman.height//2,(255,255,255))))

# Update And Other Sutff
    redrawwindow()


    pygame.display.update()

pygame.quit()
martineau
  • 119,623
  • 25
  • 170
  • 301
Window man
  • 125
  • 8
  • I got this error : Traceback (most recent call last): File "c:/Users/vinee/OneDrive/Desktop/test.py", line 272, in herogun.append(herogun(playerman.x + playerman.width //2, round(playerman.y + playerman.height//2,(255,255,255)))) AttributeError: 'herogun' object has no attribute 'append' – vgeorge Sep 08 '20 at 02:24
  • 2
    Your code is a big mess. It looks like a bunch of cut & pastes are mixed up. For example, in class `herogun.draw()`, you're referencing `enemy3_rect`. The line "causing" the problems is similiar - `herogun` has no `append()` function defined (and it's not a list), and you have stray brackets in this call too. You code needs a clean-up. Keep deleting code until whatever is left works, then slowly add parts back in, bit-by-bit. Test after each addition. – Kingsley Sep 08 '20 at 02:44
  • 1
    As others have suggested, there are multiple issues with your complete code dump. If you edit your question to include a [mcve], then it will be easier to specifically address your problems. Also, [here're some great answers](https://stackoverflow.com/questions/21567250/how-to-create-bullets-in-pygame) that show projectile creation. – import random Sep 08 '20 at 03:17

0 Answers0