2009-07-02 2 views
1

사용자 점수 이상으로 게임 점수를 계산하려고하는데 실제로 얻지 못했습니다. 사람들을 초대 할 수있는 피라미드 게임이며 초대 한 사람들이 당신을 관계 트리에 넣을 수 있습니다.피라미드 스코어 시스템에서 점수 계산

그래서 초대 한 경우 X와 X는 Y를 모두 초대합니다. 둘 다에게서 리베이트를받습니다. 그래서 각 것으로 생각이 계산

그래서 X에서 내가 Y에서 자신의 점수의 10 %와 1 %를 얻고, X가 Y를

에서

을 10 % 취득 ...의 10 %^단계를 가정 해 봅시다 "플레이어"는 총 점수를 계산하는 기능을 가졌습니다. 이 함수는 재귀 적이어야하고 트리에서 올바른 값을 되 찾을 수 있도록 "알고"있어야합니다.

def get_score(player): 
    if children: 
     score = player.points 
     for child in children: 
      score += child.points*math.pow(.1, get_ancestors(child)) 
      score += get_score(child) 
     return score 
    else: 
     return player.points 

하지만이 나던 작품 적절한, 그것은 내가 어떤 수준의 오른쪽 값입니다 있지만 다른 믿는 것을 제공합니다. 내 기능이 고장 났다고 생각해. 아무도이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

+0

모든 Madoff를 가지지 않기를 바랍니다. – Makis

+0

죄송 합니다만, 돈을 지불하고 플레이어에게 비용이 들지 않는 ARG 게임을위한 것입니다. – espenhogbakk

답변

2

나는이 두 라인이

score += child.points*math.pow(.1, get_ancestors(child)) 
score += get_score(child) 

이 간단한 재귀 구조 그래서 아래 같은 것이

score += get_score(child)*.1 

충분 재귀 아름다움

자체를 돌볼 것이라고 생각 의심 '어린이의 경우 : 필요하지 않습니다.'체크 도 도움이됩니다.

def get_score(player): 
    score = player.points 
    for child in children: 
     score += get_score(child)*.1 
    return score 
+0

당신은 정말 정확합니다. 어떻게 내가 이것을 놓칠 수 있습니다, 나는 확실히 재귀적인 연습이 필요합니다. 고마워. – espenhogbakk

+0

재귀는 기본적으로 너무 간단하여 복잡한 마음을 돌립니다. –

0

이 점수가 계산해야하는 방식에 따라 매우 다른 구현 할 수 있습니다 :

  • 는 실시간으로 각 게인의 결과를 전파해야합니까를? 이 경우 피라미드의 맨 아래에서 시작하여 맨 위로 피드백을 보냅니다.

  • 누구나 게임의 끝에서 계산할 결과를 얻을 수 있습니까? 해당 캐스에서 각 플레이어에 메서드를 설정하고 맨 위에있는 메서드 만 호출 할 수 있습니다. 두 번째 옵션

    에 대한

예 : 당신은 기능적 접근 방식을 사용했다. 이 유효한 동안, 나는 더 OO에 그래서 난이 길을 갈 것입니다 :

class Player(object) : 

    def __init__(self) : 
     self.score = 0; 
     self.children = [] 

    def updateScore(self) : 
     self.score = self.score + sum(((children.score * 10/100) for children in self.children)) 


class Pyramid(object) : 

    def __init__(self) : 
     self.top_child = Player() 

    def updateScore(self, player = None) : 

     if player == None : 
      player = self.top_child 

     for child in player.children : 
      self.updateScore(child) 
      child.updateScore() 

당신은 그것을 적은 CPU와 메모리를 많이 만들기 위해 itertools를 사용할 수 있습니다.