命名/调用生成的对象w / Classes

时间:2014-02-03 14:30:53

标签: python class object python-2.7 pygame

目标是使用同一个类生成25个对象。

我目前正在使用此代码创建对象:

class Card:
    def __init__(self,pos):
        self.flipping = False
        self.images = loadanimationimages()
        self.frame = 0
        self.pos = pos
    def flip():
        self.flipping = True
    def update():
        if self.flipping:
            self.frame += 1
            self.frame %= len(self.images)
    def draw(screen):
        screen.blit(pygame.transform.smoothscale(self.images[self.frame],
        self.pos),55*scale).convert_alpha() #Continued.

def updatecards():  #Create the cards.
  cards = []
  for x in range(5):
     for y in range(5):
        cards.append(Card((x*92*scale+offsetx*scale,y*92*scale+offsety*scale)))

我知道我必须拨打card.flip(),但我不知道如何拨打个人卡。帮助

1 个答案:

答案 0 :(得分:1)

cards[10].flip()

看到你已经将每张卡存储在列表中([])并且它只是用整数索引,所以要拨打卡号10,你会cards[9].<function>等。

另一种方法是在将卡片添加到卡片列表之前翻转卡片,但这可能会破坏你的游戏:)

while 1:
    cardNr = int(raw_input('Flip a card, any card of the total ' + str(len(cards)) + ': '))
    cards[cardNr-1].flip()  # -1 because humans don't count from 0 normally :)

翻转用户选择翻转的卡片。

由于您使用的是GUI,以下是ya的示例代码:

while 1:
  ev = pygame.event.get()
  for event in ev:
    if event.type == pygame.MOUSEBUTTONUP:
      mouse = pygame.mouse.get_pos()
      clicked_cards = [c for c in cards if c.clicked(mouse)]
      for card in clicked_cards:
          if card:
              card.flip()

现在为您的卡添加一个功能:

def clicked(self, mouse):
    if mouse.x >= self.x and mouse.x <= self.x+self.width:
        if mouse.y >= self.y and mouse.y <= self.y+self.height:
            return self
    return False

如果我没有通过card.Rect.collidepoint弄错,有更好的方法可以做到这一点,但由于我很早就使用Pygame转移到其他GUI库,你需要在这里阅读: