Alex
Alex

Reputation: 961

Pygame deleting an object in a list

I just started programming in OOP style last week when deciding to make a small game. But now I seem to be stuck. I'll explain what I have so far:

When the player hits a button, a bullet object is created next to the player and the bullet object is added to the bullets[] list. The bullet then travels horizontally across the screen in the designated direction. If the bullet collides with a player or a wall, it is removed from the bullets[] list. So far, so good.

Now I just cant seem to figure out how to remove the bullet from the bullets[] list when it leaves the screen (screen is defined between 0 and xmax). Also, after I remove the bullet from the list, should I also remove the object itsself, or is this done automatically?

Code so far:

    class BULLET(object):

#Constructor for the bullet, bullets are stored into array 'bullets'
#   The direction is stored to keep track of which player fired the bullet
def __init__(self,location,direction,color):
    self.rect = pg.Rect(location[0],location[1],xmax/160,xmax/160)
    self.bullet_type="normal"
    self.direction=direction
    self.color=color
    bullets.append(self)

#Moves the bullet horizontally across the screen, in the specified direction
#   The move function also checks for collision with any walls or players
#   The move function removes the bullet object from the list and destroys it
#   when it leaves the left or right side of the screen
def move(self,bullet_speed):
    self.rect.x += bullet_speed

    for wall in walls:
        if self.rect.colliderect(wall.rect):
            index=wall.rect.collidelist(bullets)
            del bullets[index]
            #Do I need to delete the object too? or just the list item?

    for player in players:
        if self.rect.colliderect(player.rect):
            index=player.rect.collidelist(bullets)
            if player.immune_timer <= 0:
                del bullets[index]
                player.immunity(500)
                player.life -= 1

    if self.rect.centerx > xmax or self.rect.centerx <0:
        #This is where I would like this instance of the bullet object to be deleted
        #   and to have the object removed from the bullets[] list 

Upvotes: 1

Views: 1113

Answers (1)

A.J. Uppal
A.J. Uppal

Reputation: 19264

What I suggest you do is in your main loop:

bullets = [bullet for bullet in bullets if 0 < bullet.rect.centerx < xmax]

This will only keep the items that should be in the list.

Upvotes: 1

Related Questions