一個功能完整的迷宮產生專案,包含網頁版和 C 語言命令列版本,支援種子碼重現和列印輸出。
立即試玩: https://wmh.github.io/maze/
無需安裝,直接在瀏覽器中體驗迷宮產生器!
- 🎨 精美的漸層介面設計
- 📏 可自訂迷宮尺寸 (5-50)
- 🎲 隨機生成迷宮或使用種子碼重現
- 🔢 種子碼系統(類似 Minecraft)
- 🟢 起點與 🔴 終點標記
- 🖨️ 列印功能
- 📱 響應式設計,支援各種螢幕尺寸
- ⚡ 即時互動生成
- 📄 輸出 SVG 向量圖格式
- 🖨️ 適合列印到 A4 紙張 (210×297mm)
- 🎯 自動置中與尺寸計算
- 🌐 生成精美的 HTML 預覽頁面
- 🔢 支援種子碼重現相同迷宮
- 🎲 使用改良的迭代式 DFS 演算法
- 💾 純 C 語言實作,無外部依賴
方法一:線上使用(推薦)
直接訪問 GitHub Pages:https://wmh.github.io/maze/
方法二:本地使用
- 直接用瀏覽器開啟
index.html - 輸入想要的寬度和高度
- (選填)輸入種子碼以重現特定迷宮
- 點擊「產生迷宮」按鈕
- 點擊「🖨️ 列印」按鈕可直接列印
# 使用命令列開啟
xdg-open index.html # Linux
open index.html # macOS
start index.html # Windows# 使用 Makefile
make
# 或直接編譯
gcc -Wall -O2 -o maze maze.c# 預設尺寸 (31x41,自動調整為奇數)
./maze
# 自訂尺寸
./maze 51 71
# 使用種子碼重現迷宮
./maze 31 41 12345
# 指定輸出檔名
./maze 41 51 12345 my_maze.svg命令格式:
./maze [width] [height] [seed] [filename]
注意:寬度和高度會自動調整為奇數(演算法要求)。例如輸入 30×40 會自動調整為 31×41。
輸出檔案:
maze.svg- SVG 向量圖檔maze.html- 可預覽和列印的 HTML 網頁(包含種子資訊)
開啟生成的 maze.html,點擊「🖨️ 列印迷宮」按鈕,或按 Ctrl+P (Windows/Linux) / Cmd+P (macOS)。
.
├── index.html # 網頁版主檔案
├── style.css # 網頁樣式(含列印樣式)
├── maze.js # JavaScript 迷宮生成邏輯
├── maze.c # C 語言版本源碼
├── Makefile # 編譯配置
├── maze # 編譯後的執行檔 (需編譯)
├── maze.svg # 生成的 SVG 檔案 (執行後產生)
├── maze.html # 生成的 HTML 檔案 (執行後產生)
├── docs/ # 文檔目錄
│ ├── TECHNICAL.md # 技術文檔
│ └── (其他文檔)
├── .ai-context.md # AI 協作上下文
└── README.md # 本說明文件
使用改良的迭代式 DFS + 隨機回溯演算法生成迷宮:
- 從起始點開始,標記為路徑
- 使用棧記錄訪問路徑
- 關鍵改進:30% 機率隨機跳回較早的棧位置(創造分岔)
- 70% 繼續正常 DFS 探索(保持連貫性)
- 隨機選擇未訪問的相鄰格子
- 移除兩格之間的牆
- 重複直到所有格子都被訪問
此演算法保證生成的迷宮:
- ✅ 有唯一解(單一路徑從起點到終點)
- ✅ 完美迷宮 (Perfect Maze)
- ✅ 更多有意義的分岔路徑(比傳統遞迴回溯更複雜)
- ✅ 避免長走廊問題
- ✅ 使用種子碼可完美重現
類似 Minecraft 的世界種子,使用相同的種子碼和尺寸,無論何時何地都能生成完全相同的迷宮。
網頁版:
- 在「種子碼」欄位輸入數字(例如:12345)
- 點擊「產生迷宮」
- 分享種子碼給朋友,他們可以生成相同的迷宮!
C 語言版:
./maze 31 31 12345 # 每次執行都生成相同的迷宮使用 Linear Congruential Generator (LCG) 確保跨平台一致性:
- C 語言和 JavaScript 使用相同的隨機數公式
- 相同種子 + 相同尺寸 = 完全相同的迷宮
- 不依賴系統的
rand()或Math.random()
- HTML5 - 結構
- CSS3 - 樣式與動畫(含列印專用樣式)
- Vanilla JavaScript - 邏輯實作(無框架)
- 標準 C (C99)
- 無外部依賴 - 只使用標準函式庫
- SVG 輸出 - 文字格式,易於調試
- A4 尺寸適配 - 精確的 mm 單位控制
- GCC 4.8+
- Clang 3.4+
- MSVC 2015+
- 任何現代瀏覽器 (Chrome, Firefox, Safari, Edge)
- C 編譯器 (GCC / Clang / MSVC)
- Make (選用,用於 Makefile)
./maze 21 31./maze 41 51./maze 31 31 88888
# 分享:「試試種子 88888 的 31×31 迷宮!」./maze 31 41 12345 # 使用種子 12345make cleanMIT License
v2.0 - 2025-10-19
- ✨ 新增種子碼系統(可重現迷宮)
- 🎨 改良演算法(迭代式 DFS + 隨機回溯)
- 🖨️ 網頁版新增列印功能
- 📱 優化列印樣式
- 📝 完善文檔
v1.0 - 2025-10-15
- 🎉 初始版本
- 基本迷宮生成功能(遞迴回溯)
- 網頁版和 C 語言版
歡迎提交 Issue 和 Pull Request!
有問題或建議?歡迎開 Issue 討論!
⭐ 如果這個專案對你有幫助,歡迎給個 Star!