2016-05-03 7 views
0

Ich bin gerade dabei, ein Basisspiel in Pygame zu erstellen, und ein Teil davon ist die prozedurale Generierung neuer Bereiche, wenn Sie vom Bildschirm verschwinden. Als Test versuche ich, ein Objekt einmal pro Bereich zu erzeugen, indem ich seine Variablen definiere, und speichere dann das Objekt dieses Bereichs innerhalb der Klasse, wenn du später darauf zurückkommst. Hier ist, was ich im Moment habe:Prozedurgenerierung mit Klassen Pygame

#area_gen is set to "true" if you move to a new area 
#swidth and sheight are set to the size of the screen 
#x_area and y_area are defined as you change areas, acting as sector coordinates 
#Red is defined in globals 

class areas: 

    def __init__(self, coords): 
     self.coordinates = coords 
     self.generated = False 

    def gen_objects(self): 
     if not self.generated: 
      self.objs = [] 
      obj_type = "test object" 
      center_x = random.randrange(105, swidth-25) 
      center_y = random.randrange(25, swidth - 175) 
      self.objs.append([obj_type, center_x, center_y]) 
      self.generated = True 

#Within The Game Loop 

    if area_gen == "true": 
     coords = str(str(x_area) + " " + str(y_area)) 
     area = areas(coords) 

     area.gen_objects() 

    for thing in area.objs: 
     if thing[0] == "test object": 
      pygame.draw.rect(screen, Red, (thing[1], thing[2], 250, 250)) 

    #Bottom of the Game Loop 
    area_gen = "false" 

Was dachte ich, das self.generated Variable tun würde, war die neue Objekt Generation zu stoppen, wenn man bereits existiert, aber das scheint nicht zu funktionieren. Der Platz wird immer noch an einem neuen Ort erzeugt, auch wenn das Gebiet bereits besucht wurde. Mein Wissen über den Unterricht ist relativ begrenzt, daher bin ich ein bisschen auf der Suche nach dem Weg von hier.

+0

Warum Strings statt Booleans verwenden? Es könnte ein Teil des Problems sein ... (du hast 'area_gen ==" true "' anstelle von 'area_gen = True' geschrieben) –

+0

Meine Computerprogrammierklasse hat Richtig/Falsch und ihre jeweilige Syntax aus dem" Booleschen "Kapitel heraus gelassen des Lehrplans, also begann ich mit Strings als Ersatz. Zu der Zeit, als ich nach der richtigen Syntax suchte, hatte ich bereits begonnen, Strings in diesem Programm zu verwenden. Wie auch immer ich endlich herausgefunden habe, was los ist; Mein Wissen darüber, wie Klassenobjekte funktionieren, war nicht genau. Ich poste meinen Fix in einer neuen Antwort. – 1adog1

Antwort

0

Übergeben Sie area_gen in den Konstruktor für die Bereiche Klasse, und setzen Sie self.generated = area_gen. Funktioniert das? Ich kann nicht genug von deinem Code sehen, um ehrlich zu sein.

+0

Ich entschuldige mich, versuche herauszufinden, welches Bit Code relevant ist, ohne ein paar hundert Zeilen zu nehmen, ist in diesem Fall ein bisschen schwierig. area_gen wird immer dann auf "true" gesetzt, wenn sich der Bereich ändert (das Zeichen wird ausgeblendet). Nach was ich suche, ist eine Weise, um zu überprüfen, ob der Bereich, der für die Koordinationsvariable spezifisch ist, vorher erzeugt worden ist. – 1adog1