"index-tracker" в цикле for (Pygame) - PullRequest
0 голосов
/ 30 апреля 2019

Я новичок в python и прохожу код этой маленькой игры (https://www.raywenderlich.com/2795-beginning-game-programming-for-teens-with-python для полного описания). Я пытаюсь понять, как этот код отслеживает фактические элементы на экране иболее конкретно, как он «знает», какой элемент в списке должен появиться, как только он достигнет установленных границ.(См. Ниже) Теоретически я понимаю идею циклов for, используемых в этом коде, но у меня есть ощущение, что в этом коде либо что-то не то, либо, что не менее вероятно, то, как я думаю об этом, отсутствует логическая часть.

Большое спасибо!

for bullet in arrows:

        index=0
        velx= math.cos(bullet[0])*10
        vely= math.sin(bullet[0])*10
        bullet[1]+=velx
        bullet[2]+=vely
        if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
            arrows.pop(index)
        index+=1
 index=0
    for badguy in badguys:
        if badguy[0]<-64:
            badguys.pop(index)
        badguy[0]-=7
        index+=1

Как я думаю, в первом цикле "стрелка" индекс всегда будет оставаться "0", поэтому независимо от того, какойстрелка покидает экран, только первый элемент [0] в списке стрелок будет удален (всплывающее).Кроме того, я также не понимаю, почему в конце индекса + = 1, когда сразу после него возвращается значение [0]?

Второй, индекс на самом деле идет вверх (я проколол его на экране), но все еще только «плохой парень», покидающий экран (который в этом случае всегда является первым элементом списка [0], выталкивается из этого списка, хотя из кода я думаю, что это должен быть элемент сприсвоенное значение индекса (например, [3] или [4] ...)

Большое спасибо и извините за длинный текст.

1 Ответ

0 голосов
/ 30 апреля 2019

Я тоже не понимаю index += 1 Есть ли какой-нибудь код после этого?Но реальный цикл - for bullet in arrows, поэтому проверяется каждая стрелка.Но вы правы, что убранная стрелка всегда имеет индекс 0. Значит, index = 0 должно быть за пределами цикла.

Но ваше второе расследование неверно.badguy[0] не первый из плохих парней.Вместо этого это первая информация (что-то вроде значения x) активного злодея (for badguy in badguys).

...