2016-05-09 18 views
0

Ich versuche, ein zufällig konstruiertes zweidimensionales Array als eine Karte für ein textbasiertes Spiel zu verwenden, das ich erstelle. Wenn ich den Raum der Welt als solche definieren:So erstellen Sie ein zufälliges multidimensionales Array aus vorhandenen Variablen

class WorldSpace(object): 
    # Map information: 
    def __init__(self): 
     self.inner = ['g'] * 60 # Creates 60 'grass' tiles. 
     self.outer = [[].extend(self.inner) for x in self.inner] 
     # 'inner' & 'outer' variables define the world space as a 60 x 60 2-D array. 
     self.userpos = self.outer[0][0]  # Tracks player tile in world space. 
     # The variables below are modifiers for the world space. 
     self.town = 't' 
     self.enemy = 'e' 

Ich nehme ich ein for-Schleife verwenden würde die Array-Daten von self.outer zuzugreifen - mit vielleicht den Zufall Modul zu bestimmen, welche Fliesen werden ersetzt - aber Wie würde ich diese Daten zufällig durch spezifische Modifikatorvariablen ersetzen und einschränken, wie viele Daten ersetzt werden? Zum Beispiel, wenn ich etwa 25 des ursprünglichen Grases oder "g", Fliesen mit feindlichen oder "e" -Kacheln ersetzen wollte, wie könnte ich das tun? Gleiches mit vielleicht 5 zufällig platzierten Städten?

Vielen Dank für alle Antworten.

+1

'x = shuffle (Bereich (60)); y = shuffle (range (60)) 'und dann erhalten Sie eine Liste von nicht wiederholbaren zufälligen Kacheln, die ersetzt werden sollen. – Natecat

Antwort

1

Sie könnten randrange verwenden, um Zeilen- und Spaltenindex zu generieren und dort Gegner hinzuzufügen. Wenn es schon ein Feind oder ein anderes Objekt in bestimmten Zelle es gerade auslässt und Randomisierung eine neue Koordinate:

import random 

def add(grid, char, count): 
    while count: 
     row = random.randrange(len(grid)) 
     column = random.randrange(len(grid[0])) 
     if world[row][column] == 'g': 
      world[row][column] = char 
      count -= 1 

Verbrauch:

world = [['g'] * 60 for _ in xrange(60)] 
add(world, 'e', 25) 
add(world, 't', 5) 

Dieser Ansatz macht nur Sinn, wenn Ihre Welt spärlich ist, dh die meisten der Welt ist Gras. Wenn die Welt mit verschiedenen Objekten gefüllt wird, dann wäre das Verfolgen des freien Raums und das zufällige Auswählen einer Kachel von dort eine bessere Annäherung.

+0

Hey danke. Das scheint großartig zu funktionieren. Schätze die Hilfe. – PyDive

Verwandte Themen