• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

한줄 if가 있는 for문을 풀어주실 수 있나요?

20.12.27 23:21 작성 조회수 197

0

weapons = [[w[0], w[1]] for w in weapons if w[1] > 0]

한줄 코드만으로는 잘 이해가 가지 않습니다.

이 코드를 풀어서 보면 어떤 코드인지 이해에 도움이 될 것 같습니다.

답변 1

답변을 작성해보세요.

0

uki020226님의 프로필

uki020226

2021.03.08

그 줄 바로 위부터 볼게요. 

    weapons = [ [w[0], w[1] - (weapon_attack * dt)] for w in weapons ]

여기서 나온 결과를 다시 weapons 에 저장을 했어요. 
이걸 이해를 못하시는것 같은데, 
그러니까, 쉽게 설명하면, 

weapon 1 의 좌표는 ( 캐릭터 위치 정중앙 , 캐릭터 머리 )
weapon 2 는 아직 안쏨. 

잠시후 
weapon 1 의 좌표는 ( 캐릭터 "이전" 위치 정중앙 , 캐릭터 머리보다 30만큼 위 )
weapon 2 는  ( 캐릭터 위치 정중앙 , 캐릭터 머리 )
이런식으로 저장을 하는 겁니다. 그러니까 지속적으로 저장되고 있는거예요. 

다음은 
weapon 1 의 좌표는 ( 캐릭터 "이전전" 위치 정중앙 , 캐릭터 머리보다 60만큼 위 )
weapon 2 는  ( 캐릭터"이전" 위치 정중앙 , 캐릭터 머리보다 30만큼 위 )
weapon 3 는  ( 캐릭터 위치 정중앙 , 캐릭터 머리 )

이런식으로 쏠때마다 늘겟죠??


그러면, 이렇게 저장된 애들을

 weapons = [ [w[0], w[1]] for w in weapons if w[1] > 0

여기서, if 오른쪽 부분만 살펴보면, 

if w[1] > 0

w[1]  값 즉, 무기들중에 y좌표가 0 보다 크다면, 그러니까 화면 위로 올라가지 않았다면, 그애들은 

weapons = [ [w[0], w[1]] for w in weapons

 다시 weapon 에 저장한다. 즉, 천장보다 위로 올라가면, 저장하지 않는다. 

그리고 아래의 구문에서, 

    for weapon_x, weapon_y in weapons:
       screen.blit(weapon, (weapon_x, weapon_y))

이 저장된 애들만 그려주죠? 
그러니까 천장보다 위로 올라간 애들은 그리지 않으니까, 
즉, 천장보다, 올라간 애들은, 버린다. 

라는 겁니다.