Files
hakorune/examples/maze_generator_simple.nyash
Moe Charm 0bed0c0271 🎉 initial commit: Nyash Programming Language完成版
🚀 主要機能:
• Everything is Box哲学による革新的アーキテクチャ
• WebAssemblyブラウザー対応プレイグラウンド
• アーティスト協同制作デモ - 複数Boxインスタンス実証
• 視覚的デバッグシステム - DebugBox完全統合
• static box Mainパターン - メモリ安全設計

 言語機能:
• NOT/AND/OR/除算演算子完全実装
• ジェネリクス/テンプレートシステム
• 非同期処理(nowait/await)
• try/catchエラーハンドリング
• Canvas統合グラフィックス

🎨 ブラウザー体験:
• 9種類のインタラクティブデモ
• リアルタイムコード実行
• WebCanvas/WebConsole/WebDisplay
• モバイル対応完了

🤖 Built with Claude Code collaboration
Ready for public release!
2025-08-09 15:14:44 +09:00

192 lines
4.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 🌀 シンプルな迷路ジェネレーター - outboxキーワード活用デモ
// より単純なアルゴリズムで確実に動く迷路を生成
print("=== Simple Maze Generator with outbox ===")
// Cellの定義迷路の1マス
box Cell {
init { x, y, isWall }
Cell(x_pos, y_pos, wall_flag) {
me.x = x_pos
me.y = y_pos
me.isWall = wall_flag
}
makePassage() {
me.isWall = false
}
makeWall() {
me.isWall = true
}
}
// 迷路Box定義
box Maze {
init { width, height, cells }
Maze(w, h) {
me.width = w
me.height = h
me.cells = new MapBox()
// 初期化:全部壁にする
local y, x, key, cell
y = 0
loop(y < h) {
x = 0
loop(x < w) {
key = x + "," + y
cell = new Cell(x, y, true) // 初期状態は壁
me.cells.set(key, cell)
x = x + 1
}
y = y + 1
}
}
// 座標からCellを取得
getCell(x, y) {
local key
key = x + "," + y
return me.cells.get(key)
}
// シンプルな迷路生成
generateSimple() {
print("Generating simple maze...")
// 奇数座標を通路にする(単純なグリッドパターン)
local y, x, cell
y = 1
loop(y < me.height - 1) {
x = 1
loop(x < me.width - 1) {
// 両方とも奇数なら通路
if isOddSimple(x) && isOddSimple(y) {
cell = me.getCell(x, y)
cell.makePassage()
}
x = x + 1
}
y = y + 1
}
// 偶数行の奇数列に通路を追加(縦の通路)
y = 2
loop(y < me.height - 1) {
x = 1
loop(x < me.width - 1) {
if isEvenSimple(y) && isOddSimple(x) {
// 50%の確率で通路にする(疑似ランダム)
if shouldMakePassage(x, y) {
cell = me.getCell(x, y)
cell.makePassage()
}
}
x = x + 2
}
y = y + 2
}
// 奇数行の偶数列に通路を追加(横の通路)
y = 1
loop(y < me.height - 1) {
x = 2
loop(x < me.width - 1) {
if isOddSimple(y) && isEvenSimple(x) {
// 50%の確率で通路にする(疑似ランダム)
if shouldMakePassage(x + 1, y + 1) {
cell = me.getCell(x, y)
cell.makePassage()
}
}
x = x + 2
}
y = y + 2
}
}
// 迷路を表示
display() {
print("\nGenerated Maze:")
local y, x, line, cell
y = 0
loop(y < me.height) {
line = ""
x = 0
loop(x < me.width) {
cell = me.getCell(x, y)
if cell.isWall {
line = line + "■"
} else {
line = line + " "
}
x = x + 1
}
print(line)
y = y + 1
}
}
}
// MazeFactory定義
box MazeFactory {
init { dummy }
}
// static関数でoutboxを使用
static function MazeFactory.createSimple(width, height) {
print("MazeFactory.createSimple called with size: " + width + "x" + height)
// outbox変数で迷路オブジェクトを作成
outbox maze
maze = new Maze(width, height)
// 迷路を生成
maze.generateSimple()
return maze // 所有権を呼び出し側に移転
}
// ヘルパー関数(簡易版)
function isOddSimple(n) {
// 2で割った余りが1かチェック簡易実装
local div2
div2 = n * 0 // 0で初期化
loop(div2 * 2 + 1 <= n) {
div2 = div2 + 1
}
return (n == div2 * 2 + 1)
}
function isEvenSimple(n) {
// 2で割った余りが0かチェック簡易実装
local div2
div2 = n * 0 // 0で初期化
loop(div2 * 2 < n) {
div2 = div2 + 1
}
return (n == div2 * 2)
}
// 疑似ランダムで通路にするか決定
function shouldMakePassage(x, y) {
// 座標ベースの疑似ランダム
local seed
seed = (x * 7 + y * 13) - ((x * 7 + y * 13) >= 100) * 100
return seed < 50
}
// メイン実行
print("\n--- Small Maze (11x7) ---")
maze1 = MazeFactory.createSimple(11, 7)
maze1.display()
print("\n--- Medium Maze (21x11) ---")
maze2 = MazeFactory.createSimple(21, 11)
maze2.display()
print("\n=== Simple Maze Generator completed! ===")
print("Note: Outbox successfully transfers maze ownership!")