2014-07-08 2 views
2

현재 파이썬으로 기본 게임의 GUI에서 점수를 업데이트하는 데 많은 어려움을 겪고 있습니다.스코어 키퍼 업데이트

나는 왼쪽 상단 구석에 "O"로 나타나는 점수가 나타나는 것과 같은 코드를 가지고 있습니다. 그러나 점수는 프로그램 전체에 대해 0으로 유지됩니다 (한 번만 렌더링되기 때문에 점수를 업데이트하기 위해 끊임없이 점수를 다시 계산하는 방법을 모르겠다). 나는 많은 방법을 시도했지만 성공하지 못했습니다. 코드 부분 점수 렌더링 및 변수 conlisionNumber를 사용하여 점수를 추적하는 나의 시도는 다음과 같습니다

new = bears[:] 
    for bear in new: #this makes a copy of the array 
     if player.colliderect(bear): 
      windowSurface.blit(bearImageTwo, bear) 
      windowSurface.blit(playerImageTwo, player) 

     def explosion(): 
      for bear in bears: 
       if player.colliderect(bear) and (moveLeft == False and moveRight == False and moveUp == False and moveDown == False): 
        bears.remove(bear) 
        colisionNumber += 1 

     if player.colliderect(bear) and (moveLeft == False and moveRight == False and moveUp == False and moveDown == False): 
       t = Timer(1, explosion) 
       t.start() 

    scoreFont = pygame.font.SysFont("impact", 20) 
    score = scoreFont.render("SCORE:" + str(colisionNumber), True, (192,192,192)) 
    windowSurface.blit(score, (10,10)) 

는 참고 : 프로그램의 시작에 내가 넣어 :

global colisionNumber 
colisionNumber = 0 

때문에 경우에 이루어졌다 폭발 범위 내에서 colisionNumber을 정의한 다음 colisionNumber을 정의하지 않았습니다. score 변수에

도움을 주시면 감사하겠습니다.

+3

당신은 당신의 질문에 대답했습니다. colisionNumber는 전역이지만 함수를 폭발 시키면 설정하려고 시도하고 로컬 복사본을 만듭니다. 함수에서 전역으로 정의해야합니다. (그것의 키워드) global 키워드는 원래의 정의가 아닌 함수에서 사용됩니다. 즉, 함수 나 클래스의 외부에 있기 때문에 전역 적입니다. – gkusner

+0

프로그램의 시작 부분에서'colisionNumber = 0'을 사용하고 function에서'colisionNumber' 값을 변경시키는'global colisionNumber'를 사용하십시오. – furas

답변

1
colisionNumber = 0 

def explosion(): 
    global colisionNumber 
    colisionNumber += 1 
+0

많은 분들께 감사드립니다! 그것을 행복하게 마침내 마쳤습니다. –