fa-labyrinth

Übersicht: Python & Blender


Lernziel

Diese Lern-Station ist eine Wiederholung, der schon demonstrierten Techniken. Es ist aber gleichzeitig der Startpunkt zu einem Spiel, welches wir am Ende des Kurses erstellen werden. Der Name des Spiels lautet »Sokoban«. Wenn Du das Spiel noch nicht kennst, erfährst Du mehr darüber unter Game Sokoban

Handlungsanweisungen

Aufgaben:
  1. Erstelle einen eigenen Level.
  2. Erstelle eigene Figuren, für die verwendenten ASCII-Zeichen.

Labyrinth

Wir beginnen mit einem Labyrinth, das wir aus Würfeln (cubes) zusammensetzen.

blender-basics/f-labyrinth/labyrinth.py (Source)

 1 #! bpy
 2 """
 3 Name: 'labyrinth.py'
 4 Blender: 27x
 5 Group: 'Example'
 6 Tooltip: 'Creating a maze'
 7 """
 8 import bpy
 9 
10 level_00 = ["###################",
11             "#.                #",
12             "#        $        #",
13             "#                 #",
14             "#                 #",
15             "#        @        #",
16             "#                 #",
17             "#                 #",
18             "#                 #",
19             "#                 #",
20             "###################"]
21 
22 
23 level_01 = ["    #####           ",
24             "    #   #           ",
25             "    #$  #           ",
26             "  ###  $##          ",
27             "  #  $ $ #          ",
28             "### # ## #   ###### ",
29             "#   # ## #####  ..# ",
30             "# $  $          ..# ",
31             "##### ### #@##  ..# ",
32             "    #     ######### ",
33             "    #######         "]
34 
35 
36 def sokobanLevel(level):
37     """Create a maze by adding cube objects"""
38 
39     cols = len(level[0])
40     rows = len(level)
41 
42     for row in range(rows):
43         for i in range(cols):
44             if level[row][i] == '#':
45                 bpy.ops.mesh.primitive_cube_add(location=(row*2, i*2, 0))
46 
47 if __name__ == '__main__':
48     sokobanLevel(level_00)

Wiederholung mit for-Schleife

Mit der Function len ermitteln wir die Anzahl Zeilen und Spalten der Liste und damit die Anzahl der Wiederholungen. Wir wollen berücksichtigen, dass die Level aus einer unterschiedlichen Anzahl von Zeilen und Spalten bestehen kann.

blender-basics/f-labyrinth/labyrinth.py (Source)

    cols = len(level[0])
    rows = len(level)

Ein Vergleich

Mit jedem Vergleich, entscheiden wir, ob etwas geschehen soll.

blender-basics/f-labyrinth/labyrinth.py (Source)


    for row in range(rows):
        for i in range(cols):
            if level[row][i] == '#':
                bpy.ops.mesh.primitive_cube_add(location=(row*2, i*2, 0))

Funktionsaufruf mit Parameter

Die Funktion wird nun durch Übergabe eines speziellen Level aufgerufen (level_00, level_01, level_02...).

blender-basics/f-labyrinth/labyrinth.py (Source)

if __name__ == '__main__':
    sokobanLevel(level_00)

Das Ergebnis

/blender-basics/f-labyrinth/labyrinth1.png

Ansicht von oben ...

/blender-basics/f-labyrinth/labyrinth2.png

Eine zweite Ansicht ...

Kommentare