What is a 'rect style object' and how do I implement it into my code?

Viewed 453

I am trying to learn python by making a space game where you travel around the map fighting enemies(drones) that are randomly placed around the map. So far I have been successful in moving the playable spaceship around the map(with rotation), firing lasers, and blitting drones around the map(The drones follow the spaceship around). Though I don't entirely understand classes, I seem to have been able to pull it off so far.

Now, I want to input enemy hp with Laser/Drone collision. I gave the Drone class self.rect = self.image.get_rect() and called an instance of it in the Laser1 class using self.c = pygame.Rect.colliderect(drone.rect) but it just gives me this:

Traceback (most recent call last):
  File "space.py", line 85, in <module>
    blist.append(Laser1 (beamx, beamy))
  File "space.py", line 79, in __init__
    self.c = pygame.Rect.colliderect(drone.rect)
TypeError: Argument must be rect style object

I have searched a lot online for a way to fix this but I don't understand it much and nothing seems to work for me. Any help would be greatly appreciated!

Here is my code:

class Drone:

    def __init__(self, dronex, droney):
        self.x = dronex
        self.y = droney
        self.hp = dronehp
        self.image = pygame.image.load("Androne.png").convert_alpha()
        self.rect = self.image.get_rect()

dlist = []
for i in range(10):
    dronex = random.randint(0, 7700)
    droney = random.randint(0, 4520)
    dronehp = 3
    dlist.append(Drone (dronex, droney))

drone = Drone(dronex, droney) #-----------instance i think...

class Roid:

    def __init__(self, roidx, roidy):
        self.x = roidx
        self.y = roidy
        self.type = random.randint(0, 2)

rlist = []
for i in range(811):
    roidx = random.randint(-1000, 9104)
    roidy = random.randint(-800, 7200)
    rlist.append(Roid (roidx, roidy))

class Laser1:

    def __init__(self, beamx, beamy):
        self.x = beamx
        self.y = beamy
        self.laser1 = pygame.image.load("laser1.png").convert_alpha()
        self.rect = self.laser1.get_rect()
        self.c = pygame.Rect.colliderect(drone.rect) #---line 79...

blist = []
for i in range(2):
    beamx = batx
    beamy = baty
    blist.append(Laser1 (beamx, beamy)) #---line 85...

class Laser2:

    def __init__(self, beamx2, beamy2):
        self.x2 = beamx2
        self.y2 = beamy2
        self.laser1 = pygame.image.load("laser1.png").convert_alpha()
        self.rect = self.laser1.get_rect()
        self.c = pygame.Rect.colliderect(drone.rect)

b2list = []
for i in range(2):
    beamx2 = batx
    beamy2 = baty
    b2list.append(Laser2 (beamx2, beamy2))

Also, this is my first question to ask on here. If there is anything I can do to make this question better do tell. I will except any and all feedback!

3 Answers
Related