2013-10-29 3 views
2

Im 게임에서 파이썬/파이 게임으로 점수를 매기려고합니다.다른 클래스 파이썬에서 점수 올리기

global score 
score = 0 

의사 :

if player_rect.coliderect(baddie_rect): 
     score +=1 

가 그럼 난 화면에 점수를 표시

내 점수는 내가 좋아하는 뭔가를 작동합니다.

하지만 다른 등급의 기능에서이 점수를 사용하고 싶습니다. 이 함수는 주 클래스에서 호출됩니다.

그렇게

충돌 함수에서 나는 선수 클래스에 점수를 증가하고 싶습니다. 하지만 메인 클래스에서 점수를 인쇄하고 싶습니다. 나는이 사용하는 단축과 같은 코드가 있습니다

class player: 
    . 
    . 
    . 
    global score 
    score = 0 
    def __init(self): 
     self.score=0 
    def get_score(self): 
     return self.score 
    def set_score(self, score): 
     self.score = score 
    def collision(): 
     . 
     . 
     if player_rect.coliderect(baddie_rect): 
      self.score +=1 

나는 충돌이 발생하면 점수를 얻을하려고 :

class main(): 
    player = player() 
    player.colision() 
    print player.get_score() 

아무런 변화가없고, 점수 나던 증가!

제안 사항?

+1

간단한에서 이동하는 점을 얻을 희망 것을 말하고 있지 않다

'. 글로벌 스코어를 업데이트하고 싶다면'score = self.score'를 호출해야합니다. –

답변

5
class Player: 
    def __init(self): 
     self.score=0 
    def collision(): 
     if player_rect.coliderect(baddie_rect): 
      self.score +=1 


class main(): 
    player = Player() 
    player.collision() 
    print(player.score) 

여기 전역에 대한 필요가 없습니다. In Python, you almost never need getters or setters. 인스턴스 속성 score에 직접 액세스하거나 설정하십시오. 더 복잡한 연산을 수행하기 위해 self.score이 필요한 경우 make it a property을 사용하면 구문을 변경하지 않고도 getter/setter와 유사한 동작을 정의 할 수 있습니다.

+0

+1 그리고 수락 해 주셔서 대단히 감사합니다! :-) –

1

"전역"(완전히 불필요한 것)을 제외하고 코드는 옳은 것처럼 보입니다. 파이썬에서 액세스 메소드가 아닌 선호되는 속성이지만,이 경우에는 에러가되어서는 안된다는 것은 사실입니다.

def collision(): 
    self.score += 1 

을 다음 오류가 player_rect.coliderect(baddie_rect):에 아마도 다른 곳에 있는지 확인하려고 :

왜 충돌의 코드를 변경하지 마십시오() 할 수? 나는`player.score` 아니라 글로벌`점수가 오류가 있습니다,하지만 난 당신이()`이 증가 충돌`복잡한

관련 문제