1
1
import random
2
2
3
+
3
4
class DungeonGenerator :
4
5
def __init__ (self , width , height , num_levels ):
5
6
self .width = width
@@ -9,7 +10,8 @@ def __init__(self, width, height, num_levels):
9
10
10
11
def generate (self ):
11
12
for _ in range (self .num_levels ):
12
- dungeon = [[' ' for _ in range (self .width )] for _ in range (self .height )]
13
+ dungeon = [[' ' for _ in range (self .width )]
14
+ for _ in range (self .height )]
13
15
self .add_rooms (dungeon )
14
16
self .add_corridors (dungeon )
15
17
self .add_doors (dungeon )
@@ -27,36 +29,36 @@ def add_rooms(self, dungeon):
27
29
x = random .randint (1 , self .width - room_width - 1 )
28
30
y = random .randint (1 , self .height - room_height - 1 )
29
31
self .create_room (dungeon , x , y , room_width , room_height )
30
-
32
+
31
33
def create_room (self , dungeon , x , y , width , height ):
32
34
for i in range (x , x + width ):
33
35
for j in range (y , y + height ):
34
36
dungeon [j ][i ] = '.'
35
-
37
+
36
38
def add_corridors (self , dungeon ):
37
39
for i in range (len (dungeon ) - 1 ):
38
40
for j in range (len (dungeon [0 ]) - 1 ):
39
41
if dungeon [i ][j ] == '.' and dungeon [i + 1 ][j ] == '.' :
40
42
self .create_vertical_corridor (dungeon , i , j )
41
43
if dungeon [i ][j ] == '.' and dungeon [i ][j + 1 ] == '.' :
42
44
self .create_horizontal_corridor (dungeon , i , j )
43
-
45
+
44
46
def create_vertical_corridor (self , dungeon , x , y ):
45
47
while y < len (dungeon [0 ]) - 1 and dungeon [x ][y ] != '#' :
46
48
dungeon [x ][y ] = '#'
47
49
y += 1
48
-
50
+
49
51
def create_horizontal_corridor (self , dungeon , x , y ):
50
52
while x < len (dungeon ) - 1 and dungeon [x ][y ] != '#' :
51
53
dungeon [x ][y ] = '#'
52
54
x += 1
53
-
55
+
54
56
def add_doors (self , dungeon ):
55
57
for i in range (1 , len (dungeon ) - 1 ):
56
58
for j in range (1 , len (dungeon [0 ]) - 1 ):
57
59
if dungeon [i ][j ] == '.' and random .random () < 0.02 :
58
60
dungeon [i ][j ] = '+'
59
-
61
+
60
62
def add_enemies (self , dungeon ):
61
63
num_enemies = random .randint (5 , 15 )
62
64
enemy_types = ['Goblin' , 'Skeleton' , 'Orc' , 'Spider' ]
@@ -66,7 +68,7 @@ def add_enemies(self, dungeon):
66
68
if dungeon [y ][x ] == '.' :
67
69
enemy_type = random .choice (enemy_types )
68
70
dungeon [y ][x ] = 'E(' + enemy_type [0 ] + ')'
69
-
71
+
70
72
def add_treasures (self , dungeon ):
71
73
num_treasures = random .randint (5 , 10 )
72
74
treasure_types = ['Gold' , 'Gem' , 'Artifact' ]
@@ -76,7 +78,7 @@ def add_treasures(self, dungeon):
76
78
if dungeon [y ][x ] == '.' :
77
79
treasure_type = random .choice (treasure_types )
78
80
dungeon [y ][x ] = '$(' + treasure_type [0 ] + ')'
79
-
81
+
80
82
def add_traps (self , dungeon ):
81
83
num_traps = random .randint (5 , 10 )
82
84
trap_types = ['Spikes' , 'Poison' , 'Fire' ]
@@ -86,21 +88,22 @@ def add_traps(self, dungeon):
86
88
if dungeon [y ][x ] == '.' :
87
89
trap_type = random .choice (trap_types )
88
90
dungeon [y ][x ] = '^(' + trap_type [0 ] + ')'
89
-
91
+
90
92
def add_stairs (self , dungeon ):
91
93
for _ in range (2 ):
92
94
x = random .randint (1 , self .width - 2 )
93
95
y = random .randint (1 , self .height - 2 )
94
96
if dungeon [y ][x ] == '.' :
95
97
dungeon [y ][x ] = '<' if _ == 0 else '>'
96
-
98
+
97
99
def print_dungeons (self ):
98
100
for level , dungeon in enumerate (self .dungeons , start = 1 ):
99
101
print (f"Level { level } Dungeon:" )
100
102
for row in dungeon :
101
103
print ('' .join (row ))
102
104
print ()
103
105
106
+
104
107
# Create a dungeon generator and generate dungeons
105
108
dungeon_generator = DungeonGenerator (80 , 40 , num_levels = 3 )
106
109
dungeon_generator .generate ()
0 commit comments