2012-02-12 2 views
0

나 자신을 가르치려고 노력하고있다. 컴퓨터 프로그래밍을 사용하여 컴퓨터 프로그래머처럼 생각하는 법 : 파이썬 3 배우기. 운동 문제 중 하나는 PyGames에서 무료 파이썬 게임을 수정하고있다. 외계인이라고 불리는이 코드의 전체 코드는 here이다. .외계인 우주선을 서로 충돌시키는 방법은 무엇입니까?

목표는 외계 선박이 서로 충돌하는 것입니다.

내가 코드의 비트를 포함하는 것을 실제 모르겠어요, 저는 여기에 기존 코드의 복사본을 만든 수정입니다 : 아마 분명히

 for alien in pygame.sprite.groupcollide(aliens, aliens, 1, 1).keys(): 

외계인 스프라이트는 충돌의 지속적인 상태에 그 자체. 그래서 위의 코드는 외계인이 순간적으로 충돌하는 것처럼 화면의 가장자리에서 폭발을 일으 킵니다 (적어도 이것은 내가 상상하는 것입니다).

내가 수행 한 길은 제한된 성공이었습니다. 뚜렷한 움직임의 방향을 사용하여 두 개의 다른 외계인을 구분하십시오 (오른쪽으로 이동하면 양수가 왼쪽).

나는 서클에서 한동안 일했으며 분명히 뭔가 빠져 있어야한다고 느꼈다.

모든 포인터?

답변

1

개봉 외계인이 "자신과 충돌의 일정한 상태"에있다, 그래서 당신은

아니라 자체 제외한 모든 외국인에 대한 각각의 외국인를 확인해야 올바른 것으로,이 작품 :

i = 0 
    while i < len(aliens.sprites()): 
     check_alien = aliens.sprites()[i] #check alien 1.. alien 2.. etc 

     aliens_except = pygame.sprite.Group() #here we create a new group 
     n = 0 #without alien i, so we can use spritecollide while it doesnt collide 
     for alien in aliens: #with itself 
      if n != i: #exclude alien[i] 
       aliens_except.add(alien) 
      n += 1 

     if not pygame.sprite.spritecollideany(check_alien, aliens_except): 
      i += 1 #if theres no collision, move on to the next alien 
     else: 
      for alien in pygame.sprite.spritecollide(check_alien, aliens_except, 1): 
       Explosion(alien) #remove all aliens that are colliding with check_alien 
      for alien in pygame.sprite.spritecollide(check_alien, pygame.sprite.Group(check_alien), 1): 
       Explosion(alien) #ugly way to remove check_alien 

가장 깔끔하고 직관적이며 효율적인 코드는 아니지만 작업이 완료됩니다. 설명에서 충분히 설명해야합니다.

+0

도움을 주셔서 감사합니다! –

관련 문제