Labyrinth - kompletter Level
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 <a href=“/stories/python/blender-game-engine/ga-sokoban-idea“> Game Sokoban</a>
Handlungsanweisungen
- Aufgaben
Erstelle einen eigenen Level.
Erstelle eigene Figuren, für die verwendenten ASCII-Zeichen.
Labyrinth
Wir beginnen mit einem Labyrinth, das wir aus Würfeln (cubes) zusammensetzen.
1#! bpy
2"""
3Name: 'labyrinth.py'
4Blender: 27x
5Group: 'Example'
6Tooltip: 'Creating a maze'
7"""
8import bpy
9
10level_00 = ["###################",
11 "#. #",
12 "# $ #",
13 "# #",
14 "# #",
15 "# @ #",
16 "# #",
17 "# #",
18 "# #",
19 "# #",
20 "###################"]
21
22
23level_01 = [" ##### ",
24 " # # ",
25 " #$ # ",
26 " ### $## ",
27 " # $ $ # ",
28 "### # ## # ###### ",
29 "# # ## ##### ..# ",
30 "# $ $ ..# ",
31 "##### ### #@## ..# ",
32 " # ######### ",
33 " ####### "]
34
35
36def 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
47if __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.
cols = len(level[0])
rows = len(level)
Ein Vergleich
Mit jedem Vergleich, entscheiden wir, ob etwas geschehen soll.
rows = len(level)
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…).
Das Ergebnis

Ansicht von oben …

Eine zweite Ansicht …