2013-01-11 2 views
1

좋아, 그래서 나는이 프로젝트를 위해 학교에서 일하고있다. 우주 침략자 게임을 만들어야합니다. 나는 배를 움직이고 발사하도록 끝냈다. 이제 여기에 문제가 있습니다. 다중 화재를 시도하면 이전의 총알이 지워지고 멋진 사이트가 아닌 새로운 화재가 발생합니다. 실제로 여러 번 발사하도록하려면 어떻게해야합니까?우주선을 여러 번 발사하려면 어떻게해야합니까?

while (running == 1): 
    screen.fill(white) 
    for event in pygame.event.get(): 
     if (event.type == pygame.QUIT): 
      running = 0 
     elif (event.type == pygame.KEYDOWN): 
      if (event.key == pygame.K_d): 
       dir = "R" 
       move = True 
      elif (event.key == pygame.K_a): 
       dir = "L" 
       move = True 
      elif (event.key == pygame.K_s): 
       dir = "D" 
       move = True 
      elif (event.key == pygame.K_w): 
       dir = "U" 
       move = True 
      elif (event.key == pygame.K_ESCAPE): 
       sys.exit(0) 
      elif (event.key == pygame.K_SPACE): 
       shot=True 
       xbul=xgun + 18 
       ybul=ygun 
      #if key[K_SPACE]: 
       #shot = True 
     if (event.type == pygame.KEYUP): 
      move = False 

    #OBJECT'S MOVEMENTS 
    if ((dir == "R" and xgun<460) and (move == True)): 
     xgun = xgun + 5 
     pygame.event.wait 
    elif ((dir == "L" and xgun>0) and (move == True)): 
     xgun = xgun - 5 
     pygame.event.wait 
    elif ((dir == "D" and ygun<660) and (move == True)): 
     ygun = ygun + 5 
     pygame.event.wait 
    elif ((dir == "U" and ygun>0) and (move == True)): 
     ygun = ygun - 5 

    screen.blit(gun, (xgun,ygun)) 

    #PROJECTILE MOTION 
    #key = pygame.key.get_pressed() 

    if shot == True: 
     ybul = ybul - 10 
     screen.blit(bullet, (xbul, ybul)) 

    if xbul>640: 
     shot=False 

    pygame.display.flip() 
    time.sleep(0.012) 
+0

당신은이 첫 번째 줄과 두 번째 줄 사이의 들여 쓰기 오류 ... – mgilson

+0

화면상의 글 머리 기호를 ['list'] (http://docs.python.org/3.3/tutorial/introduction.html#lists) 유지해야하며 이사하다 그것들을 모두 다시 그릴 때 그것들 모두. – millimoose

+0

또는 스프라이트 그룹의 스프라이트 그룹 – ninMonkey

답변

7

xbul와 ybul에 대한 변수 만 있습니다. 여러 개의 글 머리표를 원한다면 각각의 글 머리표를 작성해야합니다. 각 목록에 새 글 머리 기호를 추가하고, 이전 글 머리 기호를 제거하려면 팝하고, 그리기 할 때 목록을 반복 할 수 있습니다.

+0

어떻게 할 수 있습니까? 나는 기본 목록을 만드는 방법을 알고 있지만이 목록은 만들지 않습니다. 당신이 할 수있는 코드 조각을 줄 수 있습니까? 나는 이것에 정말로 새로운 것이다 – Whosyourdaddy

1

x 및 y 좌표와 총알과 관련된 다른 것들을 포함하는 글 머리 기호에 대한 클래스를 만들 수 있습니다. 각 화재 단추를 눌러 목록에 새 인스턴스를 만들고 추가하십시오. 이렇게하면 원하는만큼의 총알을 가질 수 있습니다.
(새move기능에 대한 변경 코드)

class Bullet: 
    def __init__(self,x,y,vx,vy):# you can add other arguments like colour,radius 
     self.x = x 
     self.y = y 
     self.vx = vx # velocity on x axis 
     self.vy = vy # velocity on y axis 
    def move(self): 
     self.x += self.vx 
     self.y += self.vy 

예제 코드는 총알의 list의 사용 및 업데이트받은 위치에 대한에 추가 할 (move() 위입니다) :

if shot == True: # if there are bullets on screen (True if new bullet is fired). 
    if new_bullet== True: # if a new bullet is fired 
     bullet_list.append(Bullet(n_x,n_y,0,10)) # n_x and n_y are the co-ords 
               # for the new bullet. 

    for bullet in bullet_list: 
     bullet.move() 
+0

* 다른 논쟁에 의해 당신은 무엇을 의미 하느냐? 또한 어떻게 목록을 만들 수 있습니까? 내가하는 법을 알고있는 목록의 유형은 작동하지 않을 것입니다. – Whosyourdaddy

+0

@Whosyourdaddy * 다른 args는 총알에 넣으려는 다른 주장들입니다. 예를 들어, 색깔 등등, 다른 것을 말할 것입니다. (변경됨) 그리고 매번 글 머리 기호가 실행되면 'Bullet' 클래스의 새 인스턴스를 만들고이를 목록에 추가 할 수 있습니다. 응답에 목록 구현 코드 부분을 추가했습니다. – pradyunsg

관련 문제