Python pygame несколько раз копировал одно и то же изображение

Почему моя программа не может скопировать одно и то же изображение, которое она загружала несколько раз?

Imagea = pygame.image.load('imagea.png')
Imageb = pygame.image.load('imageb.png')

Внутри игрового цикла

deck = abaa
for i in deck:
     for position in positions:
      if(i) == deck[0]:
           if(i == a):
           gamedisplay.blit(imagea, positions[0])
           elif(i == b):
           gamedisplay.blit(imageb, positions[0])
      if(i) == deck[1]:
           if(i == a):
           gamedisplay.blit(imagea, positions[1])
           elif(i == b):
           gamedisplay.blit(imageb, positions[1])
      if(i) == deck[2]:
           if(i == a):
           gamedisplay.blit(imagea, positions[2])
           elif(i == b):
           gamedisplay.blit(imageb, positions[2])
      if(i) == deck[3]:
           if(i == a):
           gamedisplay.blit(imagea, positions[3])
           elif(i == b):
           gamedisplay.blit(imageb, positions[3])

Кажется, что только колода 0 и колода 1 показывают изображения a и imageb. Однако колоды 2 и 3 не отображаются в position[2] или position[3].


person Sebi St Johnston    schedule 16.10.2019    source источник


Ответы (1)


deck — это список, а i — это элемент списка. Нет необходимости оценивать, если это элемент списка, конечно, это так. Эта оценка является проблемой. Обратите внимание: если i несколько раз встречается в deck (например, по индексу 0 и 2), то if i == deck[2]: никогда не оценивается, потому что if i == deck[o]: сначала оценивается True.

В дальнейшем я предполагаю, что deck и position имеют одинаковое количество элементов.

Либо используйте enumerate для обхода deck и получения кортежа, содержащего индекс элемент и сам элемент:

for i, d in enumerate(deck):
    p = positions[i]
    if d == a:
       gamedisplay.blit(imagea, p)
    elif d == b:
       gamedisplay.blit(imageb, p)

Или используйте zip для одновременного обхода deck и positions:

for d, p in zip(deck, positions):
    if d == a:
       gamedisplay.blit(imagea, p)
    elif d == b:
       gamedisplay.blit(imageb, p)
person Rabbid76    schedule 17.10.2019
comment
@SebiStJohnston Проблема решена? Ответ вообще приемлем? (отметьте мар слева от ответа). Прочтите Что делать, если кто-то ответит на мой вопрос? - person Rabbid76; 18.10.2019