首页 > 解决方案 > 如何显示来自不同类的两个实例的总和?

问题描述

我需要显示总分,现在它来自 AmicoMedusa 类的 self.points 和 AmicoMedusa2 的 self.points。我似乎无法让它工作。现在它会更新分数,但分数是分开的。

这是我的代码:


class AmicoMedusa :
    def __init__(self):
        
        self.images = []
        self.points = 0
        self.eaten = 0
        for i in range(1, 3):
            img3 = pygame.image.load(os.path.join('Assets', 'medusa1.png'))
            self.images.append(img3)
            self.image = self.images[0]
            self.rect = self.image.get_rect()

    def ripeti(self):
        self.rect.x -= 6
        if self.rect.x < -1200:
            amico_gruppo.add(medusa)
            self.rect.x = 1200
            self.rect.y = random.randrange(0, 600)
    def checkcollision(self, medusa, tartaruga):
        col = pygame.sprite.collide_rect(medusa, tartaruga)
        if col == True:
            amico_gruppo.remove(medusa)
        if col == False:
           self.ripeti()
    def punti(self):
        eat_list = pygame.sprite.spritecollide(self, amico_gruppo, False)  # perche False?
        for medusa in eat_list:
            if self.rect.contains(medusa):
                self.eaten = 1  # self.rect.colliderect(medusa)
        if self.eaten == 1:
            col = self.rect.collidelist(eat_list)
            if col == -1:
                self.eaten = 0  # set damage back to 0
                self.points += 1  # add 1 point
                medusaSuono.play()
        myfont2.render_to(screen, (120, 25), str(self.points), (255, 255, 255), None, size=30)

class AmicoMedusa2 (pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.images = []
        self.points = 0
        self.eaten = 0

        for i in range(1, 3):
            img4 = pygame.image.load(os.path.join('Assets', 'medusa3.png'))
            self.images.append(img4)
            self.image = self.images[0]
            self.rect = self.image.get_rect()
    def ripeti(self):
        self.rect.x -= 7
        if self.rect.x < -1200:
            amico_gruppo.add(medusa2)
            self.rect.x = 1200
            self.rect.y = random.randrange(0, 600)
    def checkcollision2(self, medusa2, tartaruga):
        col = pygame.sprite.collide_rect(medusa2, tartaruga)
        if col == True:
            amico_gruppo.remove(medusa2)
        if col == False:
            self.ripeti()
    def punti(self):
        eat_list = pygame.sprite.spritecollide(self, amico_gruppo, False)  # perche False?
        for medusa in eat_list:
            if self.rect.contains(medusa):
                self.eaten = 1  # self.rect.colliderect(medusa)
        if self.eaten == 1:
            col = self.rect.collidelist(eat_list)
            if col == -1:
                self.eaten = 0  # set damage back to 0
                self.points += 2  # add 1 point

                medusaSuono.play()
        myfont2.render_to(screen, (250, 25), str(self.points), (255, 255, 255), None, size=30)

可能吗?如何将这两个值加在一起并将其作为总分呈现到屏幕上?

标签: pythonpygame

解决方案


您可以从两个类的实例中访问成员变量:

medusa1 = AmicoMedusa()
medusa2 = AmicoMedusa2()

# [...]

# Calculate cumulative score
total = medusa1.points + medusa2.points

有时最好不要直接使用类成员,因此可以将“getter”函数添加到两个类中:

class AmicoMedusa :
    # [...]
    
    def getPoints( self ):
        return self.points

但是总数的总和仍然大致相同:

# Calculate cumulative score
total = medusa1.getPoints() + medusa2.getPoints()

推荐阅读