2009-07-02 11 views
1

Ich versuche, Gamescores für einen Haufen über Benutzer zu berechnen, und ich habe es noch nicht wirklich bekommen. Es ist ein Pyramidenspiel, in das du Leute einladen kannst, und die Leute, die du einlädst, werden dir im Beziehungsbaum zugewiesen.Berechnen Sie die Punktzahl in einem Pyramiden-Score-System

Also, wenn ich einladen X und X lädt Y ich bekomme Kickback von beiden. Sagen wir mal 10%^Schritte ...

Also von X i 10% seiner Punktzahl und 1% von Y und X einen 10% von Y.

Also das i zu berechnen, dass jeder dachte "Spieler" hatte eine Funktion, die seine Gesamtpunktzahl berechnete. Diese Funktion musste rekursiv sein und "wissen", wie weit sie in der Baumstruktur war, so dass sie die richtigen Werte zurückwerfen würde.

Aber das funktioniert nicht richtig, es gibt, was ich glaube, ist die richtigen Werte in einigen Ebenen, aber nicht in anderen. Also denke, meine Funktion ist kaputt. Hat jemand eine Idee, wie man das löst?

+0

Ich hoffe, du wirst nicht gehen alle Madoff :) – Makis

+0

Nein sorry, es ist eigentlich für ein ARG-Spiel mit einem Geldpreis und keine Kosten für den Spieler, also keine Sorgen ... – espenhogbakk

Antwort

2

Ich bezweifle diese beiden Linien

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

dies ist eine einfache rekursive Struktur, so denke ich so etwas wie unten

score += get_score(child)*.1 

und rekursive Schönheit selbst kümmern

Sie genügt auch nicht brauchen 'wenn Kinder:' überprüfen so hilft es

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

Sie sind so absolut richtig, doh Wie kann ich das verpasst haben, ich brauche definitiv eine rekursive Praxis. Danke vielmals. – espenhogbakk

+0

Rekursion ist im Grunde so einfach, dass es unsere komplexen Köpfe stolpert –

0

Dies kann sehr unterschiedliche Implementierungen haben, abhängig von der Art und Weise muss die Punktzahl der Berechnung werden:

  • Haben Sie das Ergebnis jeder Gewinn propagieren müssen, in Echtzeit? In diesem Fall fängst du am unteren Rand der Pyramide an und gibst das Feedback bis oben hin.

  • Können Sie sich das Ergebnis am Ende des Spiels für jeden berechnen lassen? In diesem Fall können Sie für jeden Spieler eine Methode festlegen und nur die oberste aufrufen.

z.B für die zweite Option

Sie verwendet, um einen funktionalen Ansatz. Dies ist zwar gültig ist, ich bin mehr in OO so werde ich diesen Weg gehen:

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() 

Sie wollen itertools verwenden kann es weniger Prozessorleistung und Arbeitsspeicher zu machen.

Verwandte Themen