UNPKG

rogsh

Version:

Unix command-line learning roguelike game

237 lines (174 loc) 11.3 kB
以下は「Unix のコマンドを実際に叩きながらダンジョンを攻略する“学習型ローグライク”」の詳細設計案です。学習・ゲーム性・拡張性の3点を両立させることを目標にしています。 "rogsh" (rogue shell) 1. コアコンセプト 世界観: あなたは壊れかけた巨大計算機 “Ω-Cluster” のメンテナンスエージェント。内部は階層化されたファイルシステム型ダンジョン。腐敗したプロセス(モンスター)や壊れたシンボリックリンク、暴走するデーモンを鎮め、ルート階層 /core に到達して再起動パッチを適用するのが目的。 学習目的: 自然な “攻略手段” として UNIX コマンド(ls, find, grep, chmod, kill, tar, jq 等)を使わせ、出力を読み取り意思決定することでコマンドライン操作スキルを習得させる。 ゲームループ: 未探索ディレクトリ(部屋)へ移動 (cd) 状況把握 (ls / stat / cat / head / top) 資源(パッケージ, スクリプト, 権限)を確保 敵プロセスへの対処(kill / nice / renice / strace 的擬似コマンド) セキュリティギミック解除(chmod / chown / gpg / ssh) 次の階層へ(特殊ファイルやマウントポイント) 断続的に “システムイベント” (cron, log flood, disk full) が発生し優先順位付けを学ぶ パーマデス or セミパーマデス: 一度 “system panic” で終了。ただし集めた “Knowledge Cache” はメタ進行として残り、再挑戦で新コマンド解禁や補助ヒント精度向上。 2. 表層インタフェース シェル風 UI: 1行プロンプト: rogsh:[HP=34 FS=/var/cache/log α-depth=3]$ コマンド補完: TAB で候補表示(学習進捗に応じ段階的開放)。 ヘルプ統合: man <topic> が通常の man 風 + 例をゲーム状況に合わせた Tips 化(実例:man find 内に “腐敗ファイルを効率探索する例”)。 簡易 DSL: 一部コマンドはゲーム用オプションが増強(例: grep --threat でマルウェアシグネチャ探索)。 3. データ構造(ダンジョン生成) 要素 ゲーム内対応 生成アルゴリズム 階層 (depth) /srv/cluster/zone<N> モジュラ型(Biased DFS + ルームタグ) 部屋 ディレクトリ テンプレ + ランダム資源/敵テーブル 通路 サブディレクトリ / シンボリックリンク 一定確率で壊れたリンク(修復イベント) 宝 圧縮アーカイブ(.tar.gz), スクリプト, 設定ファイル レア度に応じ圧縮形式差異 罠 SUIDファイル, パーミッショントラップ, Fork bomb fragment 重み付き確率配置 ボス デーモンサービスユニット 各ゾーン終端に1体 ランダム生成例: /srv/cluster/zone3/ auth/ .creds.enc (gpgで復号必要) session.tmp (腐敗度属性) logs/ access.log access.log.1.gz error.log (増加中: tailで監視要) bin/ cleanup.sh (権限 600 → chmod +x) fork_fragment.c (放置で敵 spawn) orphan -> ../../zone2/cache/tmp (壊れたシンボリックリンク) 4. リソースとステータス ステータス 説明 変動手段 HP (Integrity) システム健全度 敵攻撃/ログ過負荷/修復処理で回復 EP (Energy / CPU Quota) コマンド実行に消費(重いパイプラインで多消費) 時間経過 / 軽量プロセスkillで回復 Disk Usage 容量閾値超で panic risk 上昇 不要ファイル削除 (rm, shred), 圧縮 Threat Level 敵活性度 過剰放置で増加、適切killで減少 Knowledge メタ経験値(アンロック) 新コマンド初使用 / ボス撃破 / 効率評価 5. 敵(プロセス)タイプ例 名称 特徴 対処コマンド例 ZombieProcess HP低いが放置で Threat+ ps で検出→ kill -HUP LogLeech ログ膨張 (disk使用増) tail -f 監視→ grep -v でフィルタ設定→ logrotate 擬似 ForkSprite 徐々に子を増殖 優先して kill -9 / 原因スクリプト削除 PermissionWraith パーミッション書換え ls -l 差分監視→ chmod/chattr PortSpecter ポート占有→遅延 netstat / lsof -i→ kill CryptoCrawler 暗号化進行 find + file で異常検出→ mv 隔離 6. “戦闘” メカニクス 従来のターン制を “コマンド一行 = 1ターン” にマッピング。 入力→パース→内部アクション群に変換→ログ表示。 時間コスト: パイプや長いオプション列は EP 多め。 敵はプレイヤー行動後に行動(例外: 高速敵は割込 “interrupt” を挿入し ctrl+c でキャンセル可能)。 6.1 アクション例 意図 実コマンド 効果 敵プロセス列挙 `ps aux grep -v safe` 増殖源探索 grep -R "while(true)" -n . 危険スクリプト位置特定 広域隔離 tar -czf suspect.tar.gz suspect/ ディレクトリ封印 (一時的行動不能) リソース整理 `du -sh * sort -h 自動化 bash cleanup.sh スクリプト成功で複数効果連鎖 7. 成長とアンロック レベル帯 新機能 初期 基本: ls, cd, cat, head, rm, mkdir 中期 find, grep, chmod, ps, kill, tar, diff 上級 awk, sed, xargs, lsof, netstat, strace(簡略), jq, gpg エンド 自作 alias / 関数 / 小スクリプト登録 (メタビルド) “チャレンジ達成” :例 “1行で3条件フィルタ” → ボーナス Knowledge 誤用(危険 rm)時は “シミュレーション領域” で安全な警告ログを出す (学習性保持, 理不尽死回避) 8. クエスト/イベント例 イベント 説明 解法例 Log Flood error.log が毎ターン肥大 grep -v でフィルタ or truncate -s 0 error.log 隔離領域暗号化 .enc急増 find . -name "*.enc" -mtime -1 → 隔離 壊れたリンク迷路 循環 symlink find -L . -type l で壊れリンク検出→再設定 権限インバージョン 実行権外れ全滅 chmod +x *.sh の自動回復スクリプト作成 Cron Storm 定期スポーン /etc/cron.d/ 内不審ジョブ削除 9. スコアリング 要素 評価 到達深度 基礎点 平均コマンド長 効率ボーナス (短すぎは減点: 可読性ペナルティ) 未使用解禁コマンド数 探索ボーナス ダメージ最小化 防御点 自動化度 (alias/スクリプト利用割合) 上級ボーナス パニック回避イベント数 リアクティブボーナス 10. チュートリアル フロー(例) ls / cd: 基本移動。“Infra Sprite” に近づくため cd bin 指示 cat / head: README.zone で勝利条件説明 ps / kill: 初めての敵。指定 PID kill find: “corrupted.tmp” 探索 grep: ログから “ERROR” 抽出 chmod +x cleanup.sh && ./cleanup.sh: 自動化体験 tar: 初アーカイブ宝物。開封で次階層鍵出現 各ステップ後 man <コマンド> へのリンク風ヒント。 11. サンプルプレイ(ショートログ) rogsh:[HP=50 EP=40 zone2:/srv/cluster/zone2]$ ls auth bin logs orphan -> ../../zone1/cache/tmp README.zone rogsh:$ cat README.zone > Zone2 Objective: reduce Threat below 10 and secure 'auth/.creds.enc' rogsh:$ ps PID TYPE THRT CMD 114 LogLeech 4 tail -f error.log 203 ForkSprite 6 spawn_child.sh rogsh:$ kill 203 [OK] ForkSprite terminated. Threat -3 (now 7) rogsh:$ tail -n 5 logs/error.log ... WARN disk almost full ... rogsh:$ du -sh logs/* 4.0M logs/access.log 58M logs/error.log rogsh:$ truncate -s 0 logs/error.log [LogLeech] loses feeding source. Threat -2 (now 5) rogsh:$ ls auth .creds.enc session.tmp rogsh:$ file auth/.creds.enc .creds.enc: GPG encrypted data rogsh:$ gpg -d auth/.creds.enc > auth/creds.txt [Success] Credentials recovered! Zone2 cleared. 12. 実装アーキテクチャ案 レイヤ 技術候補 役割 コアエンジン Python / Rust ダンジョン生成・敵AI・状態遷移 コマンドパーサ Python: argparse 拡張 / Rust: nom 入力→AST→アクション シェルUI Text: curses / Web: xterm.js + WebSocket インタラクション ログ & man Markdown テンプレ + Jinja2 動的例挿入 セーブ/メタ SQLite / JSON 進行状況保存 拡張 plugin ディレクトリ (Python entry points) 新コマンド/敵/イベント追加 安全サンドボックス: 実際の OS には触れず、仮想ファイルシステム (in-memory tree) + 仮想プロセステーブル。コマンドは “シミュレート” し、実 OS の rm などを呼ばない。 13. 教育分析機能 プレイ後 “コマンド頻度ヒートマップ” 最適化余地(例: 連続 grep | awk → awk 置換提案) 未使用コマンドの具体的活用例提示 個人学習曲線(ゾーン別失敗種別) 14. バランス調整パラメータ (例) パラメータ 初期値 コメント threat_decay_per_turn -1 放置緩和度 fork_spawn_rate 0.15 ForkSprite 増殖確率 disk_full_threshold 80% 超過で panic リスク上昇 energy_regen_per_turn 2 EP 回復 heavy_pipeline_cost_factor 1.5 パイプ段数×係数 これらを JSON 設定化して “難易度モード” (Easy/Hard) 切替。 15. 拡張アイデア テーマ 内容 マルチプレイ 複数エージェントで同一 FS を協力管理 (競合ロック / tmux風表示) 実教材連動 challenge packs として練習課題セットを DLC 化 リプレイ 全コマンドログ → 学習ポートフォリオ出力 (Markdown) 実行可スニペット共有 ゲーム内 “gist” 風で自作スクリプトを他プレイヤへ 16. MVP スコープ(最初に作る最小要素) 仮想 FS 生成(10–15 ディレクトリ) 基本コマンド(ls, cd, cat, ps, kill, find, grep, chmod, tar のサブセット) 3種の敵(ZombieProcess, ForkSprite, LogLeech) 単層~2層深さ + 1 ボス(DaemonCore) シンプルスコア + 死亡(パニック) 条件 チュートリアルシナリオ + ログ/ヒント 17. リスクと対策 リスク 対策 学習曲線が急 コマンド段階的解禁 + hint コマンド 現実コマンドとの差異混乱 man に “本ゲーム差分” セクション明示 スパム試行 (総当り) EP コスト + 非効率行動警告メッセージ テキストだけで単調 色付け / アイコン化 (PID種別) / 軽いアスキーアート 上級者が早期飽き タイムアタック / 実行行数制限モード / ランダムイベント頻度増 18. 成功指標 (KPI) 初回セッション継続率 (15分継続割合) セッション内新コマンド習得数 3回目以降プレイでの平均コマンド短縮率 チュートリアル完走率 プレイ後自己報告の “学習有用度スコア” (アンケート) まとめ "rogsh" は UNIX 操作を "行動" に変換し、問題解決の文脈で反復させる ことで記憶定着と応用力向上を図るローグライクです。上記設計を基に、まず MVP を構築しプレイヤー行動ログを元に難度調整と教育価値評価を行う流れが現実的です。 さらに詳細が必要なセクション(例:内部データモデル、擬似コマンド仕様、難易度テーブル)などあれば指定してください。どこを深堀りしましょうか?