> cat /wizhelp/wizadvanced3
> _
======================================================================== Advanced: Puzzle Systems ======================================================================== Creating interactive puzzles and complex room mechanics. COLOR SEQUENCE PUZZLE: Example from TDCJ prison area: ```python # Terminal room tracks the puzzle state terminal_room = Room( name="puzzle_terminal", description="A computer terminal displays colored lights." ) # Initialize puzzle terminal_room.color_sequence = ['red', 'blue', 'green', 'yellow'] terminal_room.switches_flipped = [] terminal_room.puzzle_complete = False # Switch rooms switch_room = Room(name="red_switch_room") switch_room.switch_color = 'red' switch_room.switch_flipped = False ``` SWITCH HANDLER: ```python def handle_flip(player, params): if params != "switch": player.message("Flip what?") return room = player.game_state.rooms.get(player._location) # Check if already flipped if room.switch_flipped: player.message("The switch is already flipped.") return # Flip it room.switch_flipped = True color = room.switch_color # Update puzzle state terminal = player.game_state.rooms.get("puzzle_terminal") terminal.switches_flipped.append(color) # Check sequence pos = len(terminal.switches_flipped) - 1 if terminal.switches_flipped[pos] != terminal.color_sequence[pos]: # Wrong! Reset player.message("BZZT! Wrong sequence. Resetting...") reset_puzzle() elif len(terminal.switches_flipped) == 4: # Complete! complete_puzzle(player) else: # Correct so far remaining = 4 - len(terminal.switches_flipped) player.message(f"Click! {remaining} switches remain...") ``` RIDDLE DOORS: ```python def riddle_door(player): # Store riddle state on player if not hasattr(player, 'riddle_attempts'): player.riddle_attempts = 0 return False, "A voice speaks: 'What has hands but cannot clap?'" # Add command to room def answer_riddle(player, params): if "clock" in params.lower(): player.message("Correct! The door swings open.") # Remove the can_traverse restriction for exit in room.exits: if exit.name == "north": del exit.can_traverse else: player.riddle_attempts += 1 if player.riddle_attempts >= 3: player.message("Wrong! You are teleported away!") player.move("entrance") else: player.message("Wrong answer. Try again.") room.custom_commands = {"answer": answer_riddle} ``` LEVER PUZZLE: ```python # Track lever states room.levers = { 'red': False, 'blue': False, 'green': False } def pull_lever(player, params): if not params: player.message("Pull which lever?") return color = params.lower() if color not in room.levers: player.message("No such lever.") return # Toggle lever room.levers[color] = not room.levers[color] state = "up" if room.levers[color] else "down" player.message(f"You pull the {color} lever {state}.") # Check solution (red up, blue down, green up) if (room.levers['red'] and not room.levers['blue'] and room.levers['green']): player.message("Click! A secret door opens!") # Add new exit room.exits.append(Exit("secret", "treasure_room")) room.custom_commands = {"pull": pull_lever} ``` PRESSURE PLATES: ```python def on_enter(player): # Weight puzzle total_weight = sum(item.weight for item in player.inventory.get_all()) if total_weight > 100: player.message("Click! The pressure plate sinks.") # Open door for exit in room.exits: if exit.name == "east": exit.can_traverse = None else: player.message("Nothing happens. Perhaps you're too light?") room.on_enter = on_enter ``` ========================================================================
> _