2.8 KiB
		
	
	
	
	
	
			
		
		
	
	
			2.8 KiB
		
	
	
	
	
	
Simple TCOD Tutorial Part 3 - Generating a dungeon
This is Part 3 of the Simple TCOD Tutorial adapted for McRogueFace. We now add procedural dungeon generation to create interesting, playable levels.
Running the Code
From your tutorial build directory:
cd simple_tcod_tutorial/build
./mcrogueface scripts/main.py
New Features
Procedural Generation Module (game/procgen.py)
This dedicated module demonstrates separation of concerns - dungeon generation logic is kept separate from the game map implementation.
RectangularRoom Class
- Clean Abstraction: Represents a room with position and dimensions
 - Utility Properties:
center- Returns room center for connectionsinner- Returns slice objects for efficient carving
 - Intersection Detection: 
intersects()method prevents overlapping rooms 
Tunnel Generation
- L-Shaped Corridors: Simple but effective connection method
 - Iterator Pattern: 
tunnel_between()yields coordinates efficiently - Random Variation: 50/50 chance of horizontal-first vs vertical-first
 
Dungeon Generation Algorithm
def generate_dungeon(max_rooms, room_min_size, room_max_size, 
                    map_width, map_height, engine) -> GameMap:
- Simple Algorithm: Try to place random rooms, reject overlaps
 - Automatic Connection: Each room connects to the previous one
 - Player Placement: First room contains the player
 - Entity-Centric: Uses 
player.place()for proper lifecycle 
Architecture Benefits
Modular Design
- Generation logic separate from GameMap
 - Easy to swap algorithms later
 - Room class reusable for other features
 
Forward Thinking
- Engine parameter anticipates entity spawning
 - Room list available for future features
 - Iterator-based tunnel generation is memory efficient
 
Clean Integration
- Works seamlessly with existing entity placement
 - Respects GameMap's tile management
 - No special cases or hacks needed
 
Visual Changes
- Map size increased to 80x45 for better dungeons
 - Zoom reduced to 1.0 to see more of the map
 - Random room layouts each time
 - Connected rooms and corridors
 
Algorithm Details
The generation follows these steps:
- Start with a map filled with walls
 - Try to place up to 
max_roomsrooms - For each room attempt:
- Generate random size and position
 - Check for intersections with existing rooms
 - If valid, carve out the room
 - Connect to previous room (if any)
 
 - Place player in center of first room
 
This simple algorithm creates playable dungeons while being easy to understand and modify.
What's Next
Part 4 will add:
- Field of View (FOV) system
 - Explored vs unexplored areas
 - Light and dark tile rendering
 - Torch radius around player
 
The modular dungeon generation makes it easy to add these visual features without touching the generation code.