There may be a much better way to manage artillery.

Tobiah toby at tobiah.org
Sun May 10 19:06:34 EDT 2009


I'm writing a video game with armed space ships.
I decided to make a class to manage all of the bullets
that may be on the screen at a given time:

class Bullets():

        def __init__(self):
                self.bullets = []

        def update(self):
                temp = []
                for bullet in self.bullets:
                        bullet.update()
                        bullet.time_to_live -= 1
                        if bullet.time_to_live:
                                temp.append(bullet)
                self.bullets = temp

        def add(self, new_bullet):
                self.bullets.append(new_bullet)

When the main loop calls .update() on the bullets
object, I want it to decrement a counter on each
bullet, and destroy the bullets who's time has come.

I wanted the bullets to be responsible for destroying
themselves, but a little Googling brought me to points
about dangling references and how an object is not allowed
(nor does it seem to have the means) to destroy itself. 
That's why I made this wrapper class for all of the bullets.

The idea is to copy bullets with time left into a temp list
and then overwrite the man bullets array with the good bullets.
I believe that the other bullets will be garbage collected.
I could not delete the items in place within the loop, of course.
Was there a better container than a list for my purposes?

Above is what I settled on, but I wonder
whether my approach is a good one.

Thanks very much,

Toby



More information about the Python-list mailing list