2014-02-03 2 views
-1

Целью является создание 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

'карты [10] .flip()' – Torxed

+0

О, что будет иметь смысл ... Спасибо. – Kweb123

+0

Или замените последнюю строку следующими тремя строками: 'card = Card (...); card.flip(); cards.append (карта) '. – Bach

ответ

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 :) 

переворачивать ли карты пользователь выбрал переворачивать.

Поскольку вы используете графический интерфейс, вот некоторые примеры кода для уа:

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, но так как я перешел к другим библиотекам GUI довольно рано, используя Pygame, вам нужно будет здесь почитать:

+0

Что делать, если на нем была нажата кнопка? – Kweb123

+0

Тогда просто, вы сохраняете каждое представление GUI как число. Обычно вы называете это идентификатором Uniqueue, или поскольку вы используете Pygame, есть функция 'click()', которую вы можете сделать 'self.flip()' изнутри. – Torxed

+0

@ Kweb123 Или вам придется делать 'pygame.mouse.get_pressed()', а затем 'pygame.mouse.get_pos()' вручную, затем прокручивать все ваши карты через 'для карточки в карточках: if mouse.x> = card.x и mouse.x <= card.x + card.width', а затем выполните '.flip()' – Torxed

Смежные вопросы