Add cookbook and tutorial showcase demos
tests/demo/: - cookbook_showcase.py: Interactive demo of cookbook recipes - tutorial_showcase.py: Visual walkthrough of tutorial content - tutorial_screenshots.py: Automated screenshot generation - new_features_showcase.py: Demo of modern API features - procgen_showcase.py: Procedural generation examples - simple_showcase.py: Minimal working examples Created during docs modernization to verify cookbook examples work. 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
23afae69ad
commit
a1b692bb1f
6 changed files with 1734 additions and 0 deletions
103
tests/demo/simple_showcase.py
Normal file
103
tests/demo/simple_showcase.py
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Simple Tutorial Screenshot Generator
|
||||
|
||||
This creates ONE screenshot - the part01 tutorial showcase.
|
||||
Run with: xvfb-run -a ./build/mcrogueface --headless --exec tests/demo/simple_showcase.py
|
||||
|
||||
NOTE: In headless mode, automation.screenshot() is SYNCHRONOUS - it renders
|
||||
and captures immediately. No timer dance needed!
|
||||
"""
|
||||
import mcrfpy
|
||||
from mcrfpy import automation
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Output
|
||||
OUTPUT_PATH = "/opt/goblincorps/repos/mcrogueface.github.io/images/tutorials/part_01_grid_movement.png"
|
||||
|
||||
# Tile sprites from the labeled tileset
|
||||
PLAYER_KNIGHT = 84
|
||||
FLOOR_STONE = 42
|
||||
WALL_STONE = 30
|
||||
TORCH = 72
|
||||
BARREL = 73
|
||||
SKULL = 74
|
||||
|
||||
def main():
|
||||
"""Create the part01 showcase screenshot."""
|
||||
# Ensure output dir exists
|
||||
os.makedirs(os.path.dirname(OUTPUT_PATH), exist_ok=True)
|
||||
|
||||
# Create scene
|
||||
scene = mcrfpy.Scene("showcase")
|
||||
|
||||
# Load texture
|
||||
texture = mcrfpy.Texture("assets/kenney_tinydungeon.png", 16, 16)
|
||||
|
||||
# Create grid - bigger zoom for visibility
|
||||
grid = mcrfpy.Grid(
|
||||
pos=(50, 80),
|
||||
size=(700, 480),
|
||||
grid_size=(12, 9),
|
||||
texture=texture,
|
||||
zoom=3.5
|
||||
)
|
||||
grid.fill_color = mcrfpy.Color(20, 20, 30)
|
||||
scene.children.append(grid)
|
||||
|
||||
# Fill with floor
|
||||
for y in range(9):
|
||||
for x in range(12):
|
||||
grid.at(x, y).tilesprite = FLOOR_STONE
|
||||
|
||||
# Add wall border
|
||||
for x in range(12):
|
||||
grid.at(x, 0).tilesprite = WALL_STONE
|
||||
grid.at(x, 0).walkable = False
|
||||
grid.at(x, 8).tilesprite = WALL_STONE
|
||||
grid.at(x, 8).walkable = False
|
||||
for y in range(9):
|
||||
grid.at(0, y).tilesprite = WALL_STONE
|
||||
grid.at(0, y).walkable = False
|
||||
grid.at(11, y).tilesprite = WALL_STONE
|
||||
grid.at(11, y).walkable = False
|
||||
|
||||
# Add player entity - a knight!
|
||||
player = mcrfpy.Entity(
|
||||
grid_pos=(6, 4),
|
||||
texture=texture,
|
||||
sprite_index=PLAYER_KNIGHT
|
||||
)
|
||||
grid.entities.append(player)
|
||||
|
||||
# Add decorations
|
||||
for pos, sprite in [((2, 2), TORCH), ((9, 2), TORCH), ((2, 6), BARREL), ((9, 6), SKULL)]:
|
||||
entity = mcrfpy.Entity(grid_pos=pos, texture=texture, sprite_index=sprite)
|
||||
grid.entities.append(entity)
|
||||
|
||||
# Center camera on player
|
||||
grid.center = (6 * 16 + 8, 4 * 16 + 8)
|
||||
|
||||
# Add title
|
||||
title = mcrfpy.Caption(text="Part 1: The '@' and the Dungeon Grid", pos=(50, 20))
|
||||
title.fill_color = mcrfpy.Color(255, 255, 255)
|
||||
title.font_size = 28
|
||||
scene.children.append(title)
|
||||
|
||||
subtitle = mcrfpy.Caption(text="Creating a grid, placing entities, handling input", pos=(50, 50))
|
||||
subtitle.fill_color = mcrfpy.Color(180, 180, 200)
|
||||
subtitle.font_size = 16
|
||||
scene.children.append(subtitle)
|
||||
|
||||
# Activate scene
|
||||
scene.activate()
|
||||
|
||||
# In headless mode, screenshot() is synchronous - renders then captures!
|
||||
result = automation.screenshot(OUTPUT_PATH)
|
||||
print(f"Screenshot saved: {OUTPUT_PATH} (result: {result})")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
# Run it
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue