lerne gerade Python und habe mir als erste hinreichend komplexe Aufgabe die Programmierung einer Art von Labyrinth vorgenommen. Ich weiß, Code dazu, wie man Labyrinthe programmiert gibt es zu Hauf, aber ich wollte es selber versuchen, um mehr praktische Erfahrung mit Python zu sammeln.
Hier erstmal mein Pseudocode:
Code: Alles auswählen
1. erstelle ein 20 x 20 Felder großes Array
2 .setze eine "Mauer" auf zehn zufällige Felder
3. gehe alle felder durch und prüfe die um sie herum liegenden Felder darauf, ob kein weiteres Feld an sie grenzt (lege Kandidaten für neue Mauerfelder fest)
4. aus den Kandidaten für jedes Mauerstück wähle einen aus und füge ihn der Liste hinzu, welche die Mauerstücke enhält
5. führe Schritt 4&5 solange aus, bis kein Mauerfeld mehr Kandidaten aufweist
Vielen Dank schonmal für's Lesen. Hier ist mein Code soweit:
Code: Alles auswählen
import random
class maze:
def __init__(self):
self.grid = [(x, y) for x in range(20) for y in range(20)]
self.walls = random.sample(self.grid, 10)
#find neighboring available squares
def findneighs(self, coo, coos):
neighs = []
for x in range(-1, 2):
for y in range(-1, 2):
if (coo[0]+x, coo[1]+y) not in coos:
neighs.append((coo[0]+x, coo[1]+y))
return neighs
Code: Alles auswählen
#Appends one new wall to all existing walls
def buildwalls(self):
dummy = []
for wall in self.walls:
dummy.append(self.buildwall(wall))
for x in dummy:
if x not in self.walls:
self.walls.append(x)
#Builds one next to an existing wall
def buildwall(self, wall):
candidates = []
if len(findneighs(wall, self.walls)) > 7:
for neighbor in findneighs(wall, self.walls):
if len(findneighs(neighbor, self.walls)) > 7:
candidates.append(neighbor)
if len(candidates) > 0:
return random.sample(candidates, 1)[0]
else:
return []
#Show the maze
def printmaze(self):
someGrid = []
for i in range(20):
someGrid.append(20*['o'])
for wall in self.walls:
someGrid[wall[0]][wall[1]] = 'x'
print someGrid
def countwalls(self):
print len(walls)